...
Code Block | ||
---|---|---|
| ||
//*************************************************************************** // 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; } } //------------------ } |
...