Salve stò realizzando un lettore di chiavi i-button che visualizzi il codice esadecimale sul monitor seriale, cosa che funziona regolarmente ma lo legge al contrario, posto il codice magari se qualcuno mi potrebbe aiutare mi farebbe una grande cortesia
#include <OneWire.h>
#include <OneWire.h>
unsigned char G_addr[10][8]; //qui memorizzo fino a 10 indirizzi da 8 bytes (64bit)
byte G_Devices; // variabile usata per tenere traccia del numero di sensori riconosciuti nel bus
OneWire ow(8); // inizializza il bus onewire sulla porta n°8 (se avete collegato i sensori su un'altro pin dovete modificare qui)
void PrintAddress(byte *);
void lookUpSensors();
int CheckSensor(byte *);
void setup(void)
{
Serial.begin(9600);// inizializza la porta seriale a 9600 bsaud
G_Devices=0; // imposta a 0 il numero di sensori attualmente riconosciuti
lookUpKeys(); // avvia la ricerca delle sonde di lettura
pinMode(12, OUTPUT); // imposta il pin 13 come output (per usare il led interno come segnalatore)
}
void lookUpKeys()
{
byte address[8]; // questo array conterrà l'indirizzo locale delle chiavi
while (ow.search(address)) // loop finchè trova nuovi dispositivi
{
if (address[0] == 0x01) // identificata chiave 1-wire
{
if(CheckSensor(address)==1) //se il crc ok la lettura è corretta
{
bool old=false;
for (int i=0;i<G_Devices;i++) if(CheckAddress(G_addr[i],address)) {old=true;break;} // se trovo l'indirizzo imposto old a true ed esco dal for
if(!old) // se la chiave non è ancora stata usata....
{
for(int aa=0;aa<8;aa++) G_addr[G_Devices][aa]=address[aa]; // copia l'indirizzo
G_Devices++; // incrementa il numero di devices memorizzati
Serial.println(""); // torno a capo sul terminale.
PrintAddress(address); // stampo l'indirizzo della chiave
}
digitalWrite(12, HIGH); // accende il led sulla porta 13
delay(5000); // aspetta un po'...
digitalWrite(12, LOW); //..e spegne di nuovo il led sulla porta 13
}
}
}//end while (ricerca nuovi dispositivi)
}
bool CheckAddress(unsigned char *a,unsigned char *b) // controlla se un indirizzo è già memorizzato
{
bool ck=true;
for(int i=0;i>8;i++) if(*(a+i)!=*(b+i)) return(false);
return(true);
}
void loop(void) // corpo principale del programma
{
lookUpKeys(); // loop principale...ricercachiavi continuamente
delay(5);
}
void PrintAddress(byte * address) // stampa l'indirizzo esadecimale della sonda
{
int i;
for (i=0;i<8;i++)
{
if (address[i] < 10) Serial.print("0");
Serial.print(address[i], HEX);
}
}
int CheckSensor(byte * address) // verifica se la chiave è stata letta correttamente
{
if (OneWire::crc8(address, 7) != *(address+7)) return(-1);// faccio il controllo del CRC8, se fallito ritorno -1
else return(1); // cr8 OK, ritorno 1
}
provando a leggere una delle tante chiavi il risultato sul monitor è 01 E9 BC 05 12 00 00 68 come faccio a farlo stampare al contrario ? Questo è l'indirizzo esadecimale corretto 68 00 00 12 05 BC E9 01
Grazie anticipatamente