Ho la necessità di utilizzare una 24LC256 e cercando in internet ho trovato questo sketch:
#include <EEPROM.h>
#include <Wire.h>
int indirizzo = 0;
int data = 0;
int ciclo = 0;
void setup()
{
//init seriale
Serial.begin(9600);
//per la Arduino Leonardo devo
//attendere l'inizializzazione del modulo
while (!Serial)
{
;
}
//attendo ulteriori 5 secondi
//prima di inviare un dato sulla seriale
delay(5000);
//invio un messaggio al serial monitor
Serial.println("Start");
//inizializzo la porta I2C della Arduino
Wire.begin();
}
void loop()
{
//avviso dell'inizio della
//scrittura dei dati sulla seriale
Serial.println("Inizio Scrittura");
//init variabile
indirizzo = 0;
//eseguo ciclicamente la scrittura di
//tutte e 32000 locazioni di memoria
for (ciclo = 0; ciclo & lt; 32000; ciclo++)
{
//invio il control byte specificando
//una richiesta di scrittura
Wire.beginTransmission(0x50);
//invio due byte contenenti l'indirizzo della
//locazione di memoria che voglio scrivere un byte
Wire.write(highByte(indirizzo));
Wire.write(lowByte(indirizzo));
//scrivo un byte nella locazione di memoria
//precedentemente selezionata
Wire.write(byte(data));
//fine trasmissione
Wire.endTransmission();
//incrementa il valore di data
data++;
//quando la variabile data arriva a 255
//resetto il suo valore a zero
if (data == 255)
data = 0;
//incrementa il valore dell'indirizzo
indirizzo++;
//attendi 5ms per poter terminare le operazioni di
//scrittura sulla memoria
delay(5);
}
//avvisami quando la scrittura di 32000 byte
//è terminata
Serial.println("Fine Scrittura");
//attendi 1/2 secondo
delay(500);
//avvisami dell'inizio della lettura
Serial.println("Inizio lettura");
//init variabile
indirizzo = 0;
for (ciclo = 0; ciclo & lt; 32000; ciclo++)
{
//invio il control byte specificando
//una richiesta di scrittura
Wire.beginTransmission(0x50);
//invio due byte per selezionare la locazione
//di memoria da leggere
Wire.write(highByte(indirizzo));
Wire.write(lowByte(indirizzo));
Wire.endTransmission();
//incremento la variabile indirizzo
indirizzo++;
//richiedo un byte al 24LC256
Wire.requestFrom(0x50, 1);
//attendo la disponibilità di dati sul bus i2c
while (Wire.available())
{
Serial.print(ciclo);
Serial.print(": ");
//leggo dal bus il dato relativo alla
//locazione di memoria precedentemente specificata
byte c = Wire.read();
//invio il dato al serial monitor
Serial.println(c);
}
}
delay(1000);
}
Ma quando lo vado a verificare mi da errore nel ciclo di lettura della EEPROM, non nel ciclo di scrittura.
l'errore che mi da è il seguente:
Arduino:1.8.9 (Mac OS X), Scheda:"Arduino/Genuino Uno"
/Users/ezio/Desktop/EEPROM_r_w/EEPROM_r_w.ino: In function 'void loop()':
EEPROM_r_w:36:27: error: 'lt' was not declared in this scope
for (ciclo = 0; ciclo & lt; 32000; ciclo++)
^
EEPROM_r_w:36:36: error: expected ')' before ';' token
for (ciclo = 0; ciclo & lt; 32000; ciclo++)
^
EEPROM_r_w:36:45: error: expected ';' before ')' token
for (ciclo = 0; ciclo & lt; 32000; ciclo++)
^
EEPROM_r_w:74:27: error: 'lt' was not declared in this scope
for (ciclo = 0; ciclo & lt; 32000; ciclo++)
^
EEPROM_r_w:74:36: error: expected ')' before ';' token
for (ciclo = 0; ciclo & lt; 32000; ciclo++)
^
EEPROM_r_w:74:45: error: expected ';' before ')' token
for (ciclo = 0; ciclo & lt; 32000; ciclo++)
^
EEPROM_r_w:102:1: error: expected '}' at end of input
}
^
exit status 1
'lt' was not declared in this scope
Questo report potrebbe essere più ricco di informazioni abilitando l'opzione
"Mostra un output dettagliato durante la compilazione"
in "File -> Impostazioni"
La variabile ciclo è inizializzata, mi sembra correttamente, come "int ciclo = 0;".
L'altro problema che non capisco è cosa possa servire "ciclo & lt" con l'operatore bitwise.
Potrebbe essere la variabile "lt" non inizializzata?
Saluti
LelloGi