Официальный сайт компании Arduino по адресу arduino.cc
Считывание с SD карты и вывод на экран
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Сб, 10/09/2016 - 10:49
Доброго времени суток.
У меня такая задача: считать слова из текстового файла с SD карты (список в строчку из 12 слов с пробелами, без знаков препинания) и вывести их на экран. Все бы ничего, но согласно библиотеки на экран можно выводить целые числа, с точкой и char*. Т.к. у меня слова, то мне нужно выводить char*. Напрямую считывать в массива такого типа не получается, компиллятор выдает ошибку. Поэтому читаю в массив типа int. но конвертировать в числа в буквы ASCII у меня не получается. Хотя цифры на экран выводятся корректные. Пробовал через функцию atoi не получилось. Подскжите, плиз, что делать.
пример кода:
#include <tinyFAT.h> #include <UTFT.h> #include <UTFT_tinyFAT.h> //подключение библиотек экрана и работы с SD для экрана #include <SPI.h> #include <SD.h> //работа с SD File myFile; int zamok[85]; //массив для считывания данных с SD char* pol[85]; // массив для вывода на экран int w,e, r = 0; //переменные для перебора значений массива extern uint8_t SmallFont[]; extern uint8_t BigFont[]; extern uint8_t SevenSegNumFont[]; //объявление встроенных шрифтов UTFT myGLCD(R61581, 38, 39, 40, 41); //инициализация экрана UTFT_tinyFAT myFiles(&myGLCD); //создание объекта экрана void setup() { Serial.begin(115200); //запустим серийный порт SD.begin(53); //активируем SD карту myGLCD.InitLCD(LANDSCAPE); //ориентация экрана myGLCD.clrScr(); //очистка экрана file.initFAT(); myGLCD.setBackColor(0, 0, 0); //цвет фона myGLCD.setColor(255, 255, 255); //цвет символов myGLCD.setFont(BigFont); //выбранный размер и тип шрифта myFile = SD.open("zamok.txt"); //откроем файл if (myFile) { //если открылся, то byte q = 0; while (myFile.available()) { //читаем, пока есть что читать zamok[q] = myFile.read(); Serial.print(zamok[q]); Serial.print(" "); q++; } myFile.close(); //закроем файл } Serial.println("test"); while (1) { // itoa(zamok[w], pol[w], DEC); //преобразуем числа в символы???? //myGLCD.print(pol[w], 2+32*e , 10+r ); // Serial.print(pol[w]); myGLCD.printNumI(zamok[w], 2+50*e , 10+r ); Serial.print(zamok[w], DEC); Serial.print(" "); w++; e++; if (e == 6) { e = 0; r = r + 20; } if (w == 85) break; } } void loop() { }
Не... это я знаю. Я не могу вывести на экран дисплея
типа так?
типа так?
типа так, но я же говорил, что это вызывает ошибку компиляции:
а вызов
хоть ошибку не вызывает, но выводит цифры и числа вместо символов.
Этоя уже пробовал. Мне кажется тут именно конвертация нужна.
но конвертировать в числа в буквы ASCII у меня не получается. Хотя цифры на экран выводятся корректные. Пробовал через функцию atoi не получилось.
atoi конвертирует символу в числа. Если Вам надо числа в символы, то используйте itoa
но конвертировать в числа в буквы ASCII у меня не получается. Хотя цифры на экран выводятся корректные. Пробовал через функцию atoi не получилось.
atoi конвертирует символу в числа. Если Вам надо числа в символы, то используйте itoa
Пардон, описАлся, itoa и использую (в первом посте в коде видно).
итоговый код такой, но на экран ничего не выводится
Да не нужен этот второй массив pol )) ох уж эта glcd :) я с ней никогда не работал, но у меня ещё много весёлых идей:
Да не нужен этот второй массив pol )) ох уж эта glcd :) я с ней никогда не работал, но у меня ещё много весёлых идей:
Месье любит извращения? Я тоже.
первый вариант разумеется не работает, т.к. не соответсвует тип переменной, второй выводит абракадабру. Уже лучше, но все еще плохо.
агоспадзи..
itoa(zamok[w], pol, DEC); //преобразуем числа в символы????
myGLCD.print(pol, 2 + 75 * e , 10 + r );
ПС. Мое пиво доверяю выпить Вам в день программиста
агоспадзи..
itoa(zamok[w], pol, DEC); //преобразуем числа в символы????
myGLCD.print(pol, 2 + 75 * e , 10 + r );
ПС. Мое пиво доверяю выпить Вам в день программиста
Постараюсь оправдать Ваше доверие) Да только не работает. pol типа char*? Т.е. не массив, а просто переменная? Все равно не работает (сам по себе скетч рабочий, экран работает, надписи выводит). Проблема именно с itoa. После преобразования pol не получается даже в сериал порт вывести.
немного поменял код
изменил задание переменной на такое
начало выводить на экран, но только цифры, а не буквы. Уже лучше.
Господа, ну может еще хоть какие-нибудь идеи?
пробовал таую конструкцию
На экранчик выдает какие-то артефакты, причем довольно рандомно.
Опишите p как массив символов.
pol типа char*? Т.е. не массив, а просто переменная?
pol - массив char.
Если описываю pol как массив char, тоя его не могу вывести на экран, т.к. можно выводить только char*
если написать такую строчку, то вообще ничего не выводится, или выводятся артефакты.
Может сама идея порочна? И я выбрал не тот путь? По сути, мне нужно вывести слово из файла на SD карте на экран. Возможно есть способ без танцев с бубнами, точно ведь кто-то до меня это уже делал.
Если описываю pol как массив char, тоя его не могу вывести на экран, т.к. можно выводить только char*
если написать такую строчку, то вообще ничего не выводится, или выводятся артефакты.
Может сама идея порочна? И я выбрал не тот путь? По сути, мне нужно вывести слово из файла на SD карте на экран. Возможно есть способ без танцев с бубнами, точно ведь кто-то до меня это уже делал.
Массив char - это и есть char * (по большому - гамбургскому счёту)
Что до примера, Вы не написали как описан p. Как char p[N] ? Если так, то Вашу строчку нужно писать вот так
Ниче не порочно. Цитата из рабочего проекта
Если выдает ошибки - пишите их сюда.
Проблема в вашем уровне знаний С. Запись
(
char
*) p[w]
- бред при обявленииchar
p[85]
, а приchar*
p[85]
- просто нет обявления строки а есть неинициализированый массив указателей на символы.ЕвгенийП, Logik, благодарю за помощь! ̶Ф̶и̶л̶о̶с̶о̶ф̶с̶к̶и̶й̶ ̶к̶а̶м̶е̶н̶ь̶ Рабочий код таки получен.
Осталось разобраться как ОНО работает.