/
Tutoriel 02 - Reproduire la fonction delay()
Tutoriel 02 - Reproduire la fonction delay()
Objectif
L’objectif de ce tutoriel est de reproduire la fonction native à Arduino nommée delay(). Cette fonction ne peut être utilisée avec la CrcLib, puisqu’elle bloque l’exécution du programme. Ceci dit, il pourrait être intéressant de demander au CRCduino d’effectuer une action pour une durée limitée. Ce tutoriel montre comment faire cela.
Schéma électrique et présentation complète
Code
Téléchargez le code de démonstration:
Qui est ici retranscrit:
//**************************************************************************************************************************
// Tutoriel CrcDuino 2 - Reproduire la fonction delay()
//**************************************************************************************************************************
#include <CrcLib.h> // Obligatoire
// C'est pratique d'avoir un nom pour chaque port de contrôle
#define SERVO_STAND_1 CRC_PWM_6
#define BTN_AVANCE CRC_DIG_1
// Déclaration des constantes (qui ont une valeur fixe)
const unsigned long DELAIS_MS = 5000; // durée de contrôle du servo (en millisecondes, donc 5s)
// Déclaration des variables (elle changeront de valeur, mais se "souviennent" de leur valeur)
CrcLib::Timer timer; // Pour chronométrer
bool enAttente = false; // Pour se souvenir de si nous sommes en attente
//**************************************************************************************************************************
void setup() {
// Mettez votre code d'initialisation ici, il s'exécutera une seule fois au début du programme
CrcLib::Initialize(); // Initialise le CRCduino
CrcLib::InitializePwmOutput(SERVO_STAND_1, 500, 2500); // Configure la sortie du moteur, avec des durées de pulsations explicites, telles que dictées par le manufacturier
CrcLib::SetDigitalPinMode(BTN_AVANCE, INPUT); // Configure le bouton comme entrée
Serial.begin(1000000);
}
//**************************************************************************************************************************
void loop() {
// Mettez ici le code de la boucle principale, qui s'exécutera à l'infini:
CrcLib::Update(); // Tâches de routine du CRCduino
if (CrcLib::GetDigitalInput(BTN_AVANCE) == LOW && !enAttente) { // Quand le bouton est appuyé (GND est connecté à l'entrée, donc CrcLib::GetDigitalInput() retourne LOW), et que nous ne sommes pas en attente
timer.Start(DELAIS_MS); // on démarre le compte à rebours
CrcLib::SetPwmOutput(SERVO_STAND_1, -64); // on allume le servo
enAttente = true; // on se souvient que nous sommes en attente
}
if(enAttente && timer.IsFinished()) { // Quand le compte à rebours s'achève
CrcLib::SetPwmOutput(SERVO_STAND_1, 0); // On réinitialise la position du servo
enAttente = false; // On est prêts à recommencer le tout
}
}
//**************************************************************************************************************************
, multiple selections available,
Related content
Tutoriels - Page d'introduction
Tutoriels - Page d'introduction
More like this
Timer {FR}
Timer {FR}
More like this
Tutoriel 05 - Structure de programmes séquentiels
Tutoriel 05 - Structure de programmes séquentiels
More like this
Tutoriel 01 - Moteur avec interrupteur de position
Tutoriel 01 - Moteur avec interrupteur de position
Read with this
Tutorial 02 - Cleanly reproduce the Delay() function
Tutorial 02 - Cleanly reproduce the Delay() function
More like this
Tutoriel 11 - Conception de code séquentiel pour robots
Tutoriel 11 - Conception de code séquentiel pour robots
Read with this