arduino stuffs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#define MotorA 12 // left motor
#define BrakeMotorA 9
#define MotorASpeed 3

#define MotorB 13 // right motor
#define BrakeMotorB 8
#define MotorBSpeed 11

void begin() {
  // Setup Channel A
  pinMode(MotorA, OUTPUT);
  pinMode(BrakeMotorA, OUTPUT);

  // Setup Channel B
  pinMode(MotorB, OUTPUT);
  pinMode(BrakeMotorB, OUTPUT);
}

// @param direction LOW is backwards, HIGH is forward
// @param speed 0-255
void motor(int motorpin, int motorbrake, int motorspeed, int direction,
           int speed) {
  digitalWrite(motorpin, direction);
  digitalWrite(motorbrake, LOW);  // brake off
  analogWrite(motorspeed, speed); // speed up
}

void motorAForward(int speed) {
  motor(MotorA, BrakeMotorA, MotorASpeed, HIGH, speed);
}

void motorBForward(int speed) {
  motor(MotorB, BrakeMotorB, MotorBSpeed, HIGH, speed);
}

void motorBBackward(int speed) {
  motor(MotorB, BrakeMotorB, MotorBSpeed, LOW, speed);
}

void motorABackward(int speed) {
  motor(MotorA, BrakeMotorA, MotorASpeed, LOW, speed);
}

void brakeMotorA() {
  digitalWrite(brakeMotorA, HIGH); // engage brake
  analogWrite(MotorASpeed, 0);     // slow
}

void brakeMotorB() {
  digitalWrite(brakeMotorB, HIGH); // engage brake
  analogWrite(MotorBSpeed, 0);     // slow
}

void stop() {
  brakeMotorA();
  brakeMotorB();
}