Данные с SD в массив

mobistrike
mobistrike аватар
Offline
Зарегистрирован: 19.08.2016

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

Не доходит до меня как построчно считывать данные с SD в массив . Буду признателен за пинок в нужном направлении.

На SD лежит тхт файл с данными такого вида 

000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000
025,025,025,025,025,025,025,025,025,025,025,025,025,025,025,025,025,025,025,025,025,025,025,025,025,025,025,025
051,051,051,051,051,051,051,051,051,051,051,051,051,051,051,051,051,051,051,051,051,051,051,051,051,051,051,051
076,076,076,076,076,076,076,076,076,076,076,076,076,076,076,076,076,076,076,076,076,076,076,076,076,076,076,076
102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102
127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127
153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153
178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178
204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204
229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229
204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204
178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178
153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153
000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000
000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000
000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000

Нужно построчно записывать в массив типа 

byte Val[CHANNELS] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

Читать в Serial весь файл получается . Данные читаются верно .

SD reader самодельный . 

Читаю так 


// подключение библиотек SPI и SD:
#include <SPI.h>
#include <SD.h>

#define CHANNELS 28
byte Val[CHANNELS] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
const uint8_t PIN_CS = 4;                         // указываем номер вывода arduino подключенного к выводу CS адаптера
File myFile;                                       // создаём переменную myFile класса File, которая будет служить "указателем" на открытый файл
void setup() {
  Serial.begin(9600);
  while (!Serial) {
    ;
  }

  if (!SD.begin(PIN_CS)) {
    Serial.println("SD-card not found"); return;
  }
  //проверяем наличие файла  на SD-карте
  if (SD.exists("test000.txt")) {
    Serial.println("file exists");
  } else {
    Serial.println("file doesn't exist");
  }

}
void loop() {

  //открываем файл для чтения и записи
  myFile = SD.open("test000.txt");
  if (myFile) {
    Serial.println("file is opened");
    // чтение строк из файла :
    while (myFile.available()) {
      Serial.write(myFile.read());
    }
  }
}

Спасибо !

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

mobistrike, наводящий вопрос: понимаете ли Вы, в чем разница между символом и числом?

mobistrike
mobistrike аватар
Offline
Зарегистрирован: 19.08.2016

andriano пишет:

mobistrike, наводящий вопрос: понимаете ли Вы, в чем разница между символом и числом?

Понимаю , более того почти разобрался как и во  что преобразовать . Наверно поторопился тему создавать .

 

 

mobistrike
mobistrike аватар
Offline
Зарегистрирован: 19.08.2016

Помогите разобраться. Взгляните на строки 55 и 62 .  Что я делаю не так ?

// подключение библиотек SPI и SD:
#include <SPI.h>
#include <SD.h>
#define MAX_CHANNELS 28
byte chVal[MAX_CHANNELS] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int col = 0;
const uint8_t PIN_CS = 4;                         // указываем номер вывода arduino подключенного к выводу CS адаптера
File myFile;                                       // создаём переменную myFile класса File, которая будет служить "указателем" на открытый файл
char a = 0;
long b = 0;
boolean End, minus = 0;

void setup() {
  Serial.begin(9600);


  if (!SD.begin(PIN_CS)) {
    Serial.println("SD-card not found"); return;
  }
  //проверяем наличие файла  на SD-карте
  if (SD.exists("test000.txt")) {
    Serial.println("file exists");
  } else {
    Serial.println("file doesn't exist");
  }

}
void loop() {

  ///открываем файл для чтения и записи
  myFile = SD.open("test000.txt");
  if (myFile) {
    Serial.println("file is opened");
    //чтение строк из файла :

    while (myFile.available()) {
      //Serial.write(myFile.read());
      a = myFile.read();
      if (a == 45) {
        minus = 1;
      }
      if (a >= 48 && a <= 57) {
        b += a - 48;
        b *= 10;
        End = 1;
      }
      else if (End == 1) {
        b /= 10;
        if (minus == 1) {
          b = -b;
        }

        //Serial.print(b, DEC);

        //Serial.print(chVal[col] = b);// вот тут все выводится  верно
        //Serial.print(":");
        chVal[col] = b;
        col++;
        if (col == MAX_CHANNELS) {

          for (int j = 0; j < MAX_CHANNELS ; j++) {
            Serial.print(chVal[j]); // а тут правильный только первый проход в loop
            Serial.print(";");      // и нет последней строки
          }
          Serial.println("stroka");
          col = 0;
        }
        b = 0;
        minus = 0;
        End = 0;
      }

    }
    Serial.println("file closed");
    myFile.close();
    delay (5000);
  }
}