пролистывание строк на дисплее
- Войдите на сайт для отправки комментариев
Чт, 30/07/2015 - 19:55
Наконец кое что получилось и заработало, только есть проблемка, при перезагрузки перестают листаться строчки. Насколько понимаю обнуляется какая то переменная, много чего перепробовал но ничего не вышло. Подскажите пожалуйста что делать дальше?
#define MAX_STRS 365 int filestrs [MAX_STRS]; // резервируем целых 730 байт. Нужно смотреть за расходом ОЗУ. int firststr=0; // номер первой строки на дисплее int lastfilestr; // количество строк в файле void loop(){ //РЕЖИМ ЧТЕНИЯ 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; 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,2); 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,3); 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 < MAX_STRS-1) firststr++; // если уже стоим на предпоследней строке, дальше двигаться нельзя. menudown_flag=0; lcd.clear(); } } //ЗАПИСЬ БАЗЫ if(outoffbt == LOW && Recflag==0) { Recflag=1; } if(outoffbt == HIGH && Recflag==1){ lcd.clear(); 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(); } else { // if the file didn't open, print an error: Serial.println("Error writing "); } // var++; Recflag=0; } } }
Ни у кого никаких идей нет?
Задумался. ..
При перезагрузке перестают листаться строчки....
А когда ж они вообще листаются, если при оестарте не работают. ..
Все страньше и страньше. ..
Посмотрел код... а тот кто вам его написал, не хочет ремонтировать? Или вы забыли ему заплатить?
с кодом помог человек который щас занят, дело не в деньгах
значит дело не в обнулении переменной? не подскажете хотя б направление где искать?
с кодом помог человек который щас занят, дело не в деньгах
Не помог. А сделал за вас!
Такой маленький нюанс.
Может пойти к тому человеку и отблагодарить? Глядишь и не очень он занят.
Согласен эту часть сделал за меня. Отблагодарил конечно
Согласен эту часть сделал за меня. Отблагодарил конечно
Ну в целом вас можно показывать в разделе " им помогли" :)
оно вообще работает? :)
работает все листается пока не ребутнешь, и тогда все по новой удаляешь файл пишешь в него знавов и тогда работает пока не перегрузишь опять
Ну то что вы выдрали. Работать не может.
Где то еще куски потерялись.. а вообще эпично.. попробуйте компу по жесткому диску молотком стучать когда он пишет или читает.
Впечатление что писал человек далекий от мк
Код конечно корявый, но работает
Код конечно корявый, но работает
Ах у ели, ах у елки, ах у ели злые волки.
Гыыы
Только учусь.....
Все работает, осталось только разобраться с пролистыванием строк, но к сожалению ничего не получается(((
Не, я пасс. 800 строк с кучей вложений. У меня глаз дергается.
Просто подход изначально не правильный. Нельзя постоянно читать sd. Она должна читаться только по необходимости. Иначе при обрыве питания файл будет биться.
так она читается только когда заходишь в режим чтения, щедкнуд тумблер перешел в режим чтения
поэтому в первый раз выложил только тот кусок кода где идет запись и чтение с карты)
Угу щелкнул и как начало читать без остановки
так понял сделаю что б только один раз считывало, а с пролистыванием строк не подскажете что не так
так понял сделаю что б только один раз считывало, а с пролистыванием строк не подскажете что не так
А что с ним?
Вообще странный подход . ИМХО.
Я бы сначала порядок навел. МК не должен ничего делать пока нет событий. А он у вас лопатит как мельница и не понятно зачем.
код аверно не просто странный а жуткий с точки зрения профи, тут согласен. Порядок постараюсь навести, хотя с моими знаниями будет сложно..... С пролистыванием строк писал в начале, после перезагрузки перестают пролистываться
код аверно не просто странный а жуткий с точки зрения профи, тут согласен. Порядок постараюсь навести, хотя с моими знаниями будет сложно..... С пролистыванием строк писал в начале, после перезагрузки перестают пролистываться
Мне вот интересно, это с рождения у вас? Или приобретенное?
Я уже несколько раз написал. Да и неужели так тяжело причину определить?
Как вам видится sd card? Если не обращать внимания на размер, сильно от жесткого диска отличается?
Вот вы читаете книгу и тут вам по башке кирпич прилетел. Я думаю вы забудете и что читали и на какой странице и вообще книгу будет проще выкинуть, ибо кровью зальет.
считывать в setup() а пролистывание строк сделать в loop() ? а с записью в файл все нормально?
Есть такой прием, создание функций.
прошлый раз у нас ничего не получилось с функциями((
переделал, теперь считывание файла происходит только при нажатии на кнопки меню вверх и вниз, работает так же строки пролистываются и вверх и вниз, но при перезагрузки ардуины, опять отображаются только первые четыре строки и не листаются дальше
// объявление массива начал строк
И вот это всё влезло в память ардуины? o_0
> Нужно смотреть за расходом ОЗУ.
Взоржал в голос! И прямо за этим комментарием куча констант которые нужны раз за весь код.
до перезагрузки при нажатии на кнопку +
filestrs[firststr]_____16
firststr_____1
filestrs[firststr]_____32
firststr_____2
filestrs[firststr]_____48
firststr_____3
filestrs[firststr]_____64
firststr_____4
после перезагрузки при нажатии на кнопку +
filestrs[firststr]_____0
firststr_____1
filestrs[firststr]_____0
firststr_____2
filestrs[firststr]_____0
firststr_____3
filestrs[firststr]_____0
firststr_____4
пробовал сохранить в еепром filestrs[firststr] потом считать, в итоге в сериале 0 всеравно
Я вообще не понимаю зачем массив
Так в нем смещения начала строк в файле накапливаю по мере записи - строка 651. А при выводе на экран по ним строки и берутся. После ребута, понятно, массив чист и мы имеем эту тему. Но ТС чёто заподозрил и пытается сохранить массив в еепром, пока неудачно :) Воще конечно без массива наверно проще.
К стати в частом чтении SD воще криминала нет, зря переделывали.
Подскажите пожалуйста что делать?
Опять?
В прошлый раз, разобрали
1. Как прочитать из файла строку
2. Как посчитать строки в файле
3. Как их вывести на дисплей
Чего не хватает?
2. Как посчитать строки в файле
вы предлогаете другую схему без использования массивов?
Я ничего не предлагаю. Писать вам код я не буду. А обьяснять по 5 кругу лень.
так вроде с подсчетом строк разобрался
скажите правильно нет?
Пухлявый, ты хоть точку отсчета дай.
Примерный алгоритм, дальше пусть сам.
Я понимаю, жизнь скучна, но не за счет других.
Примерный алгоритм, дальше пусть сам.
Я понимаю, жизнь скучна, но не за счет других.
Слышь, баклан.. там ниже тема на 3 страницы жевали ему что и как... сходи и почитай. .. мне как бы надоело уже
тааак вроде заработало, подскажите правильно нет?
Писец... гадания на кусках кода... вырву там ку ок и влеплю куда нибуть...
Вернемся к началу. Бумага и карандаши. Блок схемы и алгоритмы. Азы програмирования.
вот полный код, сделал функции чтения и записи
вот только цикл почему то проходит 5 раз а не один
В #42 мне безмерно нравятся строки 23-26. Нету карты? Ну и пофиг!
> вот только цикл почему то проходит 5 раз а не один
Потому что
Возвращаемые значения
Количество доступных для чтения байт (int).
а как переделать?
Пухлявый пенек ты неубиваемый. Совета не у тебя просят, а бакланишь ты один.
Пухлявый пенек ты неубиваемый. Совета не у тебя просят, а бакланишь ты один.
Вот кроме куч гавна с твоей стороны вообще ничего не слышно... а кроме меня ему вообще никто не пишет :) да и мне уже надоело.
Возвращаемые значения
Количество доступных для чтения байт (int).
а как переделать?
Разобрался с подсчетом строк
правильно или нет?