Bonjour,
Je viens de remettre en ligne ma bibliothèque MTobjects qui permet de gérer divers objets sous interruption: boutons, horloges, pwm, servo, pas à pas pour l'instant.
Elle ne fonctionne que pour les AVR (Uno, Nano, Mega) car elle utilise les timers interne. Le principe serait utilisable pour d'autre microcontrôleurs.
Passant par interruptions:
− il est possible de gérer plusieurs actions qui semblent indépendantes
− il n'y a pas d'appel régulier à faire dans loop (genre MTobjects.run(); ).
− on peut parfaitement faire tourner un pas, faire clignoter une sortie pendant un delay du programme principal. On peur avoir un programme bloquant et rajouter un bouton qui sera pris en compte.
Pour la catégorie, "Projets fini" est ambigu car je pourrais m'arrêter là, mais je pense utiliser des accélérations pour pas à pas et gérer deux pas à pas ensembles (pour faire des droites inclinées et des arcs de cercles sur une table XY).
Supposons que nous ayons un programme classique "blink with delay":
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite( LED_BUILTIN, LOW);
delay(1000);
digitalWrite( LED_BUILTIN, HIGH);
delay(1000);
}
Et supposons que l'on veuille rajouter un pas à pas qui ferait un tour à chaque appui sur un bouton, il suffit d'écrire:
// *************** Rajout ********************
#include <MTobjects.h> // V1.0.3 Voir http://arduino.dansetrad.fr/MTobjects
const uint8_t PIN_BOUTON = A0;
MTstepStepper Stepper(pin_Step 2, pin_Dir 5, pin_EN 8);
void tourne(void) // Un tour commplet
{
Stepper.move(Stepper.getMicroStepsPerTurn());
}
MTbutton Bouton(PIN_BOUTON, tourne);
//**************** l'ancien programme ************
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite( LED_BUILTIN, LOW);
delay(1000);
digitalWrite( LED_BUILTIN, HIGH);
delay(1000);
}