MTobjets: Exemple 9
Gestion par événements pour UNO, Nano, Mega

2 moteurs et 4 boutons

Problème posé

Vu sur un forum:

J'ai récupéré un code qui permet de faire fonctionner un moteur pas à pas avec 2 poussoirs avant arrière, testé sur une Nano avec un driver ulm2003.
Est-il possible sur une Nano d'avoir 4 boutons (2 avants 2 arrières ) et 2 moteurs qui auraient des commandes séparées et la même vitesse?

Programme complet recommandé

Ce programme se fait complètement sous interruption, et libère loop qui peut être utilisé pour faire autre chose.


// 2 moteurs pas à pas et 4 boutons. Pour chaque moteur on a un bouton pour
// le faire tourner dans un sens et un bouton pour le faire tourner dans
//l'autre. Les deux moteurs sont indépendants.
// Un potentiomètre règle la vitesse entre 0 et 200tr/mn
// Voir https://forum.arduino.cc/t/2-moteur-pas-a-pas-4-boutons/1384039

#include  // V1.0.5 Voir http://arduino.dansetrad.fr/MTobjects


const uint8_t sensHoraireMoteur1 = A1; // Numéro de la broche du bouton senshoraire
const uint8_t sensAntihoraireMoteur1 = A2; // Numéro de la broche du bouton sensantihoraire
const uint8_t sensHoraireMoteur2 = A3; // Numéro de la broche du bouton senshoraire
const uint8_t sensAntihoraireMoteur2 = A4; // Numéro de la broche du bouton sensantihoraire


// *************************** Pour le premier moteur *************************************
MTstepStepper Moteur1(pin_Step 2, pin_Dir 5, pin_EN 8, accelerations_sur 0 pas_ou_micro_pas);

void rotationSensHoraireMoteur1(void)
{
  Moteur1.setSpeed((analogRead(A0) / 5) RPM);
  Moteur1.move(CONTINUE);
}
void rotationSensAntihoraireMoteur1(void)
{
  Moteur1.setSpeed((analogRead(A0) / 5) RPM);
  Moteur1.move(-CONTINUE);
}
void arretMoteur1(void)
{
  Moteur1.stop();
}

MTbutton boutonSensHoraireMoteur1(sensHoraireMoteur1, rotationSensHoraireMoteur1, arretMoteur1);
MTbutton boutonSensAntihoraireMoteur1(sensAntihoraireMoteur1, rotationSensAntihoraireMoteur1, arretMoteur1);


// *************************** Pour le deuxième moteur ************************************
MTstepStepper Moteur2(pin_Step 3, pin_Dir 6, pin_EN 8, accelerations_sur 0 pas_ou_micro_pas);

void rotationSensHoraireMoteur2(void)
{
  Moteur2.setSpeed((analogRead(A0) / 5) RPM);
  Moteur2.move(CONTINUE);
}
void rotationSensAntihoraireMoteur2(void)
{
  Moteur2.setSpeed((analogRead(A0) / 5) RPM);
  Moteur2.move(-CONTINUE);
}
void arretMoteur2(void)
{
  Moteur2.stop();
}

MTbutton boutonSensHoraireMoteur2(sensHoraireMoteur2, rotationSensHoraireMoteur2, arretMoteur2);
MTbutton boutonSensAntihoraireMoteur2(sensAntihoraireMoteur2, rotationSensAntihoraireMoteur2, arretMoteur2);


// Pour mettre autre chose?

void setup(){}

void loop(){}