На карту все пишется исправно, необходима лишь одна делать. Как сделать так чтобы мое устройство определялось как флешка? Сейчас чтобы достать записанный файл мне нужно вытащить из устройства флешку, воткнуть в комп и увидеть файл. А нужно чтобы при подключении ардуины через USB можно увидеть флешку не вынимая из устройства. код программы прилагаю. #include <Wire.h> #include <LiquidCrystal_I2C.h> #include <SPI.h> #include <SD.h> LiquidCrystal_I2C lcd(0x27,16,2); #define sens A0 #define sensmq A1 const int chipSelect = 10; void setup() { Serial.begin(9600); while (!Serial); lcd.init(); lcd.backlight(); lcd.setCursor(0,0); lcd.print("Initializing "); lcd.setCursor(0,1); lcd.print("SD card..."); delay(1000); if (!SD.begin(chipSelect)) { lcd.setCursor(0,0); lcd.print("Card failed,"); lcd.setCursor(0,1); lcd.print("or not present."); delay(1000); return; } lcd.setCursor(11,1); lcd.print("DONE"); delay(1000); pinMode(sens, INPUT); pinMode(sensmq, INPUT); } void loop() { int data = analogRead(sens); int data1 = analogRead(sensmq); File dataFile = SD.open("datalog.txt", FILE_WRITE); if (dataFile) { dataFile.print("CO "); dataFile.print(data); dataFile.print(" CH4 "); dataFile.print(data1); dataFile.print(" H2 "); dataFile.print(data); dataFile.print(" LPG "); dataFile.println(data1); dataFile.close(); } else { lcd.clear(); lcd.setCursor(0,0); lcd.print("error opening datalog.txt"); lcd.setCursor(0,1); lcd.print("datalog.txt"); delay(1000); } lcd.setCursor(0,0); lcd.print("CO "); lcd.setCursor(data < 100 ? 6 : 5, 0); lcd.print(data); lcd.setCursor(0,1); lcd.print("CH4 "); lcd.setCursor(data1 < 100 ? 6 : 5, 1); lcd.print(data1); lcd.setCursor(9,0); lcd.print("H2 "); lcd.setCursor(data < 100 ? 14 : 13, 0); lcd.print(data); lcd.setCursor(9,1); lcd.print("LPG "); lcd.setCursor(data1 < 100 ? 14 : 13, 1); lcd.print(data1); delay(1000); }
Так понял, что нужно получать определённый файл с корня флешки. Простой способ: Через Serial порт Arduino должна принимать, например, строку "get <имя_файла>", и в ответ отправлять размер файла и данные, считанные из файла, соответствующие размеру. Соответственно на компьютере программка (которую так же необходимо будет написать) должна отправлять строку "get <имя_файла>" через COM-порт, в ответ получать размер данных и непосредственно сами данные и сохранять эти данные в файл. Сложный способ: В случае с оригинальной Arduino UNO, для второго контроллера ATmega16U2 можно попробовать написать прошивку, которая будет эмулировать USB-флэшку, при этом данные от реальной флэшки второй контроллер ATmega16U2 будет получать через Serial соединение с основным ATmega328P. Для реализации нужно будет покопаться в проекте LUFA, там есть заготовка для реализации эмуляции MassStorage на основе AVR. Но при реализации второго способа Arduino перестанет в системе определяться как плата Arduino.
На компьютере можно не писать программу, а писать лог из serial в файл. В том-же нетленном hyperterm есть "запись протокола в файл"
Можно подробней пожалуйста? гугл говорит про hyperterm что это либо плазморез либо система для управления модемом
Если память не изменяет, это оно и есть -- HyperTerminal. Но всё же программку для отправки данных в COM-порт и приёма написать не очень сложно. И это будет проще, чем из потока сохранённых данных выделять нужное.
Если один текстовый файл, то с программой для компьютера можно не заморачиваться -- возьмите любую программу, которая может слать данные в COM-порт (minicom, hyperterminal и т.п., да вроде как в Arduino IDE есть возможность общаться с Arduino через COM-порт -- монитор порта). Только скетч нужно немного доработать -- он должен проверять наличие данных в Serial и при наличии там, например, строки "get" обратно отправлять содержимое файла.