Auteur Sujet: Impulsion temporisée avec Attiny 85  (Lu 23320 fois)

Fantasio

  • Newbie
  • *
  • Messages: 40
    • Voir le profil
Re : Impulsion temporisée avec Attiny 85
« Réponse #15 le: octobre 09, 2020, 03:21:54 pm »
Merci Antoine pour ton aide.

Je suis honteux de n'avoir pas pensé à cela. Comme quoi, moi aussi, j'ai encore beaucoup à apprendre!
C'est aussi tout le bénéfice d'être inscrit sur ce forum...

Bonne continuation à toi

Fantasio

  • Newbie
  • *
  • Messages: 40
    • Voir le profil
Re : Impulsion temporisée avec Attiny 85
« Réponse #16 le: octobre 09, 2020, 03:23:39 pm »
...et à Thierry également :)

Tony04

  • Hero Member
  • *****
  • Messages: 569
    • Voir le profil
Re : Re : Impulsion temporisée avec Attiny 85
« Réponse #17 le: octobre 09, 2020, 04:54:44 pm »
Je suis honteux de n'avoir pas pensé à cela

Le tout dernier sentiment à avoir sur notre site favori  :) .

Fantasio

  • Newbie
  • *
  • Messages: 40
    • Voir le profil
Re : Impulsion temporisée avec Attiny 85
« Réponse #18 le: octobre 09, 2020, 05:21:18 pm »
@Antoine

Suite à ta réponse:
  if (etatMonostable and (millis() - debut_tempo >= tempo))
 ...
Tu utilises "and" et pas "&&" pour l'instruction "et logique" (comme le précise le langage Arduino), et cela ne provoque aucune erreur retournée par l'IDE. Donc "and" est valide.

Ma question est la suivante: D'autres instructions de ce type seraient elles alors compatibles avec le langage de l'Arduino?

Tony04

  • Hero Member
  • *****
  • Messages: 569
    • Voir le profil
Re : Impulsion temporisée avec Attiny 85
« Réponse #19 le: octobre 09, 2020, 08:55:17 pm »
à ma connaissance le or à la place du || mais les 2 (and et or) à confirmer par les "pros"

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 810
    • Voir le profil
Re : Impulsion temporisée avec Attiny 85
« Réponse #20 le: octobre 10, 2020, 08:26:51 pm »
Et à ma connaissance, le C ou le C++ n'ont jamais permis d'utiliser des mots clé 'and' et 'or' qui sont plutôt des mots clé du Basic ou du VB... Je serais curieux de voir un code qui se compile bien avec ça.

Fantasio

  • Newbie
  • *
  • Messages: 40
    • Voir le profil
Re : Impulsion temporisée avec Attiny 85
« Réponse #21 le: octobre 10, 2020, 11:17:01 pm »
... Je serais curieux de voir un code qui se compile bien avec ça.

Essaye celui ci testé sur UNO avec l'IDE 1.8.10:
int x = 1;
int y = 2;


void setup()
{
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop()
{
 if (x == 1 and y == 2)
  {
    digitalWrite(LED_BUILTIN, HIGH);
    delay (1000);

La LED clignote bien ;D

Tony04

  • Hero Member
  • *****
  • Messages: 569
    • Voir le profil
Re : Impulsion temporisée avec Attiny 85
« Réponse #22 le: octobre 10, 2020, 11:26:26 pm »
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


Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 810
    • Voir le profil
Re : Impulsion temporisée avec Attiny 85
« Réponse #23 le: octobre 11, 2020, 01:19:32 pm »
Bonjour,

J'avoue, je ne connaissais pas cette syntaxe, mais il semble qu'elle soit effectivement disponible (https://en.cppreference.com/w/cpp/keyword). Autant pour  moi.

Yann

  • Newbie
  • *
  • Messages: 10
    • Voir le profil
    • La technique ferroviaire en modélisme
Re : Impulsion temporisée avec Attiny 85
« Réponse #24 le: octobre 11, 2020, 03:58:38 pm »
Bonjour,

Je reviens sur le sujet d'origine et l'optimisation du code. Merci à Antoine et Thierry pour leurs propositions. Je vais les tester et les intégrer.
Meilleures salutations
Yann