Добрый день Цикл проходит 5 раз а не один. Т.е. если в файле нет строк проходит 5раз, если 1 строка то 6раз и т.д. Помогите разобраться Код (Text): void kolvoStr() { myFile = SD.open("test3.txt"); if (myFile) { char tmpstr[16]; char tmpstrlen=0; while (myFile.available()) { // читаем первую строку tmpstr[tmpstrlen]=myFile.read(); if ((tmpstr[tmpstrlen]=='\n')||(tmpstr[tmpstrlen]=='\r')) { stroki++; Serial.print("stroki"); Serial.println(stroki); //break; } } myFile.close(); } else { Serial.println("error opening test3.txt"); }
А какую библиотеку используешь? Может myFile.read() читает символ, а не строку? В этом случае нужно писать что то типа result=file.readLn(textBuffer, 80);
myFile.read() читает символ, но не совсем понимаю как сделать, после миганием светодиодами и кручением сервой сложновато пока понять что и как
Это не библиотека а среда Arduino IDE. А библиотека это то что вы в #include указали. Например Код (Text): #include <tinyFAT.h>
вот весь код Код (Text): #include <SD.h> int offbt = 37; int podacha10bt3 = 30; int podacha1bt3 = 31; int kurokbt3 = 36; File myFile; int stroki; static boolean outoffbt = LOW; static boolean output3_3 = LOW; int menuup_flag=0; int Recflag=0; void setup() { Serial.begin(9600); Serial.print("Initializing SD card..."); pinMode(53, OUTPUT); if (!SD.begin(10)) { Serial.println("initialization failed!"); return; } Serial.println("initialization done."); } void loop() { output3_3 = digitalRead(kurokbt3); outoffbt = digitalRead(offbt); if(outoffbt == LOW && Recflag==0) { Recflag=1; } if(outoffbt == HIGH && Recflag==1){ writeStr(); Recflag=0; } if(output3_3 == LOW && menuup_flag==0) { menuup_flag=1; } if (output3_3 == HIGH && menuup_flag==1) { kolvoStr(); menuup_flag=1; } } void kolvoStr() { myFile = SD.open("test3.txt"); if (myFile) { char tmpstr[16]; char tmpstrlen=0; while (myFile.available()) { // читаем первую строку tmpstr[tmpstrlen]=myFile.read(); if ((tmpstr[tmpstrlen]=='\n')||(tmpstr[tmpstrlen]=='\r')) { stroki++; Serial.print("stroki"); Serial.println(stroki); //break; } } myFile.close(); } else { Serial.println("error opening test3.txt"); } } void writeStr() { myFile = SD.open("test3.txt", FILE_WRITE); if (myFile) { Serial.print("Writing to test4.txt..."); myFile.println("testing 1, 2, 3."); myFile.close(); Serial.println("done."); } else { Serial.println("error opening test4.txt"); } }
Возможно, что эта библиотека не может читать построчно, смотрите в сторону SdFat.h или tinyFAT.h. Последнюю надо найти и скачать.
если я не ошибаюсь тут мы отсчитываем 16 символов, т.е. одна строка Код (Text): char tmpstr[16]; char tmpstrlen=0; while (myFile.available()) { // читаем первую строку tmpstr[tmpstrlen]=myFile.read();
Извините, не разглядел ваш код, действительно вы посимвольно выбираете строку. Но почему всегда в 0 позицию? tmpstrlen всегда = 0?
кусок кода выдрал с форума, только учусь char tmpstr[16]; int tmpstrlen=0; не подскажете что дальше делать?
К сожалению я сам не особо силен в Си, но попробуйте так: Код (Text): while (myFile.available()) { // читаем первую строку tmpstr[tmpstrlen]=myFile.read(); tmpstrlen++; if ((tmpstr[tmpstrlen]=='\n')||(tmpstr[tmpstrlen]=='\r')) { stroki++; tmpstrlen=0; } }
ура заработало))) Код (Text): myFile = SD.open("test4.txt"); if (myFile) { char tmpstr[16]; //кол-во символов в строке int tmpstrlen=0; while (myFile.available()) { // читаем первую строку tmpstr[tmpstrlen]=myFile.read(); if (tmpstr[tmpstrlen]=='\n') tmpstrlen++; } myFile.close(); Serial.print("stroki"); Serial.println(tmpstrlen); } AlexVS, спасибо вам большое за помощь
можете подсказать? пытаюсь к ардуине нано подключить microSD карту. есть библиотека SD.h (родная с ардуино), скачал еще SdFat.h в примерах есть скетч дающий информацию о карте. карта на 2 гига microCD class 4, фирма mirex почему SD.h не инициализирует карту (сообщение: Card type: SD2 Could not find FAT16/FAT32 partition. Make sure you've formatted the card), а SdFat.h ее видит?