И так ... нужно сохранять данные переменных в файл на сд.... так как значения переменных не превышают 255 то писать их удобнее байтно ... читаю с карты так ... работает без проблемм Код (C++): 01 SD.begin(SD_CS); 02 X = 0; 03 Y = 60; 04 myFile = SD.open("nagroff.bmp", FILE_READ); //рисуем кнопку тены 05 knopki(); 06 07 08 void knopki() { //функция чтения с карты и вывода на экран 09 for (tem1 = 0; tem1 <= 53; tem1++) 10 { 11 B = myFile.read(); 12 } 13 for (tem1 = 0; tem1 <= 11; tem1++) 14 { 15 B = myFile.read(); 16 } 17 for (Y1 = 60; Y1 > 0; Y1--) 18 { 19 for (X1 = 60; X1 > 0; X1--) 20 { 21 B = myFile.read(); 22 G = myFile.read(); 23 tft.drawPixel(60 - X1 + X, Y1 + Y - 1, G * 256 + B); 24 } 25 } 26 myFile.close(); 27 } можно ли так писать ? в кейвордс CD.h не нашел функции write чтобы не городить переводы из Str в int
CD.h - это что, библиотека для работы с CDROM, или может все же SD.h? А чем не устраивает logFile.println(logData) или logFile.print(logData) ?
sd конечно .... сори за ошибку... проблемма с print,.. там будет около 30 переменных .. сохранить то просто ... а вот считать ... строкой... потом переводить в цифры... или тут .. читать сразу байт в переменную...
Если сохранять строкой, то значения надо разделять, например точкой с запятой. Можно каждое значение писать с новой строки (println).
а как читать потом их ? я вижу вариант тока в массив ... и переводоить в Int ищя в цикле запятую или точку с запятой ...
Не смотрите в кейвордс, смотрите сюда: https://github.com/adafruit/SD/blob/master/SD.h Код (C++): size_t File::write(uint8_t val) size_t File::write(const uint8_t *buf, size_t size)
Если не предполагается работа с файлом вручную в текстовом редакторе, то строки не нужны, проще и быстрее работать с бинарником.
не предполагается... но такое не сработало ... буду ковырять дальше читает совсем не те данные.. думаю возможно потому что пишу в заголовок bmp файла... завтра буду ковырять Код (C++): void cdsave() {// сохранение настроек на карту SD.begin(SD_CS); // включаем картриер myFile = SD.open("sohran.bmp", FILE_WRITE); //Открываем файл сохранения myFile.write(tens); myFile.write(thour); myFile.write(tmin); myFile.write(sushka); myFile.write(shour); myFile.write(smin); Serial.begin(9600); Serial.println(tens); Serial.println(thour); Serial.println(tmin); Serial.println(sushka); Serial.println(shour); Serial.println(smin); myFile.close(); } void cdread(){// чтение настроек с карты SD.begin(SD_CS); // включаем картриер myFile = SD.open("sohran.bmp", FILE_READ); //Открываем файл сохранения tens = myFile.read(); thour = myFile.read(); tmin = myFile.read(); sushka = myFile.read(); shour = myFile.read(); smin = myFile.read(); Serial.begin(9600); Serial.println(tens); Serial.println(thour); Serial.println(tmin); Serial.println(sushka); Serial.println(shour); Serial.println(smin); myFile.close(); }
Для начала попробуйте просто записать в файл простые данные (например, счетчик), а потом прочитайте и убедитесь в том, что с файлом вы работаете правильно. А потом начинайте разбираться с форматом нужного файла. BMP можно открыть в hex-редакторе - увидите, откуда вы прочитали то, что прочитали, так будет проще разбираться.
Код (C++): void cdsave() {// сохранение настроек на карту SD.begin(SD_CS); // включаем картриер myFile = SD.open("sohran.bmp", FILE_WRITE); //Открываем файл сохранения for (tem = 0; tem <= 200; tem++){ myFile.write(tem); } myFile.close(); } void cdread(){// чтение настроек с карты SD.begin(SD_CS); // включаем картриер myFile = SD.open("sohran.bmp", FILE_READ); //Открываем файл сохранения tens = myFile.read(); thour = myFile.read(); tmin = myFile.read(); sushka = myFile.read(); shour = myFile.read(); smin = myFile.read(); myFile.close(); } Читать читает но не пишет
разообрался.. При чтении файл открывается в начале, при записи в конеце. Надо установит позицию на начало. myFile.seek(0);
а зря смешься ) по File.write() перелопатил кучу форумов... нет инфы... поэтому и отписал чтоб кто будет искать поняли... везде стандарты запись через запятую и тд ...