Pages: [1]   Go Down
Author Topic: Aiutatemi: lettura e confronto IButtonDS1971  (Read 985 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 1
Posts: 22
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

--------concluso smiley-grin smiley-grin smiley-grin-------->Ciao a tutti, ho cercato dappertutto, ma non ho trovato nulla che possa servirmi  smiley-cry smiley-cry .
Ho trovato su un sito un bel progetto che avrei potuto realizzare perchè avevo tutto a portata di mano. Ho copiato lo sketch sul programma, in 5 minuti ho ostruito il circuito, ho connesso il mio ArduinoUNO al computer, ho caricato lo sketch e, non possedendo l' alloggio per il mio iButton lo ho connesso con due cavetti e ho letto sul display "not DS1990A" smiley-sad smiley-sad , cioè non lo riconosceva perchè non era un ds1990a. ho letto con precisione che il mio IButton è un DS1971. mi sono informato e ho letto che il DS1990A è una chiave di accesso elettronico, mentre il DS1971 è un EEPROM con 265 bit, utilizzabile, per esempio, per contenere crediti (infatti n questo momento sono chiavi per utilizzare le docce nello stabilimento balneare dove vado in estate), e volevo sapere se si può usare (e come) solo come chiave di accesso che arduino, riconoscendolo, permetta di fare un' azione(come pilotare un led, un servo, ma questo non importa, mi basta sapere come usare quel Ibutton come chiave elettronica). <-------- smiley-grin smiley-grin smiley-grin concluso------



------- nuovo problema smiley-sad smiley-sad smiley-sad------->Sono riuscito a far riconoscere  ad arduino l' ibutton e il codice arriva perfettamente sul monitor seriale. a questo punto devo riuscire a fare una lista di codici che , nel caso siano compatibili con quello appena letto da arduino facciano per esempio accendere un led, comandare un servo etc, etc... come posso fare<------ smiley-sad smiley-sad smiley-sad nuovo problema ------

----------info--------------
la pagina col progetto iniziale:www.google.it/url?sa=t&rct=j&q=arduino+ibutton&source=web&cd=1&ved=0CC8QFjAA&url=http://tushev.org/articles/electronics/35-reading-ibutton-with-arduino&ei=aexxUM6nBYT-4QSx3IHQDQ&usg=AFQjCNGwXv_QnmmUqNKfibEHDXJ7pFt4ew
gli info su i due Ibutton:
-http://www.maximintegrated.com/datasheet/index.mvp/id/2823
-http://www.maximintegrated.com/datasheet/index.mvp/id/2829

lo sketch che uso per vedere i codici sul monitor seriale:
Quote
#include <OneWire.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(7,6,5,4,3,2);



void PrintBytes(uint8_t* addr, uint8_t count, bool newline=0) {
  for (uint8_t i = 0; i < count; i++) {
    Serial.print(addr>>4, HEX);
    Serial.print(addr&0x0f, HEX);
  }
  if (newline)
    Serial.println();
}

void ReadAndReport(OneWire* net, uint8_t* addr){
}

OneWire net(12); 

void setup(void) {
  Serial.begin(9600);
  lcd.begin(16, 2);
  lcd.print("Inserire IButton");
}

void loop(void) {
  byte i;
  byte present = 0;
  byte addr[8];
  
  if (!net.search(addr)) {
    
    net.reset_search();
    delay(1000);
    return;
  }
  
  
 
    lcd.clear();
    lcd.print("Lettura Dati");
    delay(1000);
    lcd.clear();
    lcd.print("Lettura Dati=");
    delay(1000);
    lcd.clear();
    lcd.print("Lettura Dati==");
    delay(1000);
    lcd.clear();
    lcd.print("Lettura Dati===");
    delay(1000);
    lcd.clear();
    lcd.print("Lettura Dati====");
    delay(1000);
    lcd.clear();
    lcd.print("Lettura Eseguita");
    PrintBytes(addr, 8 );
    Serial.print("\n");
    delay(2000);
    lcd.clear();
    lcd.print("Buona Giornata");
    delay(3000);
    lcd.clear();
    lcd.print("Inserire Ibutton");
    
  

}


Come posso fare in modo che arduino legga il codice e lo confronti con uno nel suo sketch?

smiley-lol smiley-lol smiley-lol Grazie mille, Gamer3500 smiley-lol smiley-lol smiley-lol
« Last Edit: October 11, 2012, 11:14:15 am by Gamer3500 » Logged

0
Offline Offline
Faraday Member
**
Karma: 49
Posts: 6017
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

se po fa  smiley

secondo me si puo' fare, perche' il dato che a te interessa e' il seriale a 48bit che hanno tutti gli iButton, indifferentemente dalla funzione.
probabilmente c'e' da cambiare solo il codice identificativo presente nello sketch, confronta i due datasheet.
Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Offline Offline
Newbie
*
Karma: 1
Posts: 22
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Adesso tento, in teoria devo trovare il seriale ne nuovo datasheet e inserirlo al posto di quello vecchio;
a quelo punto, memorizzato il codice del chip li inserisco nello sketch e li metto a confronto: se il codice corrisponde con uno di quelli nella lista dela programmazione ad esempio accende un led verde, altrimenti quello rosso.
 smiley-grin smiley-grin smiley-grin smiley-grin smiley-grin smiley-grin
Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 22
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Funziona! smiley-lol smiley-lol smiley-lol smiley-lol smiley-lol a questo punto devo solo tovare il modo di comparare il codice letto da arduino con uno inserito nello sketch e, se fosse quello compatibile, accendere per esempio un led.

Vi prego, aiutatemiiiiiiii
« Last Edit: October 11, 2012, 11:18:35 am by Gamer3500 » Logged

0
Offline Offline
Faraday Member
**
Karma: 49
Posts: 6017
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ottimo, quindi il discorso dei seriali utilizzabili si tutti gli ibutton è confermato, fa sempre piacere avere ragione smiley

Ora devi solo usare un IF per gestire tutti gli ibutton.
Posta il codice che hai tentato di scrivere, sarà un errore banale
Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Offline Offline
Newbie
*
Karma: 1
Posts: 22
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
/*Aggiungere questo pezzo sotto allo sketch principale e 
inserire nel void setup() 'pinMode(13, OUTPUT);' 
e 'pinMode(12,OOUTPUT);' */

if( **** == '140E745B030000C6') {
  digitalWrite(13, HIGH);          //se il codice letto corrisponde accendi un led verde
  delay(1000);                     //aspetta 1 secondo
  digitalWrite(13, LOW);           //spengi i led verde
  
  }

else( **** != '140E745B030000C6') {
  digitalWrite(12, HIGH);          //se il codice letto è diverso accendi un led rosso
  delay(1000);                     //aspetta un secondo
  digitalWrite(12, LOW);           //spengi il led rosso
  
  }



Il problema del mio codice sta nell' if e nell' else: non so cosa mettere per comparare al codice dell' iutton infatti ho scritto soltanto ****. cosa devo mettere a quel posto????


Il codice finale sarebbe quindi:
Quote
#include <OneWire.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(7,6,5,4,3,2);



void PrintBytes(uint8_t* addr, uint8_t count, bool newline=0) {
  for (uint8_t i = 0; i < count; i++) {
    Serial.print(addr>>4, HEX);
    Serial.print(addr&0x0f, HEX);
  }
  if (newline)
    Serial.println();
}

void ReadAndReport(OneWire* net, uint8_t* addr){
}

OneWire net(12); 

void setup(void) {
  Serial.begin(9600);
  lcd.begin(16, 2);
  lcd.print("Inserire IButton");
}

void loop(void) {
  byte i;
  byte present = 0;
  byte addr[8];
  
  if (!net.search(addr)) {
    
    net.reset_search();
    delay(1000);
    return;
  }
  
  PrintBytes(addr, 8 );
    Serial.print("\n");
 
    if( **** == '140E745B030000C6') {
  digitalWrite(13, HIGH);          //se il codice letto corrisponde accendi un led verde
  delay(1000);                     //aspetta 1 secondo
  digitalWrite(13, LOW);           //spengi i led verde
  
  }

else( **** != '140E745B030000C6') {
  digitalWrite(12, HIGH);          //se il codice letto è diverso accendi un led rosso
  delay(1000);                     //aspetta un secondo
  digitalWrite(12, LOW);           //spengi il led rosso
  
  }
    
  

}


poi con calma ci adatterò anche il display con le diverse procedure...
(anche se "lettura dati"  scritto sul display è finto: serve solo per far "scena" smiley-lol smiley-lol smiley-lol smiley-lol )
Logged

0
Offline Offline
Faraday Member
**
Karma: 49
Posts: 6017
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quando hai detto FUNZIONA come e' IL CODICE ?
Devi dichiarare una variabile dove svrivi il seriale ibutton e poi fai il confronting con quella variabile
Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Offline Offline
Newbie
*
Karma: 1
Posts: 22
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

è semplicemente questo:

Code:
#include <OneWire.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(7,6,5,4,3,2);



void PrintBytes(uint8_t* addr, uint8_t count, bool newline=0) {
  for (uint8_t i = 0; i < count; i++) {
    Serial.print(addr>>4, HEX);
    Serial.print(addr&0x0f, HEX);
  }
  if (newline)
    Serial.println();
}

void ReadAndReport(OneWire* net, uint8_t* addr){
}

OneWire net(12); 

void setup(void) {
  Serial.begin(9600);
  lcd.begin(16, 2);
  lcd.print("Inserire IButton");
}

void loop(void) {
  byte i;
  byte present = 0;
  byte addr[8];
 
  if (!net.search(addr)) {
   
    net.reset_search();
    delay(1000);
    return;
  }

Serial.print("\n");
    delay(2000);

 }


funziona nel senso che legge il codice, ma non può ancora confrontarlo...
 
Logged

0
Offline Offline
Faraday Member
**
Karma: 49
Posts: 6017
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

mi e' alquanto ostico questo codice,
cosa ti stampa ?
in continuazione il tuo seriale ?
incolla quello che ti esce sul serial monitor
Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Offline Offline
Newbie
*
Karma: 1
Posts: 22
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

esattamente il codice "140E745B030000C6"
Logged

0
Offline Offline
Faraday Member
**
Karma: 49
Posts: 6017
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

nel tuo loop c'e' solo un
Code:
[code]Serial.print("\n");

che significa vai a capo, come fa a stamparti il codice dell'ibutton ?  smiley-eek-blue[/code]
Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Pages: [1]   Go Up
Jump to: