#ifndef MOTOR_H
#define MOTOR_H
class Motor {
private:
uint8_t pin, brake_pin, speed_pin;
// @param direction LOW is backwards, HIGH is forward
// @param speed 0-255
void set(int8_t direction, uint8_t speed) {
digitalWrite(pin, direction);
digitalWrite(brake_pin, LOW); // brake off
analogWrite(speed_pin, speed); // speed up
}
public:
// @param speed -100-100, the speed to go at, negative = backwards
void speed(int8_t speed) {
if (speed == 0)
brake();
else if (speed < 0)
backward(abs(speed) + 155); // negative number: -100 + 355 = 255
else
forward(speed + 155); // positive number: 100 + 155 = 255
}
void brake() {
digitalWrite(brake_pin, HIGH); // engage brake
analogWrite(speed_pin, 0); // slow
}
inline void forward(uint8_t speed) { set(HIGH, speed); }
inline void backward(uint8_t speed) { set(LOW, speed); }
void begin() {
pinMode(pin, OUTPUT);
pinMode(brake_pin, OUTPUT);
}
Motor(const uint8_t _pin, const uint8_t _brake_pin, const uint8_t _speed_pin) {
pin = _pin, brake_pin = _brake_pin, speed_pin = _speed_pin;
}
};
#endif