[RISOLTO] problema millis con IR 38kHz

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 ??][

Un altro caso dove l' autore del tread non vuole dare lo sketch completo. Tanto l' errore sta SEMPRE nel pezzo di codice mostrato. >:( >:(

Se si blocca dopo 32,6 secondi so il perché.

Ciao Uwe

Tiro ad indovinare: Variabile dichiarata int e non long?

PaoloP:
Tiro ad indovinare: Variabile dichiarata int e non long?

Sbagliato:
Variabile dichiarata int e non unsigned long?
Ciao Uwe

Scusate per il codice.

Sì, era quello...!
Grazie, ciao.