• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Problem z odczytem danych z karty SD do tablicy typu char
#1
Witam, mam problem z odczytem danych z karty SD do tablicy typu char
dopisałem do programu odczyt z drugiego pliku do tablicy zmiennej char, aczkolwiek odczytuje tylko pierwszy znak. co robię nie tak, aby odczytywało całość linijkę do komórki tablicy?


{PS. tablica char dlatego, bo pierwsza tablica String ma 47 komórek a druga też by miała 49 komórek, co skutkuje zajęciem pamięci ram w 65% i źle odczytuje dane [Arduino Leonardo pro mini 2kb ram] na ATmega 644p 4kb ram działa prawidłowo przy dwóch tablicach String}

Plik key.txt:

Kod:
KEY_M
KEY_SSTOP
KEY_TAB
KEY_1
KEY_2
KEY_3
KEY_4
KEY_5
KEY_6
KEY_7
KEY_8
KEY_9
KEY_0
KEY_DEL
MOD_CONTROL_LEFT
KEY_W
KEY_L
KEY_H
KEY_O
KEY_BACKSPACE
KEY_J
KEY_LEFT
KEY_RIGHT
KEY_UP
KEY_DOWN
KEY_I
KEY_SSTOP
KEY_PAGEUP
KEY_PAGEDOWN
KEY_PLAY
KEY_PAUSE
MOD_CONTROL_LEFT
KEY_T
KEY_R
KEY_F
KEY_S
KEY_REVERSE
KEY_FORWARD
KEY_N
KEY_E
KEY_ESC
KEY_BACKSLASH
KEY_A
KEY_T
KEY_Z
KEY_ENTER
KEY_HOME
KEY_C
KEY_U


Plik ir.txt:
Kod:
550720173
550707933
550750263
550760463
550744653
550732413
550748223
550716093
550740573
550756383
550724253
550742613
550758423
550726293
550754343
550738533
550722213
550763013
550729863
550714053
550746183
550756893
550740063
550748733
550731903
550723743
550719663
550752813
550712013
550728333
550718133
550701813
550709973
550734453
550727823
550744143
550750773
550717623
550733943
550760973
550758933
550742103
550725783
550721703
550705893
550738023
550715583
550735983
550703853
550754853



Kod programu:


Kod:
#include <SPI.h>
#include <SD.h>
boolean stringComplete = false;
const int rozmiar_key = 47;
const int rozmiar_ir = 49;
String key[rozmiar_key];
char ir[rozmiar_ir];
char bufor = "";
int i = 0;
int a = 0;
File myFile;
File irFile;

void setup() {
 Serial.begin(9600);
 while (!Serial) {}
 Serial.print("Inicjowanie karty SD...");
 Serial.print("\n");
 if (!SD.begin(8)) {
   Serial.println("Inicjalizacja nieudana!");
   return;
 }
 Serial.println("inicjalizacja zakonczona pomyslnie");
 Serial.println("Otwieram plik: 'key.txt'");
 myFile = SD.open("key.txt", FILE_READ);

 if (myFile) {
   while (myFile.available())
   {
     key[i] = myFile.readStringUntil('\n');
     //Serial.println(key[i]);
     i++;
   }
   myFile.close();
   Serial.println("Zamykam plik: 'key.txt'");
 } else {
   Serial.println("Blad otwarcia pliku key.txt");
 }
 // wyjscie na serial
 for (int d = 0; d < 48; d++) {
   Serial.print(d);
   Serial.print(" = ");
   Serial.println(key[d]);
 }
 Serial.println("Otwieram plik: 'ir.txt'");
 irFile = SD.open("ir.txt", FILE_READ);
i=0;
 if (irFile) {
while (irFile.available())
   {
    bufor = irFile.read();
   Serial.print(bufor);
    ir[i] += bufor;
    if (bufor == '\n') stringComplete = true;
   

  if (stringComplete) {
     Serial.print(ir[i]);
     //Serial.print(bufor);
     bufor = "";
     i++;
     stringComplete = false;
  }
   }      
   irFile.close();
   Serial.println("zamykam plik: 'ir.txt'");
 } else {
   Serial.println("Blad otwarcia pliku ir.txt");
 }
// wyjscie na serial
 for (int x = 0; x < i; x++) {
  Serial.print(x);
  Serial.print(" = ");
  Serial.println(ir[x]);
 }

}

void loop() {

}


Sieral terminal:


Kod:
Inicjowanie karty SD...
inicjalizacja zakonczona pomyslnie
Otwieram plik: 'key.txt'
Zamykam plik: 'key.txt'
0 = KEY_M

1 = KEY_SSTOP

2 = KEY_TAB

3 = KEY_1

4 = KEY_2

5 = KEY_3

6 = KEY_4

7 = KEY_5

8 = KEY_6

9 = KEY_7

10 = KEY_8

11 = KEY_9

12 = KEY_0

13 = KEY_DEL

14 = MOD_CONTROL_LEFT

15 = KEY_W

16 = KEY_L

17 = KEY_H

18 = KEY_O

19 = KEY_BACKSPACE

20 = KEY_J

21 = KEY_LEFT

22 = KEY_RIGHT

23 = KEY_UP

24 = KEY_DOWN

25 = KEY_I

26 = KEY_SSTOP

27 = KEY_PAGEUP

28 = KEY_PAGEDOWN

29 = KEY_PLAY

30 = KEY_PAUSE

31 = MOD_CONTROL_LEFT

32 = KEY_T

33 = KEY_R

34 = KEY_F

35 = KEY_S

36 = KEY_REVERSE

37 = KEY_FORWARD

38 = KEY_N

39 = KEY_E

40 = KEY_ESC

41 = KEY_BACKSLASH

42 = KEY_A

43 = KEY_T

44 = KEY_Z

45 = KEY_ENTER

46 = KEY_HOME

47 = KEY_C

Otwieram plik: 'ir.txt'
(Zmienna bufor)
550720173
⸮550707933
⸮550750263
⸮550760463
⸮550744653
⸮550732413
⸮550748223
⸮550716093
⸮550740573
⸮550756383
⸮550724253
⸮550742613
⸮550758423
⸮550726293
⸮550754343
⸮550738533
⸮550722213
⸮550763013
⸮550729863
⸮550714053
⸮550746183
⸮550756893
⸮550740063
⸮550748733
⸮550731903
⸮550723743
⸮550719663
⸮550752813
⸮550712013
⸮550728333
⸮550718133
⸮550701813
⸮550709973
⸮550734453
⸮550727823
⸮550744143
⸮550750773
⸮550717623
⸮550733943
⸮550760973
⸮550758933
⸮550742103
⸮550725783
⸮550721703
⸮550705893
⸮550738023
⸮550715583
⸮550735983
⸮550703853
⸮550754853zamykam plik: 'ir.txt'
Zmienna ir)
0 = ⸮
1 = ⸮
2 = ⸮
3 = ⸮
4 = ⸮
5 = ⸮
6 = ⸮
7 = ⸮
8 = ⸮
9 = ⸮
10 = ⸮
11 = ⸮
12 = ⸮
13 = ⸮
14 = ⸮
15 = ⸮
16 = ⸮
17 = ⸮
18 = ⸮
19 = ⸮
20 = ⸮
21 = ⸮
22 = ⸮
23 = ⸮
24 = ⸮
25 = ⸮
26 = ⸮
27 = ⸮
28 = ⸮
29 = ⸮
30 = ⸮
31 = ⸮
32 = ⸮
33 = ⸮
34 = ⸮
35 = ⸮
36 = ⸮
37 = ⸮
38 = ⸮
39 = ⸮
40 = ⸮
41 = ⸮
42 = ⸮
43 = ⸮
44 = ⸮
45 = ⸮
46 = ⸮
47 = ⸮
48 = ⸮
49 = f
50 =

Pomożecie?

Już wiem w czym problem, tablica char ir[x] nie przyjmuje wartości zmiennej bufor. Tylko czemu tak jest?
 
Odpowiedź
  


Wiadomości w tym wątku
Problem z odczytem danych z karty SD do tablicy typu char - przez bu.tomasz - 06-01-2018, 20:55

Skocz do:


Przeglądający: 1 gości