Arduino Polska Forum

Pełna wersja: Pętla w pętli EEPROM
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Stron: 1 2
Witam wszystkich!

Niechętnie korzystam z forum bo jestem zdania, że wszystkiego o nauczę się sam to zostanie mi na zawsze.. ale mnie przycisło  Big Grin

Ponieważ mam ciągły problem z pętlami muszę poprosić was o pomoc.
Mam taki kod:

Kod:
void read_rfid(){
int i=0;

for (i=0; i<8; i++){
     odczyt[i] = EEPROM.read(i); 
                   }     

}

I teraz chciałbym odczytać następne 8 miejsc w pamięci i następne 8 i następne aż i osiągnie 255.
Jak to zrobić? Wiem, że muszę mieć pętlę nadrzędną ale po 1000 kombinacji powoli się poddaję..  Sad
Robisz dokładnie to co napisałeś w temacie, wstawiasz pętlę jedną w drugą, tą którą pokazałeś chcesz wykonać 32 razy:
Kod:
void read_rfid()
{

   for (int j=0;j<32;j++)
   {
    
     for (int i=0; i<8; i++)
     {
    //tylko tu uwzglednij przesuniecie o  j x 8
     odczyt[(j*8)+ i] = EEPROM.read((j*8)+ i);
     }   

   }
}
Dzięki bardzo! Zadziałało  Big Grin

Nie mogłem załapać jak mam wstawić to przesunięcie. Masz u mnie piwo

Mam jeszcze jeden problem. Odczytuję kody rfid (string) z pamięci eeprom jeden po drugim ale w jednym ciągu bez spacji i znaku końca linii. Gdzie wstawić /n żeby każdy kod pojawił się w osobnym wierszu na stronie?

Obstawiam, że gdzieś w okolicach:



Kod:
odczyt[(j*8)+ i]


Ale coś mi nie idzie..  Huh
Jeżeli potraktować pojedynczy bit jako literę, a 8 bitów jako słowo, to pętla:
Kod:
for (int i=0; i<8; i++)
składa z liter poszczególne słowa, a pętla:
Kod:
for (int j=0;j<32;j++)
składa z 32 słów tablicę.

Można z tego wywnioskować, że znak końca linii lub jakikolwiek inny wybrany, dzielący poszczególne odczyty, należy w programie umieścić wewnątrz drugiej pętli, po wykonaniu się pierwszej.
No właśnie próbuję i coś nie trybi..
\n nie działa, client.print("<br>"); nie działa..
Nie wiem co zastosować żeby podzielić te ciągi i ułożyć w wiersze.
No jak drukujesz z tej pętli na serial to na końcu pętli z for j wstawiasz println, a jak sobie to zapisujesz do tablicy char to na indeksie 8 tablicy 9-elementowej.
Czyli tak?


Kod:
odczyt[(j*8)'\n'+ i]

odczyt[(j*8)+ i'\n']
Próbowałem na różne sposoby ale nie działa.
Masz blok, który wykonuje się osiem razy, program leci linia po linii, czyli po tym bloku wstawiasz, wewątrz iteracji od j, a poza iteracją i:
Kod:
void read_rfid()
{

   for (int j=0;j<32;j++)
   {
   
     for (int i=0; i<8; i++)
     {
    //tylko tu uwzglednij przesuniecie o  j x 8
     odczyt[(j*8)+ i] = EEPROM.read((j*8)+ i);
     }   
    //!!!TUTAJ!!!
   }
}
Problem w tym że obojętnie w którym miejscu wstawię jakikolwiek znak końca linii, niestety nie dzieli ciągu na wiersze.
Jakim poleceniem wysyłasz dane i co je odbiera?
Stron: 1 2