arduino stuffs
Diffstat (limited to 'car_driver/arduino/motor.h')
| -rw-r--r-- | car_driver/arduino/motor.h | 36 |
1 files changed, 27 insertions, 9 deletions
diff --git a/car_driver/arduino/motor.h b/car_driver/arduino/motor.h index cfc05e4..cc57f72 100644 --- a/car_driver/arduino/motor.h +++ b/car_driver/arduino/motor.h @@ -1,22 +1,40 @@ #ifndef MOTOR_H #define MOTOR_H -#include "motor_utils.h" - -struct Motor { +class Motor { +private: int pin; int brake_pin; int speed_pin; - inline void forward(int8_t speed) { - motor_utils::set(pin, brake_pin, speed_pin, HIGH, speed); + // @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 } - inline void backward(int8_t speed) { - motor_utils::set(pin, brake_pin, speed_pin, LOW, speed); + +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 } - inline void brake() { motor_utils::brake(brake_pin, speed_pin); } - inline void begin() { + 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); } |