Ho provato questo codice:
void IR38Write() {
for (int i = 0; i <= 384; i++) {
digitalWrite(IRledPin, HIGH);
delayMicroseconds(12); // con 12ms mi dà sui 34kHz, ma ho visto che funziona meglio...
digitalWrite(IRledPin, LOW);
delayMicroseconds(12);
}
}
void loop(){
IR38Write();
if (digitalRead(IRsensorPin) == LOW) { //check the sensor, if high
//Serial.println("libero");
if (digitalRead(D13ledPin)== HIGH ) digitalWrite(D13ledPin ,LOW);
}
else {
//Serial.println("OSTACOLO");
if (digitalRead(D13ledPin)== LOW ) digitalWrite(D13ledPin ,HIGH);
}
delay(50);
} //loop
e funziona bene: quando la barriera IR viene interrotta accende il led (“OSTACOLO”), se libera il led è spento.
L’ho adattata a millis:
void IR38Write() {
for (int i = 0; i <= 384; i++) {
digitalWrite(IRledPin, HIGH);
delayMicroseconds(12); // con 12ms mi dà sui 34kHz, ma ho visto che funziona meglio...
digitalWrite(IRledPin, LOW);
delayMicroseconds(12);
}
}
void loop(){
if (millis() - timerIR > 50){ // meglio con delay SUPERIORE 10, tipo 50
IR38Write();
if (digitalRead(IRsensorPin) == LOW) {
//Serial.println("libero");
if (digitalRead(D13ledPin)== HIGH ) digitalWrite(D13ledPin ,LOW);
}
else {
//Serial.println("OSTACOLO");
if (digitalRead(D13ledPin)== LOW ) digitalWrite(D13ledPin ,HIGH);
}
timerIR = millis();
}
}
Funziona per i primi 30s e poi mi dà sempre led acceso( “OSTACOLO”) anche se non c’è nulla davanti ??][