Ciao, mi sto cimentando con la scrittura di dati sulla eeprom, per adesso sto facendo delle bozze di codice... poi quando arrivo a casa scarico lo sketch sulla scheda e vedo se funziona.
comunque la domanda è, io ho arduino nano v.3 quindi 32 K di memoria.
per scrivere sulla eeprom ho preso il codice di esempio dal playground
// write a 0 to all 512 bytes of the EEPROM cancello la eeprom se il pulsante rec è premuto
for (int i = 0; i < 512; i++)
EEPROM.write(i, 0);
512 è un limite generico oppure io con il mio chip posso aumentare questo valore?
Ciao, anche io sono all'inizio su Arduino ma mi pare di aver capito che sia un limite fisso per tutti gli arduino, ovvero ha solo quello spazio riservato in EEPROM.
Se serve altro spazio mi sa che l'unica sia aggiungere altre EEPROM esterne, ma forse conviene una bella SD così non hai più grossi limiti.
grazie per la dritta, allora adesso ho caricato il mio sketch e sembra funzionare.
quello che fa è questo:
premo un pulsante (si svuota la eeprom) e dopo un secondo si accende un led, quando questo led è acceso parte la 'registrazione', cambio il valore ad un potenziometro e un secondo led cambia di intensità secondo come manovro il potenziometro.
questi valori vengono memorizzati nella eeprom.
lascio il pulsante e la eeprom viene letta accendendomi il led numero due allo stesso modo della fase di registrazione.
quello che vorrei sapere è: che potenziometro è corretto usare? Io adesso sto provando un 100KB. (se questo va bene perchè?)
seconda cosa, io vorrei variare la velocità di lettura dalla eeprom (rate), come posso fare? (ovviamente devo aggiungere un secondo potenziometro (che tipo e valore?)
ps. ho cambiato in 1024 il valore per la registrazione.
ok ho capito come variare il rate di lettura alla eeprom, semplicemente inserendo un ritardo (delay) che varia in funzione del secondo potenziometro.
mi rimane da capire quale tipo di potenziometro usare per registrare correttamente i miei valori, questo perchè con il 100kb ora la registrazione va a scatti, il led di registrazione non varia la sua luminosità in modo uniforme.
mi sono accorto che alla pressione del tasto non viene cancellata la eeprom... il codice è questo mi potete consigliare?
Grazie
// includo la libreria per la scrittura/lettura della EEPROM
#include <EEPROM.h>
// the current address in the EEPROM (i.e. which byte
// we're going to write to next)
int addr = 0;
int val_rec = 0; // memorizza lo stato del pulsante REC
int val = 0; // memorizza i valori dell'analog input
int rate = 0; //memorizzo il valore del secondo potenziometro per il rate
// start reading from the first byte (address 0) of the EEPROM
int address = 0;
byte value;
//definizioni
#define REC 2 // Pulsante per la registrazione sul pin digitale 7
#define REC_LED 13 // Led che si accende quando è abilitata la registrazione
#define PLAY_LED 9 // Led che si accende quando è abilitata la riproduzione
void setup() {
pinMode(REC, INPUT); // imposto il pulsante come input
pinMode(REC_LED, OUTPUT); // imposto l'uscita per il led di registrazione
pinMode(PLAY_LED, OUTPUT); // imposto l'uscita per il led di riproduzione
if (digitalRead(REC) == HIGH){
// cancello la eeprom se il pulsante rec è premuto
for (int i = 0; i < 1024; i++)
EEPROM.write(i, 0);
}
else
{
for (int i = 0; i < 1024; i++)
EEPROM.write(i, i);
}
}
void loop() {
val_rec = digitalRead(REC); // Leggo il valore del pulsante e lo metto nella variabile
rate = analogRead(1) / 4; //al pin analogico 1 collego il pot per il rate
if (val_rec == HIGH) {
delay(1000); //aspetto un secondo prima di far partire la registrazione
digitalWrite(REC_LED, HIGH); // accendo il led per la registrazione
// need to divide by 4 because analog inputs range from
// 0 to 1023 and each byte of the EEPROM can only hold a
// value from 0 to 255.
int val = analogRead(0)/4; //al pin analogico 0 collego il potenziometro per passare i valori
analogWrite(PLAY_LED, val); //leggo i valori del potenziometro e li applico al play_led
// write the value to the appropriate byte of the EEPROM.
// these values will remain there when the board is
// turned off.
EEPROM.write(addr, val);
// advance to the next address. there are 512 bytes in
// the EEPROM, so go back to 0 when we hit 512.
addr = addr + 1;
if (addr == 1024)
addr = 0;
delay(5);
}
else{
digitalWrite(REC_LED, LOW); // spengo il led per la registrazione
// read a byte from the current address of the EEPROM
value = EEPROM.read(address);
// advance to the next address of the EEPROM
address = address + 1;
// there are only 512 bytes of EEPROM, from 0 to 511, so if we're
// on address 512, wrap around to address 0
if (address == 1024)
address = 0;
delay(5);
analogWrite(PLAY_LED, value/4); //leggo i valori della eeprom e li applico al play_led
}
}