Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagecpp
//***************************************************************************
// Tutoriel CRCduino 5.1 - exemple d'une structure de programme séquentiel pour robot autonome, à l'aide de « if »
// NOTE: contrairement aux autres tutoriels, le contact Normalement Fermé des boutons et de lal'interrupteur « limitde switch »position est ici utilisé.
//       Cela veut dire que, lorsque le bouton ou lal'interrupteur « switch » ne sont pas appuyés, la valeur lue sera "LOW", puisqu'il y
//        aura un chemin direct vers le GND. À l'inverse, lorsqu'appuyés, la valeur lue sera "HIGH".
//       Pourquoi changer, alors que tous les autres tutoriels utilisent des boutons NO? Pour vous montrez que tous les chemins mènent à Rome :)
//***************************************************************************
#include <CrcLib.h>

// C'est pratique d'avoir un nom pour chaque port de contrôle
#define PROCHAINE_ETAPE_IMPAIRE CRC_DIG_1
#define PROCHAINE_ETAPE_PAIRE CRC_DIG_2

// Déclaration des variables
// Étapes
bool dodo = false;
bool etape1 = false;
bool etape2 = false;
bool etape3 = false;

//***************************************************************************

void setup() {
  CrcLib::Initialize();
  
  Serial.begin(2000000); // Établir la connection à la console

  CrcLib::SetDigitalPinMode(PROCHAINE_ETAPE_IMPAIRE, INPUT); // Initialiser les ports comme entrées
  CrcLib::SetDigitalPinMode(PROCHAINE_ETAPE_PAIRE, INPUT);
  
  // Au début du programme, nous souhaitons être en train de dormir
  dodo = true; etape1 = false; etape2 = false; etape3 = false;
}

//***************************************************************************

void loop() {
  CrcLib::Update();

  // Afficher en continu sur la console l'état du programme (à quelle étape nous sommes rendus)
  // vrai sera affiché comme 1 et faux comme 0
  Serial.print("  dodo: "); Serial.print(dodo);
  Serial.print("etape1: "); Serial.print(etape1);
  Serial.print("etape2: "); Serial.print(etape2);
  Serial.print("etape3: "); Serial.print(etape3);
  Serial.print(" durée de la boucle: "); Serial.println( CrcLib::GetDeltaTimeMicros() ); // Affiche la durée de la dernière boucle

//------------------
  if (dodo) {
    // Le code à exécuter lors du mode repos
    // Quand les actions suivantes sont exécutées (on appuie sur un bouton mais pas l'autre), quitter l'état repos…
    if(CrcLib::GetDigitalInput(PROCHAINE_ETAPE_IMPAIRE) == HIGH && CrcLib::GetDigitalInput(PROCHAINE_ETAPE_PAIRE) == LOW) {
      // … on change de configuration pour être à une autre étape la prochaine fois
      dodo = false; etape1 = true; etape2 = false; etape3 = false;
    }
  }
//------------------
  if (etape1) {
    // Le code à exécuter durant la première étape irait ici
    // Quand les actions suivantes sont exécutées (on appuie sur un bouton mais pas l'autre), quitter l'étape 1…
    if(CrcLib::GetDigitalInput(PROCHAINE_ETAPE_PAIRE) == HIGH && CrcLib::GetDigitalInput(PROCHAINE_ETAPE_IMPAIRE) == LOW) {
      // … on change de configuration pour être à une autre étape la prochaine fois
      dodo = false; etape1 = false; etape2 = true; etape3 = false;
    }  
  }
//------------------
  if (etape2) {
    // Le code à exécuter durant la 2e étape irait ici
    // Quand les actions suivantes sont exécutées (on appuie sur un bouton mais pas l'autre), quitter l'étape 2…
    if(CrcLib::GetDigitalInput(PROCHAINE_ETAPE_IMPAIRE) == HIGH && CrcLib::GetDigitalInput(PROCHAINE_ETAPE_PAIRE) == LOW) {
      // … on change de configuration pour être à une autre étape la prochaine fois
      dodo = false; etape1 = false; etape2 = false; etape3 = true;
    }
  }
//------------------
  if(etape3) {
    // Le code à exécuter durant la 3e étape irait ici
    // Quand les actions suivantes sont exécutées (on appuie sur un bouton mais pas l'autre), quitter l'étape 2…met (we press the button/switch and the other one is not pressed)...2…
    if (CrcLib::GetDigitalInput(PROCHAINE_ETAPE_PAIRE) == HIGH && CrcLib::GetDigitalInput(PROCHAINE_ETAPE_IMPAIRE) == LOW) {
      // … on change de configuration pour être à une autre étape la prochaine fois
      dodo = true; etape1 = false; etape2 = false; etape3 = false;
    }
  }
//------------------

}

...