/*
Rolladensteuerung
Toggle a Motor with two buttons
https://forum.arduino.cc/t/rolladensteuerung/1356419/4
2025-02-21 by noiasca
*/
#include "button.h"
class Motor {
private:
const uint8_t pinA; // the GPIO
const uint8_t pinB;
const uint8_t pinEnable;
enum State {IDLE, UP, DOWN} state; // is the motor off or moving up or down
void up() {
digitalWrite(pinA, HIGH);
digitalWrite(pinB, LOW);
digitalWrite(pinEnable, HIGH);
state = UP;
}
void down() {
digitalWrite(pinA, LOW);
digitalWrite(pinB, HIGH);
digitalWrite(pinEnable, HIGH);
state = DOWN;
}
void stop() {
digitalWrite(pinA, LOW);
digitalWrite(pinB, LOW);
digitalWrite(pinEnable, LOW);
state = IDLE;
}
public:
Motor (uint8_t pinA, uint8_t pinB, uint8_t pinEnable) : pinA(pinA), pinB(pinB), pinEnable(pinEnable) {}
void begin() { // call once in setup
pinMode(pinA, OUTPUT);
pinMode(pinB, OUTPUT);
pinMode(pinEnable, OUTPUT);
}
void checkUp() {
if (state == IDLE)
up();
else
stop();
}
void checkDown() {
if (state == IDLE)
down();
else
stop();
}
};
Motor motor {6, 7, 9};
Button buttonUp {4};
Button buttonDown {5};
void setup() {
Serial.begin(115200);
Serial.println("Startup");
motor.begin();
buttonUp.begin();
buttonDown.begin();
}
void loop() {
if (buttonUp.wasPressed()) motor.checkUp();
if (buttonDown.wasPressed()) motor.checkDown();
}
//