нужно выводить построчно содержимое текстового файла, при этом файл дописывается раз два в сутки. Тут на форуме подсказали уже немного переделал вроде заработало, но возникла другая проблема при отключении питания переход по строчкам перестает работать. Я так понимаю переменную которая отвечает за нумерацию строк можно записывать в отдельный файл на sd? но ничего не получается. Помогите пожалуйста
Вот предыдущая тема http://forum.amperka.ru/threads/lcd2004-sdcard-как-вывести-данные-построчно-РЕШЕНО.5329/
Вот сам скетч Код (Text): #include <DS1302.h> #include <Wire.h> #include <LiquidCrystal.h> #include <SD.h> DS1302 rtc(22, 24, 26); // (RST, DAT, CLK) LiquidCrystal lcd(12, 11, 5, 4, 3, 2); int var = 0; Time t; File myFile; // объявление массива начал строк #define MAX_STRS 365 int filestrs [MAX_STRS]; // резервируем целых 730 байт. Нужно смотреть за расходом ОЗУ. int firststr=0; // номер первой строки на дисплее int lastfilestr; // количество строк в файле int menuup_flag=0; int menudown_flag=0; int Recflag=0; int menuup_flag3=0; int menudown_flag3=0; int menuup_flag2=0; int menudown_flag2=0; int interval = 60; int interval2 = 60; int interval3 = 60; int podacha10bt1 = 30; int podacha1bt1 = 31; int kurokbt1 = 32; int podacha10bt2 = 33; int podacha1bt2 = 34; int kurokbt2 = 35; int dvig3 = 23; int dvig2 = 25; int dvig = 27; int podacha10bt3 = 36; int podacha1bt3 = 37; int kurokbt3 = 38; int offbt = 39; int readbt = 40; int nastrbt = 41; int nastrel1 = 0; int zadanie1 = 0; int magaz1 = 0; int nastrel2 = 0; int zadanie2 = 0; int magaz2 = 0; int nastrel3 = 0; int zadanie3 = 0; int magaz3 = 0; int obsh_nastrel= 0; int flag=0; int flag1=0; int flag2=0; int flag2_1=0; int flag3=0; int flag3_1=0; unsigned long math_time,old_time,real_time; unsigned long math_time2,old_time2,real_time2; unsigned long math_time3,old_time3,real_time3; static boolean output = LOW; static boolean output2 = LOW; static boolean output3 = LOW; static boolean output2_1 = LOW; static boolean output2_2 = LOW; static boolean output2_3 = LOW; static boolean output3_1 = LOW; static boolean output3_2 = LOW; static boolean output3_3 = LOW; static boolean outoffbt = LOW; static boolean readbt_state = LOW; static boolean rec_state = LOW; static boolean nastrbt_state = LOW; void setup() { // rtc.halt(false); //rtc.writeProtect(false); // rtc.setDOW(SUNDAY); // Set Day-of-Week to FRIDAY Monday //rtc.setTime(12, 19, 0); // Set the time to 12:00:00 (24hr format) //rtc.setDate(28, 06, 2015); // Set the date to August 6th, 2010 Serial.begin(9600); pinMode(podacha10bt1, INPUT); pinMode(podacha1bt1, INPUT); pinMode(kurokbt1, INPUT); pinMode(podacha10bt2, INPUT); pinMode(podacha1bt2, INPUT); pinMode(kurokbt2, INPUT); pinMode(podacha10bt3, INPUT); pinMode(podacha1bt3, INPUT); pinMode(kurokbt3, INPUT); pinMode(offbt, INPUT); pinMode(dvig3, OUTPUT); pinMode(dvig2, OUTPUT); pinMode(dvig, OUTPUT); pinMode(readbt, INPUT); pinMode(nastrbt, INPUT); pinMode(10, OUTPUT); lcd.begin(20, 4); delay(100); if (!SD.begin(10)) { Serial.println("initialization failed!"); return; } Serial.println("initialization done."); myFile = SD.open("van.txt"); if (myFile) { Serial.println("van.txt:"); while (myFile.available()) { lastfilestr=myFile.read(); Serial.write(lastfilestr); } myFile.close(); } else { lastfilestr=0; Serial.println("error reading van.txt"); } }
и вторая часть Код (Text): void loop() { t = rtc.getTime(); output = digitalRead(podacha10bt1); output2 = digitalRead(podacha1bt1); output3 = digitalRead(kurokbt1); output2_1 = digitalRead(podacha10bt2); output2_2 = digitalRead(podacha1bt2); output2_3 = digitalRead(kurokbt2); output3_1 = digitalRead(podacha10bt3); output3_2 = digitalRead(podacha1bt3); output3_3 = digitalRead(kurokbt3); outoffbt = digitalRead(offbt); readbt_state = digitalRead(readbt); nastrbt_state = digitalRead(nastrbt); delay(10); if(nastrbt_state == HIGH){ lcd.setCursor(0, 0); lcd.print(" N"); lcd.print(" "); lcd.print("delay"); lcd.setCursor(0, 1); lcd.print(" 1"); lcd.print("....."); lcd.print(interval); lcd.setCursor(0, 2); lcd.print(" 2"); lcd.print("....."); lcd.print(interval2); lcd.setCursor(0, 3); lcd.print(" 3"); lcd.print("....."); lcd.print(interval3); //.............Устройство 3 if(output3_1 == LOW && menuup_flag3==0) { menuup_flag3=1; } if(output3_1 == HIGH && menuup_flag3==1) { interval3 -=5; lcd.clear(); menuup_flag3=0; } if(output3_2 == LOW && menudown_flag3==0) { menudown_flag3=1; } if(output3_2 == HIGH && menudown_flag3==1) { interval3 +=5; lcd.clear(); menudown_flag3=0; } //.............Устройство 1 if(output2 == LOW && menudown_flag==0) { menudown_flag=1; } if(output2 == HIGH && menudown_flag==1) { interval +=5; lcd.clear(); menudown_flag=0; } if(output == LOW && menuup_flag==0) { menuup_flag=1; } if(output == HIGH && menuup_flag==1) { interval -=5; lcd.clear(); menuup_flag=0; } //.............Устройство 2 if(output2_2 == LOW && menudown_flag2==0) { menudown_flag2=1; } if(output2_2 == HIGH && menudown_flag2==1) { interval2 +=5; lcd.clear(); menudown_flag2=0; } if(output2_1 == LOW && menuup_flag2==0) { menuup_flag2=1; } if(output2_1 == HIGH && menuup_flag2==1) { interval2 -=5; lcd.clear(); menuup_flag2=0; } } else{ if(readbt_state == HIGH && nastrbt_state == LOW){ myFile = SD.open("tir.txt"); if (myFile) { myFile.seek(filestrs[firststr]); char tmpstr[20]; char tmpstrlen=0; while (myFile.available()) { // читаем первую строку tmpstr[tmpstrlen]=myFile.read(); if ((tmpstr[tmpstrlen]=='\n')||(tmpstr[tmpstrlen]=='\r')) break; tmpstrlen++; } lcd.setCursor(0,0); lcd.print(tmpstr); tmpstr[tmpstrlen]=0; while (myFile.available()) { // гоним до следующей строки, пока не пропустим все переводы строки char ch=myFile.read(); if ((ch!='\n')&&(ch!='\r')) break; } tmpstrlen=0; while (myFile.available()) {// читаем вторую строку tmpstr[tmpstrlen]=myFile.read(); if ((tmpstr[tmpstrlen]=='\n')||(tmpstr[tmpstrlen]=='\r')) break; tmpstrlen++; } lcd.setCursor(0,1); lcd.print(tmpstr); tmpstr[tmpstrlen]=0; myFile.close(); } // обрабатываем кнопки menuup_flag if(output3_1 == LOW && menuup_flag==0) { menuup_flag=1; } if (output3_1 == HIGH && menuup_flag==1) { if (firststr > 0) firststr--; lcd.clear(); menuup_flag=0; } if (output3_2 == LOW && menudown_flag==0) { menudown_flag=1; } if (output3_2 == HIGH && menudown_flag==1) { if (firststr < 99) firststr++; // если уже стоим на предпоследней строке, дальше двигаться нельзя. menudown_flag=0; lcd.clear(); } } else { //.........Устройство 1............. if(digitalRead(podacha10bt1)==HIGH && output==HIGH) { math_time = 0; old_time = millis(); while(math_time < 4000 && output > LOW) { real_time = millis(); //получить реальное время math_time = real_time - old_time; //считаем длительность удержания output=digitalRead(podacha10bt1); } if(math_time > 3999 && magaz1 < 100) { magaz1 += 300; } else if(math_time > 200 && zadanie1 == 0 && magaz1 >= 10) { zadanie1 +=10; } } if(output2==LOW && magaz1 > 0 && zadanie1 < 10 && flag1==0) { flag1=1; } if(output2==HIGH && magaz1 > 0 && zadanie1 < 10 && flag1==1) { zadanie1 +=1; nastrel1 = nastrel1 -= 1; obsh_nastrel = obsh_nastrel -=1 ; flag1=0; } if(output3==LOW && zadanie1 > 0 && flag==0) { flag=1; } if(output3==HIGH && zadanie1 > 0 && flag==1) { zadanie1 -=1; magaz1 -= 1; nastrel1 = nastrel1 +=1 ; obsh_nastrel = obsh_nastrel +=1 ; digitalWrite(dvig, HIGH); delay (interval); digitalWrite(dvig, LOW); flag=0; } //.........Устройство 2............. if(digitalRead(podacha10bt2)==HIGH && output2_1==HIGH) { math_time2 = 0; old_time2 = millis(); while(math_time2 < 4000 && output2_1 > LOW) { real_time2 = millis(); //получить реальное время math_time2 = real_time2 - old_time2; //считаем длительность удержания output2_1=digitalRead(podacha10bt2); } if(math_time2 > 3999 && magaz2 < 100) { magaz2 += 300; } else if(math_time2 > 200 && zadanie2 == 0 && magaz2 >= 10) { zadanie2 +=10; } } if(output2_2==LOW && magaz2 > 0 && flag2==0) { flag2=1; } if(output2_2==HIGH && magaz2 > 0 && flag2==1) { zadanie2 +=1; nastrel2 = nastrel2 -= 1; obsh_nastrel = obsh_nastrel -=1 ; flag2=0; } if(output2_3==LOW && zadanie2 > 0 && flag2_1==0) { flag2_1=1; } if(output2_3==HIGH && zadanie2 > 0 && flag2_1==1) { zadanie2 -=1; magaz2 -= 1; nastrel2 = nastrel2 +=1 ; obsh_nastrel = obsh_nastrel +=1 ; digitalWrite(dvig2, HIGH); delay (interval2); digitalWrite(dvig2, LOW); flag2_1=0; } //.........Устройство 3............. if(digitalRead(podacha10bt3)==HIGH && output3_1==HIGH) { math_time3 = 0; old_time3 = millis(); while(math_time3 < 4000 && output3_1 > LOW) { real_time3 = millis(); //получить реальное время math_time3 = real_time3 - old_time3; //считаем длительность удержания output3_1=digitalRead(podacha10bt3); } if(math_time3 > 3999 && magaz3 < 100) { magaz3 += 300; } else if(math_time3 > 200 && zadanie3 == 0 && magaz3 >= 10) { zadanie3 +=10; } } if(output3_2==LOW && magaz3 > 0 && flag3==0) { flag3=1; } if(output3_2==HIGH && magaz3 > 0 && flag3==1) { zadanie3 +=1; nastrel3 = nastrel3 -= 1; obsh_nastrel = obsh_nastrel -=1 ; flag3=0; } if(output3_3==LOW && zadanie3 > 0 && flag3_1==0) { flag3_1=1; } if(output3_3==HIGH && zadanie3 > 0 && flag3_1==1) { zadanie3 -=1; magaz3 -= 1; nastrel3 = nastrel3 +=1 ; obsh_nastrel = obsh_nastrel +=1 ; digitalWrite(dvig3, HIGH); delay (interval3); digitalWrite(dvig3, LOW); flag3_1=0; } lcd.setCursor(0, 0); lcd.print("No"); lcd.print(" "); lcd.print("OST"); lcd.print(" "); lcd.print("MAG"); lcd.print(" "); lcd.print("SUM-"); lcd.print(" "); lcd.print(obsh_nastrel); lcd.print(" "); lcd.setCursor(0, 1); lcd.print("1"); lcd.setCursor(3, 1); lcd.print(zadanie1); lcd.print(" "); lcd.setCursor(7, 1); lcd.print(magaz1); lcd.print(" "); lcd.setCursor(11, 1); lcd.print(nastrel1); lcd.print(" "); lcd.setCursor(17, 1); lcd.print("AIR"); lcd.setCursor(0, 2); lcd.print("2"); lcd.setCursor(3, 2); lcd.print(zadanie2); lcd.print(" "); lcd.setCursor(7, 2); lcd.print(magaz2); lcd.print(" "); lcd.setCursor(11, 2); lcd.print(nastrel2); lcd.print(" "); lcd.setCursor(16, 2); lcd.print("SOFT"); lcd.setCursor(0, 3); lcd.print("3"); lcd.setCursor(3, 3); lcd.print(zadanie3); lcd.print(" "); lcd.setCursor(7, 3); lcd.print(magaz3); lcd.print(" "); lcd.setCursor(11, 3); lcd.print(nastrel3); lcd.print(" "); lcd.setCursor(15, 3); lcd.print("ARENA"); if(outoffbt == LOW && Recflag==0) { Recflag=1; } if(outoffbt == HIGH && Recflag==1){ lcd.clear(); SD.remove("van.txt"); delay(10); myFile = SD.open("van.txt", FILE_WRITE); if (myFile) { Serial.print("Writing to van.txt..."); Serial.println(lastfilestr+1); myFile.print(lastfilestr+1); myFile.close(); Serial.println("done."); } else { Serial.println("error writing van.txt"); } myFile = SD.open("tir.txt", FILE_WRITE); if (myFile) { filestrs[lastfilestr]=myFile.position(); // myFile.print(var); myFile.print("---"); // myFile.print(rtc.getDateStr()); // myFile.print(" "); myFile.print(rtc.getTimeStr()); myFile.print("---"); myFile.print(obsh_nastrel); myFile.print("---"); myFile.println(lastfilestr); lastfilestr++; myFile.close(); Serial.print("Writing to tir.txt..."); Serial.println(lastfilestr); //if(var == 99){ // var = 0; //} // Serial.println("done."); } else { // if the file didn't open, print an error: Serial.println("Error writing "); } // var++; Recflag=0; } } } } [/CODE]