MRMS
mrm-robot.h
1 #pragma once
2 #include <mrm-action.h>
3 #include <mrm-can-bus.h>
4 #include <mrm-col-b.h>
5 
6 #define ACTIONS_LIMIT 80 // Increase if more actions are needed.
7 #define BOARDS_LIMIT 25 // Maximum number of different board types.
8 #define LED_ERROR 15 // mrm-esp32's pin number, hardware defined.
9 #define LED_OK 2 // mrm-esp32's pin number, hardware defined.
10 
11 // Forward declarations
12 
13 class Mrm_8x8a;
14 class Mrm_bldc2x50;
15 class Mrm_bldc4x2_5;
16 class Mrm_can_bus;
17 class Mrm_col_can;
18 class Mrm_fet_can;
19 class Mrm_imu;
20 // class Mrm_ir_finder2;
21 // class Mrm_ir_finder_can;
22 class Mrm_ir_finder3;
23 class Mrm_lid_can_b;
24 class Mrm_lid_can_b2;
25 class Mrm_mot2x50;
26 class Mrm_mot4x10;
27 class Mrm_mot4x3_6can;
28 class Mrm_node;
29 class Mrm_ref_can;
30 class Mrm_servo;
31 class Mrm_switch;
32 class Mrm_therm_b_can;
33 //class Mrm_us;
34 class Mrm_us_b;
35 class Mrm_us1;
36 #if RADIO == 2
37 #include "WiFi.h"
38 #endif
39 
42 class Robot {
43 
44 protected:
45 
46  ActionBase* _action[ACTIONS_LIMIT]; // Collection of all the robot's actions
47  uint8_t _actionNextFree = 0;
48 
49  // Robot's actions that can be callect directly, not just by iterating _action collection
50  ActionBase* _actionCANBusStress;
51  ActionBase* _actionCurrent;
52  ActionBase* _actionDoNothing;
53  ActionBase* _actionLoop;
54  ActionBase* _actionMenuMain;
55  ActionBase* _actionPrevious;
56  ActionBase* _actionStop;
57 
58  Board* board[BOARDS_LIMIT]; // Collection of all the robot's boards
59  uint8_t _boardNextFree = 0;
60 
61  uint8_t _devicesAtStartup = 0;
62  bool _devicesScanBeforeMenu = true;
63 
64  // FPS - frames per second calculation
65  uint32_t fpsMs[2] = { 0, 0 };
66  uint8_t fpsNextIndex = 0;
67  uint32_t fpsTopGap = 0;
68 
69  uint8_t menuLevel = 1; // Submenus have bigger numbers
70  CANBusMessage* _msg;
71  char _name[16];
72  bool _sniff = false;
73  char _ssid[16];
74  bool verbose = false; // Verbose output
75 #if RADIO == 2
76  WiFiServer* webServer;
77 #endif
78  char _wiFiPassword[16];
79 
82  void actionProcess();
83 
86  void actionSet();
87 
91  void actionSet(ActionBase* newAction);
92 
96  uint8_t boardsDisplayAll();
97 
105  bool boardDisplayAndSelect(uint8_t* selectedBoardIndex, uint8_t* selectedDeviceIndex, uint8_t* maxInput, uint8_t* lastBoardAndIndex);
106 
114  bool boardSelect(uint8_t selectedNumber, uint8_t *selectedBoardIndex, uint8_t* selectedDeviceIndex, uint8_t* maxInput);
115 
118  void fpsPause();
119 
122  void fpsUpdate();
123 
126  void fpsReset();
127 
130  void verbosePrint();
131 
134  void vprint(const char* fmt, va_list argp);
135 
136 public:
137 
138  Mrm_can_bus* mrm_can_bus; // CANBus interface
139 
140  Mrm_8x8a* mrm_8x8a;
141  Mrm_bldc2x50* mrm_bldc2x50;
142  Mrm_bldc4x2_5* mrm_bldc4x2_5;
143  Mrm_col_b* mrm_col_b;
144  Mrm_col_can* mrm_col_can;
145  Mrm_fet_can* mrm_fet_can;
146  Mrm_imu* mrm_imu;
147  // Mrm_ir_finder2* mrm_ir_finder2;
148  Mrm_ir_finder3* mrm_ir_finder3;
149  // Mrm_ir_finder_can* mrm_ir_finder_can;
150  Mrm_lid_can_b* mrm_lid_can_b;// 10
151  Mrm_lid_can_b2* mrm_lid_can_b2;
152  Mrm_mot2x50* mrm_mot2x50;
153  Mrm_mot4x3_6can* mrm_mot4x3_6can;
154  Mrm_mot4x10* mrm_mot4x10;
155  Mrm_node* mrm_node;
156  Mrm_ref_can* mrm_ref_can;
157  Mrm_servo* mrm_servo;
158  Mrm_switch* mrm_switch;
159  Mrm_therm_b_can* mrm_therm_b_can;
160  // Mrm_us* mrm_us;
161  Mrm_us_b* mrm_us_b;
162  Mrm_us1* mrm_us1;
163 
166  Robot(char name[15] = (char*)"MRMS robot", char ssid[15] = (char*)"MRMS", char wiFiPassword[15] = (char*)"mrms");
167 
171  void actionAdd(ActionBase* action);
172 
175  void actionEnd() { _actionCurrent = NULL; }
176 
181  bool actionPreprocessing(bool andFinish = true);
182 
185  void actionPreprocessingEnd() { _actionCurrent->preprocessingEnd(); }
186 
190  void add(Board* aBoard);
191 
194  virtual void bitmapsSet() = 0;
195 
198  void blink();
199 
202  void bluetoothTest();
203 
206  void end() { actionEnd(); }
207 
208 
211  void canBusSniffToggle();
212 
215  void canIdChange();
216 
219  void colorIlluminationOff();
220 
223  void colorIlluminationOn();
224 
227  void colorPatternErase();
228 
231  void colorPatternPrint();
232 
235  void colorPatternRecognize();
236 
239  void colorPatternRecord();
240 
244  void delayMs(uint16_t pauseMs);
245 
249  void delayMicros(uint16_t pauseMicros);
250 
255  uint8_t devicesScan(bool verbose);
256 
259  void devicesStart(uint8_t measuringMode = 0);
260 
263  void devicesStop();
264 
267  void errors();
268 
271  void firmwarePrint();
272 
276  float fpsGet();
277 
280  void fpsPrint();
281 
284  virtual void goAhead() = 0;
285 
288  void i2cTest();
289 
292  void info();
293 
296  void irFinder3Test();
297 
301 
304  void lidar2mTest();
305 
308  void lidar4mTest();
309 
312  void lidarCalibrate();
313 
316  virtual void loop() = 0;
317 
320  void menu();
321 
324  void menuColor();
325 
328  void menuMainAndIdle();
329 
332  void menuReflectance();
333 
336  void menuSystem();
337 
342  void messagePrint(CANBusMessage* msg, bool outbound);
343 
346  void messagesReceive();
347 
350  void motorTest();
351 
354  void nodeTest();
355 
358  void noLoopWithoutThis();
359 
362  void oscillatorTest();
363 
367 
370  void run();
371 
380  uint16_t serialReadNumber(uint16_t timeoutFirst = 3000, uint16_t timeoutBetween = 500, bool onlySingleDigitInput = false, uint16_t limit = 0xFFFE, bool printWarnings = true);
381 
384  void servoInteractive();
385 
390  bool setup(bool andFinish = true) {
391  return actionPreprocessing(andFinish);
392  }
393 
397  bool sniffing() { return _sniff; }
398 
401  void stopAll();
402 
405  bool stressTest();
406 
409  void thermoTest();
410 
414  bool userBreak();
415 
418  void verboseToggle();
419 #if RADIO == 2
422  void web();
423 #endif
424 };
Definition: mrm-action.h:7
Definition: mrm-board.h:60
Definition: mrm-8x8a.h:60
Definition: mrm-bldc2x50.h:33
Definition: mrm-bldc4x2.5.h:31
Definition: mrm-can-bus.h:12
Definition: mrm-col-b.h:50
Definition: mrm-col-can.h:48
Definition: mrm-fet-can.h:33
Definition: mrm-imu.h:22
Definition: mrm-ir-finder3.h:39
Definition: mrm-lid-can-b2.h:56
Definition: mrm-lid-can-b.h:54
Definition: mrm-mot2x50.h:32
Definition: mrm-mot4x10.h:31
Definition: mrm-mot4x3.6can.h:32
Definition: mrm-node.h:42
Definition: mrm-ref-can.h:51
Definition: mrm-servo.h:20
Definition: mrm-switch.h:16
Definition: mrm-therm-b-can.h:33
Definition: mrm-us1.h:33
Definition: mrm-us-b.h:33
Definition: mrm-robot.h:42
void run()
Definition: mrm-robot.cpp:1121
void colorPatternErase()
Definition: mrm-robot.cpp:633
void messagesReceive()
Definition: mrm-robot.cpp:1037
void lidar2mTest()
Definition: mrm-robot.cpp:854
void thermoTest()
Definition: mrm-robot.cpp:1307
void colorIlluminationOn()
Definition: mrm-robot.cpp:623
bool boardDisplayAndSelect(uint8_t *selectedBoardIndex, uint8_t *selectedDeviceIndex, uint8_t *maxInput, uint8_t *lastBoardAndIndex)
Definition: mrm-robot.cpp:516
void menu()
Definition: mrm-robot.cpp:933
void firmwarePrint()
Definition: mrm-robot.cpp:734
uint8_t devicesScan(bool verbose)
Definition: mrm-robot.cpp:693
void devicesStart(uint8_t measuringMode=0)
Definition: mrm-robot.cpp:707
void blink()
Definition: mrm-robot.cpp:455
void reflectanceArrayCalibrationPrint()
Definition: mrm-robot.cpp:1113
void irFinder3TestCalculated()
Definition: mrm-robot.cpp:846
void fpsUpdate()
Definition: mrm-robot.cpp:792
void menuColor()
Definition: mrm-robot.cpp:986
void fpsReset()
Definition: mrm-robot.cpp:783
virtual void loop()=0
void verbosePrint()
Definition: mrm-robot.cpp:1330
void actionPreprocessingEnd()
Definition: mrm-robot.h:185
void actionAdd(ActionBase *action)
Definition: mrm-robot.cpp:332
void delayMicros(uint16_t pauseMicros)
Definition: mrm-robot.cpp:680
void fpsPrint()
Definition: mrm-robot.cpp:767
void errors()
Definition: mrm-robot.cpp:723
void colorIlluminationOff()
Definition: mrm-robot.cpp:613
void actionSet()
Definition: mrm-robot.cpp:366
void noLoopWithoutThis()
Definition: mrm-robot.cpp:1085
virtual void bitmapsSet()=0
float fpsGet()
Definition: mrm-robot.cpp:746
void menuMainAndIdle()
Definition: mrm-robot.cpp:993
void stopAll()
Definition: mrm-robot.cpp:1202
void lidarCalibrate()
Definition: mrm-robot.cpp:888
void add(Board *aBoard)
Definition: mrm-robot.cpp:445
void nodeTest()
Definition: mrm-robot.cpp:1077
void lidar4mTest()
Definition: mrm-robot.cpp:880
void bluetoothTest()
Definition: mrm-robot.cpp:569
void i2cTest()
Definition: mrm-robot.cpp:804
void messagePrint(CANBusMessage *msg, bool outbound)
Definition: mrm-robot.cpp:1016
void end()
Definition: mrm-robot.h:206
void motorTest()
Definition: mrm-robot.cpp:1067
void verboseToggle()
Definition: mrm-robot.cpp:1342
void canBusSniffToggle()
Definition: mrm-robot.cpp:579
void colorPatternRecognize()
Definition: mrm-robot.cpp:663
void actionEnd()
Definition: mrm-robot.h:175
void devicesStop()
Definition: mrm-robot.cpp:714
uint16_t serialReadNumber(uint16_t timeoutFirst=3000, uint16_t timeoutBetween=500, bool onlySingleDigitInput=false, uint16_t limit=0xFFFE, bool printWarnings=true)
Definition: mrm-robot.cpp:1140
uint8_t boardsDisplayAll()
Definition: mrm-robot.cpp:486
void canIdChange()
Definition: mrm-robot.cpp:590
void irFinder3Test()
Definition: mrm-robot.cpp:838
void servoInteractive()
Definition: mrm-robot.cpp:1195
void delayMs(uint16_t pauseMs)
Definition: mrm-robot.cpp:670
bool actionPreprocessing(bool andFinish=true)
Definition: mrm-robot.cpp:344
void info()
Definition: mrm-robot.cpp:828
void menuSystem()
Definition: mrm-robot.cpp:1007
bool setup(bool andFinish=true)
Definition: mrm-robot.h:390
bool userBreak()
Definition: mrm-robot.cpp:1316
void vprint(const char *fmt, va_list argp)
void colorPatternPrint()
Definition: mrm-robot.cpp:643
bool sniffing()
Definition: mrm-robot.h:397
void oscillatorTest()
Definition: mrm-robot.cpp:1098
virtual void goAhead()=0
bool boardSelect(uint8_t selectedNumber, uint8_t *selectedBoardIndex, uint8_t *selectedDeviceIndex, uint8_t *maxInput)
Definition: mrm-robot.cpp:540
void fpsPause()
Definition: mrm-robot.cpp:760
void colorPatternRecord()
Definition: mrm-robot.cpp:653
void menuReflectance()
Definition: mrm-robot.cpp:1000
void actionProcess()
Definition: mrm-robot.cpp:353
bool stressTest()
Definition: mrm-robot.cpp:1212
Definition: mrm-can-bus.h:4