Значение переменной с SD карты, tinyFat

SidPirate
Offline
Зарегистрирован: 06.08.2013

Здравствуйте.

Никак не могу разобраться как при помощи библиотеки tinyFat считывать число из файла c sd карты и значение этого числа присваивать переменной. Может есть пример кода или куска кода где в файле на sd карте находится 2 разных числа и эти числа присваиваются значению 2-х разных переменных?

maksim
Offline
Зарегистрирован: 12.02.2012

Примерно так:

/*в файле BASE.txt делаете записи:
c3658,a123,b789.
или так:
b789 a123 c3658_ - в конце тоже пробел
или так:
a123
c3658
b789
_     - к конце новая пустая строка
порядок записи переменных не важен
*/

#include <SD.h>
#define CS 4  // CS SD-карты
#define FILE "BASE.txt"

void setup()
{
  Serial.begin(9600);
  pinMode(CS, OUTPUT);
  if (!SD.begin(CS)) {
    Serial.println("Card failed, or not present");
    return;
  }
  Serial.println("card initialized.");
}


void loop()
{
  int a = 0;
  int b = 0;
  int c = 0;

  File dataFile = SD.open(FILE, FILE_READ);
  if(dataFile)
  {
    unsigned long buff = 0;
    while (dataFile.available()) 
    {
      char ch = dataFile.read();
      if(ch == 'a') 
      {
        a = dataFile.parseInt();
        Serial.print("a = ");
        Serial.println(a);
      }
      else if(ch == 'b') 
      {
        b = dataFile.parseInt();
        Serial.print("b = ");
        Serial.println(b);
      }
      else if(ch == 'c') 
      {
        c = dataFile.parseInt();
        Serial.print("c = ");
        Serial.println(c);
      }
    }
    dataFile.close();
  } 
  else Serial.println("error opening file");
  
  while(1);
}

 

SidPirate
Offline
Зарегистрирован: 06.08.2013

Спасибо, но это пример библиотеки SD, а очень бы хотелось бы пример библиотеки tinyFat

Попробую задать вопрос немного поконкретнее... делаю я пивоварню, так вот в пивовареном процессе есть температурные паузы (для получения сусла - солод с водой выдерживаются определённое время при определённой температуре, время и температура зависят от рецепта пива). Пока у меня получилось выставлять и запоминать температуру и время всех пауз вручную, но что бы не делать рутинную работу каждый раз, хотелось бы иметь возможность загрузки рецептов с sd карты. Тут и появилась проблема... сегодня убил ещё один вечер и проблема всё ещё не решена:

Вот кусок кода с которым не могу разобраться:

int num = 0;
word result;
char textBuffer[11];
 
void strPrint ()
{
  myGLCD.setFont(BigFont);
  myGLCD.setColor(255, 255, 255);
  myGLCD.printNumI(num, 10, 10 + (q*32));
}
 
void loop()
{
  бла бла бла...
        res=file.openFile("recipe.txt", FILEMODE_TEXT_READ);
        if (res==NO_ERROR)
        {
          result=0;
            while ((result!=EOF) and (result!=FILE_IS_EMPTY))
            {
              result=file.readLn(textBuffer, 10);
              num=result;
              strPrint();
              q++;
            }
      }
      file.closeFile();
}

При таком варианте на экран выводится количество символов в каждой строке, а не их значение. А мне нужно каким-то образом сделать 

num=textBuffer;

но тогда получаю ошибку - error: invalid conversion from 'char*' to 'int'

что делать???

maksim
Offline
Зарегистрирован: 12.02.2012
num = atoi(textBuffer);

 

SidPirate
Offline
Зарегистрирован: 06.08.2013

спасибо, всё заработало.

SidPirate
Offline
Зарегистрирован: 06.08.2013

а зачем в твоём коде нужна 38-я строка???

maksim
Offline
Зарегистрирован: 12.02.2012

Низачем, можно удалить.

bsdshneg
Offline
Зарегистрирован: 21.10.2014

Всем привет!

Что бы не плодить темы, напишу тут ... 

Я конечно задам может быть ОООЧЕНЬ глупый вопрос .. НО ... как проверить наличие/прочитать файл лежащий не в корне, а в папке?

if(file.exists("/folder/file.txt")) {
res = file.openFile("/folder/file.txt", FILEMODE_BINARY);
...
} else {
Serial.println(F(" ...not found :("));
}

вот я и получаю ...not found :(

Умеет-ли вообще эта библиотека читать файлы не из корня?