gpb01:
Sai cosa significa la sigla I2C ? ? ?
... Inter Integrated Circuit ... ovvero un bus per comunicazione tra integrati sulla stessa scheda, a pochi cm l'uno dall'altro !
10/15 cm sono normalmente il massimo a cui puoi allontanarti, po devi cominciare a giocare con le resistenze di pull-up, con il tipo di cavi per ridurre la capacità e, per distanze maggiori, devi usare degli I2C bus extender.
Guglielmo
Sai come si costruisce un reattore di pirolisi da 150M€?.....
scherzo...
Si so cosa sia ed io non ho voluto utilizzare i bus extender mi sono limitato a scegliere un cavo da 55 pF/metro ed ho calcolato le resistenze di pull-up utilizzando la guida sul bus IC2.
Oggi ho fatto qualche test e mi sono accorto che tutti i comandi inviati dal master allo slave funzionano senza bloccare il master, l'unico che non funziona è questo:
if(temp.substring(5, 7)=="11" && !Exit) {
if(temp.substring(7, 8)=="1") {
// Comando per alzare il windscreen
Wire.beginTransmission(Device_Windshield);
cmd=10;
Wire.write(cmd);
Wire.endTransmission();
}
if(temp.substring(7, 8)=="0") {
// Comando per abbassare il windscreen
Wire.beginTransmission(Device_Windshield);
cmd=11;
Wire.write(cmd);
Wire.endTransmission();
}
num[20]="";
temp="";
Exit=true;
}
Ho meglio, si blocca dopo l'11 - 1 o il 11 - 0. Lo slave riceve il cmd 10 o 11 che sia e fa quello che deve fare poi il master si blocca. Mentre lo slave continua a funzionare.
Quindi il Wire.write(cmd); dovrebbe funzionare...
Mentre il Wire.endTransmission(); si blocca? Qualche consiglio su come individuare un baco nel codice che non riesco a capire?
tutti gli altri comandi inviati allo stesso slave qui sotto riportati funzionano... non capisco...
if(temp.substring(5, 7)=="09" && !Exit) {
/*
* Viene eseguito il comando 09. Il comando 09 imposta la modalità
* del windscreen. I parametri sono:
* 0 - attiva modalità automatica per il setup del windscreen quando si spegne e si accende la moto
* 1 - disattiva l'automatismo, il parabrezza rimane nella posizione in cui si trova
* 2 - attiva il limite di velocità a 100 km/h;
* 3 - disattiva il limite di velocità;
* 4 - attiva modalità automatica City;
* 5 - attiva modalità automatica Touring;
* 6 - attiva modalità automatica Autostrada;
* 7 - disattiva la modalità automatica;
*/
if(temp.substring(7, 8)=="0") {
Wire.beginTransmission(Device_Windshield);
cmd=2;
Wire.write(cmd);
Wire.endTransmission();
EEPROM.write(66, 0);
}
if(temp.substring(7, 8)=="1") {
Wire.beginTransmission(Device_Windshield);
cmd=3;
Wire.write(cmd);
Wire.endTransmission();
EEPROM.write(66, 1);
}
if(temp.substring(7, 8)=="2") {
Wire.beginTransmission(Device_Windshield);
cmd=4;
Wire.write(cmd);
Wire.endTransmission();
EEPROM.write(67, 1);
}
if(temp.substring(7, 8)=="3") {
Wire.beginTransmission(Device_Windshield);
cmd=5;
Wire.write(cmd);
Wire.endTransmission();
EEPROM.write(67, 0);
}
if(temp.substring(7, 8)=="4") {
Wire.beginTransmission(Device_Windshield);
cmd=6;
Wire.write(cmd);
Wire.endTransmission();
EEPROM.write(68, 1);
}
if(temp.substring(7, 8)=="5") {
Wire.beginTransmission(Device_Windshield);
cmd=7;
Wire.write(cmd);
Wire.endTransmission();
EEPROM.write(68, 2);
}
if(temp.substring(7, 8)=="6") {
Wire.beginTransmission(Device_Windshield);
cmd=8;
Wire.write(cmd);
Wire.endTransmission();
EEPROM.write(68, 3);
}
if(temp.substring(7, 8)=="7") {
Wire.beginTransmission(Device_Windshield);
cmd=9;
Wire.write(cmd);
Wire.endTransmission();
EEPROM.write(68, 0);
}
num[20]="";
temp="";
Exit=true;
}