Wczytywanie tablic z pliku z karty SD

Masz problem z Arduino? Tutaj możesz szukać pomocy.
ODPOWIEDZ
puchacz4321
Młodszy majsterkowicz
Posty: 1
Rejestracja: 9 lut 2014, 15:55

Wczytywanie tablic z pliku z karty SD

Post autor: puchacz4321 » 9 lut 2014, 17:05

Witam
Jest to mój pierwszy post więc jakbym coś źle zrobił to sorki :p
posiadam arduino uno i ethernet shield. chciałem napisać program wysyłający raw-y na podczerwień jednak
widzę że nie można zamieścić w programie większej ilości tablic
przykładowa to(unsigned int prog_min[71] = {9045,4379,694,432,659,469,644,466,660,471,654,471,657,470,656,1573,656,470,654,1576,652,1575,657,
1573,655,1572,658,1572,654,1577,650,534,595,1580,650,1571,660,1569,659,1573,656,1573,655,1575,671,
450,658,471,657,471,656,471,666,472,626,458,671,466,657,459,654,1588,654,1562,656,1593,648,39664,
9049,2147,659};) są one dosyć duże, dlatego wydaje mi się że to własnie ogranicza ilość jaką mogę
użyć w programie.
Czy jest możliwość wczytania tablic do programu z karty SD? albo jakakolwiek inne pomysły
obejścia dużej pamięci potrzebnej do zapisania takich tablic.
z góry dzięki za pomysły/ odpowiedz
pozdrawiam :)

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


Malen
Młodszy majsterkowicz
Posty: 27
Rejestracja: 2 sty 2014, 22:47

Re: Wczytywanie tablic z pliku z karty SD

Post autor: Malen » 13 lut 2014, 23:13

Jest możliwość taka, ale skoro masz problem ze zbyt dużymi tablicami to należałoby zmniejszyć te tablice i podzielić dane odczytane z pliku na karcie SD na kilka fragmentów. Gdy skończysz pracę z danym partem danych to wczytaj kolejny.

Kod: Zaznacz cały

#include <SD.h>

int counter=0;
Kod: Zaznacz cały
File myFile;

void setup()
{
 // Open serial communications and wait for port to open:
  Serial.begin(9600);
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }


  Serial.print("Initializing SD card...");
  // On the Ethernet Shield, CS is pin 4. It's set as an output by default.
  // Note that even if it's not used as the CS pin, the hardware SS pin 
  // (10 on most Arduino boards, 53 on the Mega) must be left as an output 
  // or the SD library functions will not work. 
   pinMode(10, OUTPUT);
   
  if (!SD.begin(4)) {
    Serial.println("initialization failed!");
    return;
  }
  Serial.println("initialization done.");
  
  // open the file. note that only one file can be open at a time,
  // so you have to close this one before opening another.
  myFile = SD.open("test.txt", FILE_WRITE);
  
  myFile = SD.open("test.txt");
  if (myFile) {
    Serial.println("test.txt:");
    
    // read from the file until there's nothing else in it:
    while (myFile.available()) {
        if(counter == 10)
              break;
       counter++;
       Serial.write(myFile.read());
    }
    // close the file:
    myFile.close();
  } else {
    // if the file didn't open, print an error:
              Serial.println("error opening test.txt");
  }
}

void loop()
{
    // nothing happens after setup
}


Ten kod powinien wczytać ci z pliku pierwsze 10 znaków i wyświetlić w SerialMonitor. Nie miałem możliwości go przetestować.

Aby załadować do talbicy te 10 elementów możesz zrobić coś takiego.

Tworzysz globalnie tablice 10 elementowa;

szukasz w ciągu znaków przecinka ( do czasu gdy nie bedzie przecinka budujesz element tablicy )


Kod: Zaznacz cały

Kod: Zaznacz cały

if(myFile.read() != ',')

i tutaj tworzysz poszczególne elementy tablicy. Aby to zrobić bedziesz musiał skorzystać z rzutowania na int. Do indexowania tablicy użyj zmiennej counter.

Pozdrawiam.
Ostatnio zmieniony 13 lut 2014, 23:18 przez Malen, łącznie zmieniany 1 raz.
ODPOWIEDZ

Strony partnerskie: