Memorizzare un valore nella EEPROM di Arduino

Arduino possiede una memoria di tipo EEPROM (Electrically Erasable Programmable Read-Only Memory), questa memoria è cancellabile elettricamente e quindi è possibile utilizzarla tramite lo stesso Arduino per salvare dei dati che ci interessano.

Il bello di questa memoria è che, anche togliendo tensione al circuito, il dato resta memorizzato.
Successivamente, dando nuovamente alimentazione, posso leggere i valori precedentemente salvati.
Grazie a questa memoria, ad esempio, è possibile memorizzare dati di temperatura catturati con un sensore in momenti differenti e poi rileggerli tutti insieme quando lo desidero.

In Arduino Uno la EEPROM è di 1KB, che sono 1024 Byte, possiamo quindi memorizzare 1024 numeri con valori compresi tra 0 e 255.

Ho realizzato un piccolo progetto per fare le prime prove sulla EEPROM, funziona così (scusate x la musica XD):


Entriamo più nel dettaglio della realizzazione:



Sul display viene letto il valore memorizzato nello spazio "1" della EEPROM.
Grazie a 2 pulsanti, incremento e decremento questo valore.
Raggiunto il valore desiderato premo il terzo pulsante, così facendo memorizzo il dato nella memoria e lo sostituisco al dato precedentemente memorizzato.
Per aiutarmi a capire l'avvenuta pressione del pulsante, comparirà un "S" sul display.
Ora, spegnendo e riaccendendo l'Arduino, verrà visualizzato l'ultimo dato salvato.

Questo è il circuito da realizzare:





Ecco lo sketch da caricare:

  1. #include <LiquidCrystal.h>
  2. #include <EEPROM.h>
  3. LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // connessione display (pin)
  4. const int salva = 8;
  5. const int su = 10;
  6. const int giu = 9;
  7. byte datoeeprom;
  8. int statosu = 0;
  9. int statogiu = 0;
  10. int statosalva = 0;
  11. void setup() {
  12. pinMode(salva, INPUT);
  13. pinMode(su, INPUT);
  14. pinMode(giu, INPUT);
  15. digitalWrite(8, HIGH);
  16. digitalWrite(9, HIGH);
  17. digitalWrite(10, HIGH);
  18. lcd.begin(16, 2);
  19. datoeeprom = EEPROM.read(1); //leggi il dato salvato nella eeprom nello slot 1
  20. }
  21. void loop() {
  22. lcd.print ("val");
  23. statosu = digitalRead (su);
  24. if( statosu == LOW)
  25. {datoeeprom++;} //incrementa il valore alla pressione del pulsante "su"
  26. statogiu = digitalRead (giu);
  27. if( statogiu == LOW)
  28. {datoeeprom--;} //decrementa il valore alla pressione del pulsante "giu"
  29. statosalva = digitalRead (salva);
  30. if( statosalva == LOW)
  31. {EEPROM.write(1, datoeeprom); //salva il dato nello slot 1 della eeprom
  32. lcd.setCursor(0, 1);
  33. lcd.print("S");}
  34. lcd.setCursor(13, 0);
  35. lcd.print(datoeeprom);
  36. delay(200);
  37. lcd.clear();
  38. }

Ciao a tutti!


Segui Daniele Alberti su Google+

1 commento:

  1. Mi sto appassionando perchè comincio a capire qualche cosa, grazie a te Daniele!!!!!!!!!!

    RispondiElimina

Lascia un commento qui sotto, ti risponderò il prima possibile!

Related Posts Plugin for WordPress, Blogger...