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 chronometrer 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 } } //**************************************************************************************************************************
Add Comment