arduino stuffs
Diffstat (limited to 'car_driver/arduino/motor.h')
-rw-r--r--car_driver/arduino/motor.h36
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);
}