forked from mirobot/mirobot-arduino
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMirobot.h
92 lines (77 loc) · 1.94 KB
/
Mirobot.h
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#ifndef Mirobot_h
#define Mirobot_h
#include "Arduino.h"
#include "HotStepper.h"
#include "CmdProcessor.h"
#include <EEPROM.h>
#define STEPS_PER_TURN 2048.0
#define CIRCUMFERENCE_MM 251.3
#define STEPS_PER_MM STEPS_PER_TURN / CIRCUMFERENCE_MM
#define WHEEL_DISTANCE 126.0
#define STEPS_PER_DEGREE ((WHEEL_DISTANCE * 3.1416) / 360) * STEPS_PER_MM
#define WIFI_RESET 3
#define WIFI_READY 2
#define STATUS_LED 13
#define MIROBOT_VERSION "20141126"
#define MAGIC_BYTE_1 0xF0
#define MAGIC_BYTE_2 0x0D
#define SERVO_PIN 3
#define SERVO_PULSES 15
#define SPEAKER_PIN 9
#define NOTE_C4 262
#define LEFT_LINE_SENSOR A0
#define RIGHT_LINE_SENSOR A1
#define LEFT_COLLIDE_SENSOR A3
#define RIGHT_COLLIDE_SENSOR A2
typedef enum {POWERED_UP, CONNECTED} mainState_t;
typedef enum {UP, DOWN} penState_t;
typedef enum {NORMAL, RIGHT_REVERSE, RIGHT_TURN, LEFT_REVERSE, LEFT_TURN} collideState_t;
struct HwVersion {
byte major;
byte minor;
};
class Mirobot {
public:
Mirobot();
void setup();
void setup(Stream &s);
void forward(int distance);
void back(int distance);
void right(int angle);
void left(int angle);
void penup();
void pendown();
void pause();
void resume();
void stop();
void reset();
void follow();
void collide();
void beep(int);
void setHwVersion(char&);
boolean ready();
void process();
HwVersion hwVersion;
boolean blocking;
private:
void wait();
void followHandler();
void collideHandler();
void ledHandler();
void servoHandler();
void autoHandler();
void checkState();
void initHwVersion();
mainState_t mainState;
collideState_t collideState;
unsigned long lastLedChange;
Mirobot& self() { return *this; }
penState_t penState;
void setPenState(penState_t);
unsigned long next_servo_pulse;
unsigned char servo_pulses_left;
boolean paused;
boolean following;
boolean colliding;
};
#endif