Bonsoir Thierry,
je viens d'avoir un petit choc avec ta réponse.
Il est vrai que je viens du monde du basic puis de l'assembleur mais depuis une dizaine d'année de pratique de l'Arduino et quelques milliers de lignes de code j'ai toujours utilisé les "and" et "or" sans n'avoir jamais rencontré de problèmes.
Je viens de faire le test de ce que j'ai proposé à Fantasio avec le code suivant (3 possibilités) sur un UNO:
const byte led = 13;
const byte button = 2;
unsigned long interval = 5000;
unsigned long startTime;
byte lastPress;
void setup()
{
pinMode(led, OUTPUT);
pinMode(button, INPUT_PULLUP);
Serial.begin (38400);
}
void loop()
{
byte pressed = digitalRead(button);
Serial.print("pressed = ");
Serial.println(pressed);
/*
// version d'origine
if (pressed)
{
if (pressed != lastPress)
{
digitalWrite(led, HIGH);
startTime = millis();
}
}
lastPress = pressed;
if (digitalRead(led))
{
if (millis() - startTime >= interval)
{
digitalWrite(led, LOW);
}
}
*/
// version Antoine
if (pressed and (pressed != lastPress))
{
digitalWrite(led, HIGH);
startTime = millis();
}
lastPress = pressed;
if (digitalRead(led) and (millis() - startTime >= interval))
{
digitalWrite(led, LOW);
}
/*
// version avec respect du C++
if (pressed && (pressed != lastPress))
{
digitalWrite(led, HIGH);
startTime = millis();
}
lastPress = pressed;
if (digitalRead(led) && (millis() - startTime >= interval))
{
digitalWrite(led, LOW);
}
*/
}
Et il se trouve que les 3 possibilités fonctionnent exactement de la même manière.
Alors où se cache le loup ?
Est-ce que le C++ serait plus permissif que prévu ?
Je suis impatient d'en apprendre d'avantage sur ce sujet et en remercie par avance tous les participants.
Bien cordialement
Antoine