Всем привет! Ну никак не получается настроить корректный вывод данных с SD карты на дисплей Nextion. Не могу найти информацию о том, какими функциями пользоваться... Вынужден просить помощь... Задача такая: записанные в файле "TEST.TXT" текст и числа вывести на дисплей. Начинал с чисел. Выводил как n0.val, но результат один и тот же - приходят данные в числовом формате. Если читаю из файла "TEKST", то приходит на дисплей "84", в мониторе выходит t1.txt="84"⸮⸮⸮ . Вот мой скетч, собранный кое-как. Буду рад любым подсказкам! Код (C++): #include <SoftwareSerial.h> #include <SPI.h> #include <SD.h> File myFile; void setup() { // Open serial communications and wait for port to open: Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for native USB port only } if (!SD.begin(4)) { Serial.println("initialization failed!"); while (1); } // re-open the file for reading: myFile = SD.open("test.txt"); Serial.print("t1.txt="); Serial.print("\""); // Since we are sending text we need to send double quotes before and after the actual text. Serial.print(myFile.read()); Serial.print("\""); // Since we are sending text we need to send double quotes before and after the actual text. Serial.write(0xff); Serial.write(0xff); Serial.write(0xff); // close the file: myFile.close(); } void loop() { // Put your main code here, to run repeatedly: }
Приветствую b707! Записано 123, приходит 1. Прописано TEST , в монитор приходит t1.txt="T"⸮⸮⸮ . На дисплей не приходит ничего.
ну значит мой метод работает, вместо цифр уже буквы. Продолжайте А должно? что-то про дисплей я у вас в скетче ни строчки не вижу
А что надо написать ? Nextion с внешним миром общается через UART и никаких конкретных упоминаний о себе не просит. АлексейНик - вы тут листали ? http://forum.amperka.ru/threads/Дисплей-nextion-азы-arduino-esp8266.9204/
Приветствую, Belkin! Я видел эту статью. Тогда не понял как ее применить к своей задаче, но сейчас новые мысли возникли. Уж больно замужрено сделано, например вот эта часть: lt =false-- прием сообщения str ="" count =0 uart.on("data",1,-- работаем с каждым пришедшим байтом function(dt)-- dt - это есть каждый новый байт if lt then-- прием разрешен if dt =="\255"then-- сравниваем с 0xff и считаем их до трех count = count +1 if count ==3then-- досчитали count =0-- сбросили счетчик pub(str)-- публикуем str =""-- очистили глобальную lt =false-- конец приема end else str = str..dt -- идет прием - формируем стринг -- если что-то идет криво и набралось много буков -- убиваем все и начинаем заново if#str >20then str =""; count =0end end end -- вначале у нас пустой стринг и \112 на входе: -- начинаем прием if str ==""and dt =="\112"then lt =true end end,0) Но я ее еще проанализирую обязательно. Что однозначно, так то, что я могу отправить и текст и цифры на дисплей через Serial.print. Так все работает. Могу считать данные с карты и отправить в монитор порта, все четко. Но если читаю данные с карты и отправляю их на дисплей, то идет искажение данных. Как будто проблема с кодированием данных. Или они приходят несистемно, образуя кашу. Иногда показывало -1. Карта отформатирована в FAT32. Это может влиять? Вот вопрос: как надо конвертировать считанные с карты данные перед отправкой на дисплей?
Разделите свою задачу на две: 1. Чтение данных с SD-карты 2. Передача данных в Nextion Если "1" решите (или уже решено) полноценно, то остается только сформировать правильную строку для передачи. Для решения "2" еще раз внимательно перелистайте указанное ранее. Там есть ответы, поверьте.
Belkin, Help me please! Не понимаю... Прочита много чего про String, получается передать текст из кода, но не прочитанный с флешки. Неужели нельзя одной командой конвертировать весь считанный текст и отправить в Serial ? Неужели нужно считывать каждый символ? Вот мой код, который корректно выводит только первую букву из строки: Код (C++): #include <SoftwareSerial.h> #include <SPI.h> #include <SD.h> File myFile; void setup() { // Open serial communications and wait for port to open: Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for native USB port only } if (!SD.begin(4)) { Serial.println("initialization failed!"); while (1); } // re-open the file for reading: myFile = SD.open("test.txt"); Serial.print("t1.txt="); Serial.print("\""); // Since we are sending text we need to send double quotes before and after the actual text. Serial.print((char)myFile.read()); Serial.print("\""); // Since we are sending text we need to send double quotes before and after the actual text. Serial.write(0xff); Serial.write(0xff); Serial.write(0xff); // close the file: myFile.close(); } void loop() { // Put your main code here, to run repeatedly: }
так что вы возмущаетесь? вы пользуете функцию read(). которая и предназначена для считывания ОДНОГО символа. Либо читайте символы в цикле(буквально пара строк к коду), либо посмотрите в библиотеке SD, какие еще есть функции для чтения из файла Но вообще, чтение строк посимвольно - самый простой и надежный (хотя можит и не быстрый) способ. Если читать большими кусками - надо сначала выделять память под них, да следить, чтоб памяти хватило - там куда больше ошибок можно насажать. А уж читать весь файл одним куском - и вовсе плохая идея, файлы ведь и в пару гигабайт бывают.
Хохо! Спасибо за совет! Посмотрю про цикл и SD. Мне нужно считать все лишь несколько слов, думаю, что памяти хватит.
тогда самое простое - цикл вокруг оператора myFile.read() напрасно думаете. вопрос не в количестве памяти, а в правильном ее использовании. Можно подвесить программу, потеряв всего пару байт
Алексей, за такие вопросы надо гнать с форума. Вот это напечатает вам 20 символов из файлв Код (C++): for (byte i =0; i <20; i++) Serial.print((char)myfile.read()); возьмите любой учебник, и прочитайте про циклы for и while, а так же условные операторы Второй раз такую элементарщину я подсказывать не буду. Потому вы и читаете по целой ночи про стринги и не можете простейшей программы написать, что начинать надо с основ.