Selbstverständlich, hier der Sketch:
#include <Wire.h>
#define SLAVE_ADDRESS 0x07
int number = 0;
int state = 0;
unsigned long time_received = 0;
void setup() {
pinMode(5, OUTPUT);
Serial.begin(9600); // start serial for output
// initialize i2c as slave
Wire.begin(SLAVE_ADDRESS);
// define callbacks for i2c communication
Wire.onReceive(receiveData);
Wire.onRequest(sendData);
Serial.println("Ready!");
}
void loop() {
delay(100);
Serial.print(millis()); Serial.print("-----"); Serial.print(time_received); Serial.print("-----"); Serial.println(millis() - time_received);
if (state == 1 && millis() - time_received < 5100 && millis() - time_received > 4900){
turnoff();
}
}
// callback for received data
void receiveData(int byteCount){
while(Wire.available()) {
number = Wire.read();
Serial.print("data received: ");
Serial.println(number);
if (number == 1){
time_received = millis();
turnon();
}
}
}
void turnoff(){
digitalWrite(5, LOW);
state = 0;
time_received = 0;
}
void turnon(){
digitalWrite(5, HIGH);
state = 1;
}
// callback for sending data
void sendData(){
Wire.write(number);
}
Ich hab' eine gewisse Toleranz bei der Abschaltung eingebaut.
Gruß, tomml