Ciao a tutti,
vi allego questo codice
#include <TinyWireS.h>
#define pin_in 3
int cont = 0;
int in = LOW;
int st = LOW;
void setup() {
pinMode(pin_in, INPUT);
TinyWireS.begin(0x02);
TinyWireS.onRequest(tra);
}
void loop() {
in = digitalRead(pin_in);
if(in != st){
cont++;
st = in;
delay(150);
}
}
void tra(){
TinyWireS.send(cont);
cont = 0;
}
Questo codice che esegue l' attiny85 deve semplicemente aumentare un contatore (cont) ogni volta che lo stato del pin 3 cambia da HIGH a LOW e viceversa: in pratica premo il pulsante e aumenta di uno, mollo il pulsante sale a due, premo il pulsante va a tre e via così... L'attiny comunica quante volte è cambiato lo stato sul pin all'arduino uno tramite protocollo i2c.
Questo è il codice che esegue l'arduino uno
#include <Wire.h>
int cont = 0;
void setup() {
Serial.begin(115200);
Wire.begin();
}
void loop() {
Wire.requestFrom(0x02, 1);
while(Wire.available()){
cont = Wire.read();
}
Serial.println(cont);
delay(7000);
}
Prima di caricare il codice sull'attiny, per comodità avevo usato un arduino nano, sostituendo la libreria TinyWireS con la Wire, per verificare che tutto funzionasse correttamente, e così è stato.
Allora ricambio la libreria e carico lo stesso codice sull'attiny, ma quando l'arduino uno va a fare la richiesta all'attiny, questo risponde che ha contato al massimo fino a due, anche se io ho premuto e mollato il pulsante 10 volte.
Ora io non so se l'attiny conta effettivamente fino a due o se c'è un problema di comunicazione, perchè con l'arduino nano tutto fila liscio, sia il contatore che la comunicazione, l'unica modifica nel codice è la libreria: TinyWireS per l' attiny; Wire per l'arduino nano.
Mi aiutate in questo problema?
Grazie in anticipo.