MTcore: Exemple 2
Gestion par événements pour UNO, Nano, Mega
Minimum de MTtimeBase
Programme complet
// Ce programme permet de rajouter des objets dans le but de trouver la base // de temps minimum assurant le fonctionnement pour une configuration donnée #include// V1.0.4 Voir http://arduino.dansetrad.fr/MTobjects // Création d'un objet pour faire la mesure. Cet objet fait changer le niveau // de A5 chaque période de MTtimeBase. Avec un analyseur de signaux on doit // s'assurer que le signal ne présente pas de trous pour un fonctionnement // correct. On peut ainsi avoir la période la plus petite pour une // configuration donnée. // Création d'unsignal carré issu de l'horloge MTquickTime, avec mise en place // des scans pour les différents objets (cas le plus défavorable) class Mesure: public MTquickObject, public MTmediumObject, public MTslowObject { public: Mesure(void); protected: virtual void quickAction(void); // Visualisation du fonctinnellement de l'horloge MTtimeBase }; Mesure::Mesure(void) { pinMode(A5,OUTPUT); // Broche pour l'analyseur de signaux } void Mesure::quickAction(void) { PINC = 0b00100000; // Changement de niveau de PC5 = A5 } Mesure NotreMesure; word BaseDeTemps = 8 micro_secondes; word mtSoftPWM; // Nombre de MTsoftPWM rajoutés word mtServo; // Nombre de MTservo rajoutés word mtUlnStepper; // Nombre de MTulnStepper rajoutés word mtStepStepper; // Nombre de MTstepStepper rajoutés boolean delaymillis = false; // Si l'horloge système est désactivée void setup() { MTstopDelayMillis(); // Désactive l'horloge système Serial.begin(115200); } void loop() { // Configuration Serial.print("MTtimeBase: "); Serial.print(BaseDeTemps); Serial.println("µs"); if (mtSoftPWM>0) { Serial.print(mtSoftPWM); Serial.println(" MTsoftPWM"); } if (mtServo>0) { Serial.print(mtServo); Serial.println(" MTServo"); } if (mtUlnStepper>0) { Serial.print(mtUlnStepper); Serial.println(" MTulnStepper"); } if (mtStepStepper>0) { Serial.print(mtStepStepper); Serial.println(" MTstepStepper"); } if (delaymillis>0) Serial.println("Horloge Arduino en route"); Serial.println(); // Menu Serial.println("MTtimeBase: '*' => +20µs, '+' => +4µs, '-' => -4µs, '/' => -20µs"); Serial.println("A => ajout d'un MTsoftPWM"); Serial.println("B => ajout d'un MTservo"); Serial.println("C => ajout d'un MTulnStepper"); Serial.println("D => ajout d'un MTstepStepper"); Serial.println("E => ajout de l'horloge Arduino"); Serial.println("bouton Reset => réinitialisation du programme"); Serial.println(); // Commandes while (!Serial.available()); // Attente d'une commande switch(char(Serial.read())) { case '*': BaseDeTemps += 20; break; case '+': BaseDeTemps += 4; break; case '-': BaseDeTemps -= 4; break; case '/': BaseDeTemps -= 20; break; case 'a': case 'A': new MTsoftPWM(2, impulsions_de 1 micro_seconde, periodes_de 2 micro_secondes); mtSoftPWM++; break; case 'b': case 'B': new MTservo(2); mtServo++; break; case 'c': case 'C': { MTulnStepper *Stepper = new MTulnStepper(pin_A1 2, pin_B1 2, pin_A2 2, pin_B2 2, PAS_ENTIERS, accelerations_sur 0 pas_ou_micro_pas, 1 micro_secondes_par_pas); Stepper->move(CONTINUE); mtUlnStepper++; break; } case 'd': case 'D': { MTstepStepper *Stepper = new MTstepStepper(pin_Step 2, pin_Dir NON_CONNECTEE, pin_EN NON_CONNECTEE, accelerations_sur 0 pas_ou_micro_pas, 16 micro_pas, 1 micro_secondes_par_pas); Stepper->move(CONTINUE); mtStepStepper++; break; } case 'e': case 'E': if (delaymillis) MTstopDelayMillis(); // Désactive l'horloge système else MTstartDelayMillis(); // Active l'horloge Arduino delaymillis = !delaymillis; } MTtimeBase(BaseDeTemps); // Minimum pour un seul pas à pas }