Skip to end of metadata
Go to start of metadata

You are viewing an old version of this content. View the current version.

Compare with Current View Version History

« Previous Version 3 Current »

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
  }
}
//**************************************************************************************************************************
  • No labels

0 Comments

You are not logged in. Any changes you make will be marked as anonymous. You may want to Log In if you already have an account.