Salve ragazzi sto impazzendo e chiedo aiuto
Partiamo che sto realizzando un sistema per l'eccitamento di un relè in caso si inserisca una chiave ibutton memorizzata
e qui arriviamo
inizialmente le chiavi erano in ram quindi più chiavi più ram usata... quindi crash
le chiavi una volta memorizzate finivano scritte nella eeprom interna
inizialmente all'avvio facevo leggere la eeprom interna e le caricavo in ram ( se volete ho quello sketch ma è superato )
ora faccio diversamente:
memorizzo tutte le chiavi nei 512 kb del arduino mega
quando inserisco una chiave carico il codice ed uno alla volta ciclo per il numero di chiavi inserite finchè non trovo se a qualcuna corrisponde
nel primo codice che allego funziona ma credo non correttamente perchè all'inizio nella definizione delle variabili inserisco
unsigned char G_addr[10][8]; //qui memorizzo fino a 10 indirizzi da 8 bytes (64bit)
quindi consumo 10*8
ora per come voglio io che funzioni qui mi basta 1*8
perchè poi ogni volta ci riscrivo dentro per virificare quello successivo
qui si vede come funziona ma secondo me non è corretto tant'è che se memorizzo più di 10 chiavi non và...
void lookUpKeys()
{
byte address[8]; // questo array conterrà l'indirizzo locale delle chiavi
G_Devices = EEPROM.read(0); // leggo quante chiavi sono state memorizzate
while (ow.search(address)) // loop finchè trova nuovi dispositivi
{
if (address[0] == 0x01) // identificata chiave 1-wire
digitalWrite( 6, HIGH); // riaccendo la retroilluminazione
{
if(CheckSensor(address)==1) //se il crc ok la lettura è corretta
{
bool old=false;
// ********
for (int y = 1; y <= G_Devices; y++) // for (int y = 1; y <= G_Devices; y++)
{
for(int aa=0;aa<8;aa++)
{
G_addr[1][aa]=EEPROM.read(1+ ((y*8)-8 + aa));
lcd.print(G_addr[1][aa], HEX);
}
if(CheckAddress(G_addr[1],address)) < ========== ECCO QUI e sopra
{
old=true;break;
}
if(!old) // se la chiave non è ancora stata usata....
ps sulla posizione 1 della eprom scrivo quante key sono memorizzate escco perchè nel ciclo c'è lo scavallo di 1
ora guardate come ho modificato a logica
void lookUpKeys()
{
byte address[8]; // questo array conterrà l'indirizzo locale delle chiavi
G_Devices = EEPROM.read(0); // leggo quante chiavi sono state memorizzate
while (ow.search(address)) // loop finchè trova nuovi dispositivi
{
if (address[0] == 0x01) // identificata chiave 1-wire
digitalWrite( 6, HIGH); // riaccendo la retroilluminazione
{
if(CheckSensor(address)==1) //se il crc ok la lettura è corretta
{
bool old=false;
// ********
for (int y = 1; y <= G_Devices; y++) // for (int y = 1; y <= G_Devices; y++)
{
for(int aa=0;aa<8;aa++)
{
G_addr[1][aa]=EEPROM.read(1+ ((y*8)-8 + aa));
lcd.print(G_addr[1][aa], HEX);
}
if(CheckAddress(G_addr[1],address))
{
old=true;break;
}
if(!old) // se la chiave non è ancora stata usata....
sto diventando scemo
grazie a chi mi aiuta ad uscirne credo di essere vicino
iButton_veeprom_V4_1_b.ino (21.2 KB)
iButton_veeprom_V4_1_b.ino (21.2 KB)