Variable et sous routine qui compare avant d'agir ?

Bonjour à tous,
j'ai un petit code qui me permet d'actionner 2 boutons "toggles switches".
il fonctionne, le voici :

void setup()
{
  Serial.begin(115200); //begin serial at 115200 Baud

  pinMode(2, INPUT_PULLUP);
  pinMode(3, INPUT_PULLUP);
}

void loop()
{
  //----Nav Lights----

  if (digitalRead(2) == LOW) { //if switch on pin 2 is in "on" position
    Serial.println("C411"); //turn nav lights on

  } else {
    Serial.println("C410");  //else turn nav lights off

  }

  //----TAXI Lights----

  if (digitalRead(3) == LOW) { //if switch on pin 3 is in "on" position
    Serial.println("C441"); // turn taxi lights on

  } else {
    Serial.println("C440");  //else turn taxi lights off
  }

}//End loop

j'ai besoin qu'il soit réactif,
quelques dixièmes de secondes.
C'est le cas au début,
mais à force de bombarder l'arduino uno et le logiciel d'interfaçage de requêtes allumé/éteint
et bien ça lag.
D'ou ma question :
Est-il possible de créer une condition et sous routine qui compare le statut "OLD" / "NEW" des entrées,
afin de n'intervenir que si le statut des entrées change ??
PS : en matière de syntax et de codage, je suis un enfant de 5 ans...

Bonjour,

Il suffit de mémoriser l'état précédent et de comparer à l'état actuel
Comme ceci:

void setup()
{
  Serial.begin(115200); //begin serial at 115200 Baud

  pinMode(2, INPUT_PULLUP);
  pinMode(3, INPUT_PULLUP);
}

void loop()
{
  //----Nav Lights----
  static int oldinput2 = HIGH;
  int input2 = digitalRead(2);
  if (input2 != oldinput2)
  {
    // l'entrée 2 a changé d'état
    oldinput2 = input2;
    if (input2 == LOW) { //if switch on pin 2 is in "on" position
      Serial.println("C411"); //turn nav lights on

    } else {
      Serial.println("C410");  //else turn nav lights off

    }
  }

  //----TAXI Lights----
  static int oldinput3 = HIGH;
  int input3 = digitalRead(3);
  if (input3 != oldinput3)
  {
    // l'entrée 3 a changé d'état
    oldinput3 = input3;

    if (input3 == LOW) { //if switch on pin 3 is in "on" position
      Serial.println("C441"); // turn taxi lights on

    } else {
      Serial.println("C440");  //else turn taxi lights off
    }
  }

}//End loop

Un grand merci kamill.
Cela fonctionne.
Afin de comprendre , j'ai essayé de traduire en Français :

void loop()
{
static int oldinput2 = HIGH; // ANCIEN ETAT STATIC ENTREE N2 = ALLUMÉ
int input2 = digitalRead(2); // ETAT ACTUEL ENTREE N
2 = LIRE ENTREE N*2

if (input2 != oldinput2) // SI ETAT ACTUEL ENTREE N* 2 EST DIFFERENT DE L'ANCIEN ETAT "ALLUMÉ"
{
oldinput2 = input2; // ANCIEN ETAT "ALLUMÉ" = LIRE ETAT ACTUEL DE L'ENTREE N*2

Je ne comprends pas la notion de la ligne en rouge ! Ni ce que j'ai traduit en Français d'ailleurs.

if (input2 == LOW) // SI L'ETAT ACTUEL DE L'ENTREE N* 2 EST ETEINTE
{
Serial.println("C411"); // ACTIONNER ETEINT
}
else {Serial.println("C410"); // SINON ACTIONNER ALLUMÉ
}
}

J'ai certainement mal traduit.
Merci encore pour votre gentillesse & réactivité.
Dany

Dans la ligne rouge, l'état actuel devient l'ancien état pour la boucle suivante.
Il est important que oldinput2 soit déclaré 'static', ça veut dire que sa valeur est conservée à chaque appel de loop()

Merci kamill .
je comprends mieux.