• 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
Pętla w pętli EEPROM
#11
Pokaż kod programu, z którym pracujesz. Jest oczywiste, że to tak będzie działać, ale robisz jakiś błąd.
To co pokazałeś w poście #7 to jakieś bzdury i to nie ma prawa zadziałać, gdzie byś tego nie umieścił.
Przykładowy kod w symulatorze:
https://wokwi.com/projects/359485317908749313
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#12
Ok bo już tracę cierpliwość do eepromu  Huh

Bardzo doceniam to, że chcecie mi pomóc ale ja najwyraźniej dalej czegoś nie kapuję.

Tak zapisuję pierwszy kod:

Kod:
void save_rfid(){
  for (int i=0; i<8; i++){
    
     char r = StrUID.charAt(i);
     EEPROM.write (i, r);
  }
  EEPROM.commit();
  delay(500);
}

Rozumiem że drugi muszę zapisać na pozycji od 9 do 17 ?? 
StrUID to już przetworzony String.


Tak odczytuję eeprom:


Kod:
void read_rfid()
{

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

A tutaj się to pojawia:


Kod:
if (header.indexOf("zmien_1") >= 0) {

client.println("<meta charset='utf-8'><div class='target'><form action=\"/get\"><input type='text' style='width: 100%; padding: 12px 20px; margin: 8px 0; display: inline-block; border: 1px solid #ccc; border-radius: 4px; box-sizing: border-box;' maxlength='4' name='save_pin_1' value='"+StrUID+"' autofocus />");
client.println("<input style='font-size:19px; width: 100%; height:50px; background-color: #4CAF50; color: white; padding: 14px 20px; margin: 8px 0; border: none; border-radius: 4px; cursor: pointer;' type='submit' value='Zapisz brelok / kartę'/></form>");

client.println("<form action=\"/get\"><input type='hidden' style='width: 100%; padding: 12px 20px; margin: 8px 0; display: inline-block; border: 1px solid #ccc; border-radius: 4px; box-sizing: border-box;' maxlength='4' name='usun_1' value='"+StrUID+"' />");
client.println("<input style='font-size:19px; width: 100%; height:50px; background-color: red; color: white; padding: 14px 20px; margin: 8px 0; border: none; border-radius: 4px; cursor: pointer;' type='submit' value='Usuń brelok / kartę'/></form></div>");

client.println("<div class='target'><p>Nr breloka / karty<br><b>");
read_rfid();
client.println(odczyt);
client.println();
client.println("</b></div>");
}

Problem przy odczycie jest taki, że przy wartości j<32 restartuje się esp. Jak zmienię na 1 odczytuje pierwszy rekord czyli od 0 do 8. Jak zmienię na j<2 to odczytuje krzaki i końcówkę kodu rfid. Powyżej tych wartości -> restart.
Ręce mi opadają. Czy ktoś może mi o wytłumaczyć co robię źle?

W emulatorze wygląda tak: https://wokwi.com/projects/359564767744621569
 
Odpowiedź
#13
Przede wszystkim nie rób testów na EEPROM w loop, ręka Ci się omsknie i procek do kosza. Wiem, że przesadzam, ale Eeprom można zapisywać ograniczoną ilość razy. Oczywiście symulatora to nie dotyczy.
Zapisujesz 8 bajtów, a odczytujesz 256, to bez sensu.
i oraz j były do tego by ustalić adres EEPROM od 0 do 255, gdy odczytujesz cały EEPROM, a ty sobie tak samo wstawiasz j do indexu swojego stringa, który ma wartość tylko od 0 do 8. Masz odczytać 8 bajtów, wstawić do 8 bajtów w swoim stringu, wydrukować, potem powtórzyć.
A ty jedziesz sobie po komórkach pamięci 248 bajtów za swoją tablicę, za każdym z 32 dwóch razy.
Mieszasz poza tym stringi i c stringi, przecież ten 12345678 też może być  c stringiem, czyli tablicą char.
Kod:
#include <EEPROM.h>
char StrUID[9]="12345678";
char odczyt[9]="";

void setup() {
  // put your setup code here, to run once:
Serial.begin(115200);
delay(100);
}

void loop() {
save_rfid();
read_rfid();
delay(10000);
}


void save_rfid(){
  for (int i=0; i<8; i++){
     
     //char r = StrUID.charAt(i);
     EEPROM.write (i, StrUID[i]);
  }
  //EEPROM.commit();
  delay(500);
}


void read_rfid()
{


  for (int j=0;j<32;j++)
   {
     for (int i=0; i<8; i++)
     {
     odczyt[i] = EEPROM.read((j*8)+ i);       
     }
     Serial.println(odczyt);   

   }
   Serial.println("koniec");   
}

Wynik:
Kod:
12345678
ÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿ
koniec
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#14
Dzięki wam wszystkim za pomoc. Trochę mi się rozjaśniło Smile Wychodzi na to, że to co dostaję w StrUID jest wszystkiemu winne. Muszę zmodyfikować program i będzie ok. Tylko czasu brak...
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości