+100500 вопрос про сд карту....

flat
Offline
Зарегистрирован: 05.02.2015

И так ... нужно сохранять данные переменных в файл на сд.... 

 

так как значения переменных не превышают 255 то писать их удобнее байтно ... читаю с карты так ... работает без проблемм

 

      SD.begin(SD_CS);
      X = 0;
      Y = 60;
      myFile = SD.open("nagroff.bmp", FILE_READ); //рисуем кнопку тены
      knopki();


void knopki() { //функция чтения с карты и вывода на экран
  for (tem1 = 0; tem1 <= 53; tem1++)
  {
    B = myFile.read();
  }
  for (tem1 = 0; tem1 <= 11; tem1++)
  {
    B = myFile.read();
  }
  for (Y1 = 60; Y1 > 0; Y1--)
  {
    for (X1 = 60; X1 > 0; X1--)
    {
      B = myFile.read();
      G = myFile.read();
      tft.drawPixel(60 - X1 + X, Y1 + Y - 1, G * 256 + B);
    }
  }
  myFile.close();
}

можно ли так писать ? в кейвордс CD.h не нашел функции write

чтобы не городить переводы из Str в int

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

flat пишет:

работает без проблемм ... можно ли так писать ? 

Конечно, нет. Писать нужно так, чтобы не работало.

flat пишет:

в кейвордс CD.h не нашел функции write

Это происки запрещённой в России ИГИЛ - ж@па есть, а слова нет.

 

T.Rook
Offline
Зарегистрирован: 05.03.2016

Можно. Так Вы смотрели в  "в кейвордс" или в "CD.h"?

CD.h:

class File : public Stream {
 private:
  char _name[13]; // our name
  SdFile *_file;  // underlying file pointer

public:
  File(SdFile f, const char *name);     // wraps an underlying SdFile
  File(void);      // 'empty' constructor
  virtual size_t write(uint8_t);
  virtual size_t write(const uint8_t *buf, size_t size);
***************************

 

flat
Offline
Зарегистрирован: 05.02.2015

смотрел в кейвордсе... 

такое не сработало ... буду ковырять дальше

читает совсем не те данные.. думаю возможно потому что пишу в заголовок bmp файла... завтра буду ковырять 

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();
}

 

T.Rook
Offline
Зарегистрирован: 05.03.2016

Обратите внимание на mode: при FILE_READ файл открывается с начала, при FILE_WRITE - файл открывается в конце указанного файла. Возможно Вам стоит использовать file.seek()

 

http://www.arduino.cc/en/Reference/SDopen

**********************

open()

Description

Opens a file on the SD card. If the file is opened for writing, it will be created if it doesn't already exist (but the directory containing it must already exist).

Syntax

SD.open(filepath)
SD.open(filepath, mode)

Parameters

filename: the name the file to open, which can include directories (delimited by forward slashes, /) - char *

mode (optional): the mode in which to open the file, defaults to FILE_READ - byte. one of:

  • FILE_READ: open the file for reading, starting at the beginning of the file.
  • FILE_WRITE: open the file for reading and writing, starting at the end of the file

 

****************************************

flat
Offline
Зарегистрирован: 05.02.2015

T.Rook пишет:

 Возможно Вам стоит использовать file.seek()

***

Спасибо ... с ним заработало.