Scarica Software Gratis
|
Attenzione..!! i programmi che seguono sono in codice sorgente..non eseguibili se non compilati..utilizzabili solo per tracce sui procedimenti..
Arduino e I-Button Eprom DS2505 Il software di seguito riportato riguarda la sola lettura del dispositivo sopra citato, serve unicamente per trarre spunti ad eventuali sviluppi. |
//software elaborato da fernando
tagliaferro 06/02/2012 #include <OneWire.h> // inserisco le lib.dei Button OneWire ds(10); // Utilizzo il pin 10 per la connessione int led=52; // un led per vedere quando passa per il loop byte i; // variabile del for-next boolean presente; byte data[16]; //app.dati memoria byte addr[8]; //app.dati codice Seriale int leggi=0; int scrivi=0; char ricevuto; //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ void setup() { pinMode(led,OUTPUT); //identifico il pin 52 come uscita Serial.begin(9600); // definisco la velocitā di trasmissione digitalWrite(led,HIGH); // spengo il led alla partenza } //generale*********************************************************************************************************** void loop() { Rx(); digitalWrite(led,LOW); //accendo il led delay(300); digitalWrite(led,HIGH); // spengo il Led delay(300); // aspetto nartro mezzo secondo if (leggi==1) // aspetto che venga digitata la "A" per leggere la memoria - utilizzare il monitor di arduino per questo {leggi_button();} } //********************************************************************* void leggi_button(){ ds.reset_search(); // resetto il registro del bus ds.search(addr); // abilito la ricerca di dispositivi ds.skip(); // utilizzo solo quello trovato, blocco la ricerca presente=ds.reset(); // carico nella variabile "presente" lo stato della ricerca if (presente==1) // se presente=1 ho il dispositivo collegato {Serial.println("Dispostitivo Collegato...!! ");} else {Serial.println("Nessun Dispostitivo Collegato...!!"); // altrimenti stampo l'errore e ritorno al loop return;} if (addr[0]==11) // se il valore addr[0] č uguale a 0xB-(11) si tratta di un DS2505 e stampa il tipo {Serial.print("Tipo di Button DS2505..codice=0x0"); Serial.println(addr[0],HEX);} else {Serial.println("Tipo di Button sconosciuto..codice=0x0 "); //altrimenti stampa....sconosciuto e ritorna al loop Serial.println(addr[0],HEX); return;} // se tutto č andato a buon fine prosegue******************************* Serial.print("Seriale = "); for( i = 7; i >0; i--) { // carica nelle variabili addr il codice seriale cosė come lo legge TMEX da Sx a DX Serial.print(addr[i], HEX); // e lo stampa in caratteri esadecimali Serial.print(" "); } Serial.println("-"); if ( OneWire::crc8( addr, 7) != addr[7]) { // Controlla il CRC Serial.print("Il CRC non č valido"); // Se errato stampa il mesaggio return; } delay(1000); // aspetta 1 secondo per scaricare eventuali correnti parassite ds.select(addr); ds.write(0xF0); // scrive il comando di lettura memoria ds.write(0x00); // scrive da quale pagina voglio leggere,"00H" per la pagina 1 ,"20H" per la pagina 2,"40H" per la pagina tre, ecc ds.write(0x00); Serial.print("Registro Memoria = "); Serial.print(" "); for ( i = 0; i < 16; i++) { //Carica i valori di memoria su data da Sx a DX data[i] = ds.read(); Serial.print(data[i], HEX); // stampa il contenuto letto Serial.print(" "); } Serial.print(" CRC="); Serial.print( OneWire::crc8( data, 8), HEX); // calcola il CRC Serial.println(); chiave[8]=data[8]; chiave[9]=data[9]; for ( i = 0; i < 10; i++) { //Carica i valori di memoria su data da Sx a DX Serial.print(chiave[i], HEX); // stampa il contenuto letto Serial.print(" "); } leggi=0; // passa una sola volta quando riceve il carattere "A" } //***************************************************************************************************************** void Rx() { ricevuto=0; ricevuto = Serial.read(); if (ricevuto==65) // se ricevo "A" metto la variabile a "1" nel loop questo consente la lettura de DS2505 {leggi=1;} } |