MTobjets: Example 9
Event management for Uno, Nano, Mega
2 steppers and 4 buttons
Problem posed
See on a forum:
I have recovered a code that allows you to run a stepper motor with 2 push buttons, tested on a Nano with a ULM2003 driver.
Is it possible on a Nano to have 4 buttons (2 forwards 2 rear) and 2 motors that would have separate controls and the same speed?
Complete program recommended
This program is completely under interruption, and releases loop which can be used to do something else.
// 2 stepper motors and 4 buttons. For each motor we have a button for
// running in a direction and a button for runing it in the other. The two
// motors are independents.
// A potentiometer sets the speed between 0 and 200 RPM
// See https://forum.arduino.cc/t/2-moteur-pas-a-pas-4-boutons/1384039
#include <MTobjects.h> // V1.0.6 See http://arduino.dansetrad.fr/en/MTobjects
const uint8_t clockwiseMotor1 = A1; // Clockwise button pin number
const uint8_t antiClockwiseMotor1 = A2; // Anti-clockwise button pin number
const uint8_t clockwiseMotor2 = A3; // Clockwise button pin number
const uint8_t antiClockwiseMotor2 = A4; // Anti-clockwise button pin number
// *************************** For the first motor *************************************
MTstepStepper Motor1(pin_Step 2, pin_Dir 5, pin_EN 8, accelerations_of 0 step_or_micro_step);
void clockwiseMotorRotation1(void)
{
Motor1.setSpeed((analogRead(A0) / 5) RPM);
Motor1.move(CONTINUE);
}
void antiClockwiseMotorRotation1(void)
{
Motor1.setSpeed((analogRead(A0) / 5) RPM);
Motor1.move(-CONTINUE);
}
void stopMotor1(void)
{
Motor1.stop();
}
MTbutton clockwiseMotorButton1(clockwiseMotor1, clockwiseMotorRotation1, stopMotor1);
MTbutton antiClockwiseMotorButton1(antiClockwiseMotor1, antiClockwiseMotorRotation1, stopMotor1);
// *************************** For the second motor ************************************
MTstepStepper Motor2(pin_Step 3, pin_Dir 6, pin_EN 8, accelerations_of 0 step_or_micro_step);
void clockwiseMotorRotation2(void)
{
Motor2.setSpeed((analogRead(A0) / 5) RPM);
Motor2.move(CONTINUE);
}
void antiClockwiseMotorRotation2(void)
{
Motor2.setSpeed((analogRead(A0) / 5) RPM);
Motor2.move(-CONTINUE);
}
void stopMotor2(void)
{
Motor2.stop();
}
MTbutton clockwiseMotorButton2(clockwiseMotor2, clockwiseMotorRotation2, stopMotor2);
MTbutton antiClockwiseMotorButton2(antiClockwiseMotor2, antiClockwiseMotorRotation2, stopMotor2);
// To put something else?
void setup(){}
void loop(){}