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

Тема в разделе "Arduino & Shields", создана пользователем Семен C., 2 апр 2016.

  1. Семен C.

    Семен C. Нерд

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



    так как значения переменных не превышают 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
     
  2. AlexVS

    AlexVS Гик

    CD.h - это что, библиотека для работы с CDROM, или может все же SD.h?
    А чем не устраивает logFile.println(logData) или logFile.print(logData) ?
     
  3. Семен C.

    Семен C. Нерд

    sd конечно .... сори за ошибку... проблемма с print,.. там будет около 30 переменных .. сохранить то просто ... а вот считать ... строкой... потом переводить в цифры... или тут .. читать сразу байт в переменную...
     
  4. AlexVS

    AlexVS Гик

    Если сохранять строкой, то значения надо разделять, например точкой с запятой.
    Можно каждое значение писать с новой строки (println).
     
  5. Семен C.

    Семен C. Нерд

    а как читать потом их ? я вижу вариант тока в массив ... и переводоить в Int ищя в цикле запятую или точку с запятой ...
     
  6. AlexVS

    AlexVS Гик

    Именно так.
     
  7. Megakoteyka

    Megakoteyka Оракул Модератор

    Не смотрите в кейвордс, смотрите сюда:
    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)
     
    Семен C. нравится это.
  8. Megakoteyka

    Megakoteyka Оракул Модератор

    Если не предполагается работа с файлом вручную в текстовом редакторе, то строки не нужны, проще и быстрее работать с бинарником.
     
  9. Семен C.

    Семен C. Нерд

    не предполагается...
    но такое не сработало ... буду ковырять дальше
    читает совсем не те данные.. думаю возможно потому что пишу в заголовок 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();
    }
     
  10. Megakoteyka

    Megakoteyka Оракул Модератор

    Для начала попробуйте просто записать в файл простые данные (например, счетчик), а потом прочитайте и убедитесь в том, что с файлом вы работаете правильно. А потом начинайте разбираться с форматом нужного файла.
    BMP можно открыть в hex-редакторе - увидите, откуда вы прочитали то, что прочитали, так будет проще разбираться.
     
  11. Семен C.

    Семен C. Нерд

    Код (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();
    }
    Читать читает но не пишет
     
  12. Семен C.

    Семен C. Нерд

    разообрался.. При чтении файл открывается в начале, при записи в конеце. Надо установит позицию на начало.
    myFile.seek(0);
     
  13. ostrov

    ostrov Гуру

    Осталось задать еще 100499 вопросов.
     
    Kopilov нравится это.
  14. Семен C.

    Семен C. Нерд

    а зря смешься ) по File.write() перелопатил кучу форумов... нет инфы... поэтому и отписал чтоб кто будет искать поняли... везде стандарты запись через запятую и тд ...
     
    Kopilov нравится это.