lecture entrée analogique loop

J'utilise de plus en plus mes modules ESP8266 avec la mise à jour OTA (tellement pratique :slight_smile: ).

Hors dans certain code, j'ai placé des "delay" que j'ai besoin de supprimer si je veux utiliser correctement ma mise à jour via OTA.

Dans mon exemple, j'utilise un module photosensible, branché sur mon entrée analogique, qui en fonction de la valeur, va allumer ou éteindre une LED avec un afficheur type 7 Segments.

J'utilise un delay aujourd'hui afin de limiter la charge de l'ESP, car la lecture est réalisée en boucle...

Je pensais remplacer cela avec un millis, qui va lancer une lecture toutes les secondes de l'entrée analogique et donc supprimer ce delay, mais je ne suis pas sur que ce soit la meilleure des solutions.

Avez-vous une méthode potentiellement plus efficace que mettre une millis ?

void loop() {
//lecture photosensible
  int sensorValue = analogRead(A0);
  float voltage = sensorValue * (3.3 / 1023.0);
  Serial.println (voltage);

  if ( voltage >= 0.70 ){
      digitalWrite(BROCHE_LED_GREEN, HIGH);
      delay(5000);
    }
    else { 
      digitalWrite(BROCHE_LED_GREEN, LOW);
      delay(5000);
    }
}

Pas à ma connaissance.
Tu peux faire un truc du genre :

#define periode 1000 // ms
#define BROCHE_LED_GREEN 10 // mettre la bonne pin ici
unsigned long chrono;

void setup() {
  Serial.begin(115200);
  pinMode (BROCHE_LED_GREEN,OUTPUT);
  chrono = millis();
}


void loop() {
  if (millis() - chrono >= periode) {
    //lecture photosensible
    int sensorValue = analogRead(A0);
    float voltage = sensorValue * 3.3 / 1023.0;
    Serial.println (voltage);
    digitalWrite(BROCHE_LED_GREEN, (voltage >= 0.70)); // pas totalement sûr de ça
    chrono = millis();
  }
}

Pour le digitalWrite, tu peux faire une logique ternaire :

digitalWrite(BROCHE_LED_GREEN, voltage >= 0.70 ? HIGH : LOW);