Tommie Verouden / Mbed 2 deprecated StateMachine

Dependencies:   biquadFilter FastPWM MODSERIAL QEI mbed

Committer:
tverouden
Date:
Thu Nov 01 10:12:16 2018 +0000
Revision:
15:6566c5dedeeb
Parent:
12:323ac4e27a0d
Child:
16:c2986e890040
Implemented full state LED indication functionality

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tverouden 0:c0c35b95765f 1 // ≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡ PREPARATION ≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
tverouden 0:c0c35b95765f 2 // Libraries
tverouden 0:c0c35b95765f 3 #include "mbed.h"
tverouden 2:d70795e4e0bf 4 #include "BiQuad.h"
tverouden 0:c0c35b95765f 5 #include "FastPWM.h"
tverouden 0:c0c35b95765f 6 #include "HIDScope.h"
tverouden 0:c0c35b95765f 7 #include "MODSERIAL.h"
tverouden 0:c0c35b95765f 8
tverouden 8:8cef1050ebd9 9 // LEDs
tverouden 8:8cef1050ebd9 10 DigitalOut ledRed(LED_RED,1); // red LED K64F
tverouden 8:8cef1050ebd9 11 DigitalOut ledGreen(LED_GREEN,1); // green LED K64F
tverouden 8:8cef1050ebd9 12 DigitalOut ledBlue(LED_BLUE,1); // blue LED K64F
tverouden 8:8cef1050ebd9 13 // DigitalOut ledBio1(,1); // led 1 Biorobotics shield // LED pins
tverouden 15:6566c5dedeeb 14 // DigitalOut ledBio2(,1); // led 2 Biorobotics shield
tverouden 8:8cef1050ebd9 15
tverouden 11:2d1dfebae948 16 Ticker blinkTimer; // LED ticker
tverouden 8:8cef1050ebd9 17
tverouden 8:8cef1050ebd9 18 // Buttons/inputs
tverouden 4:5ce2c8864908 19 InterruptIn buttonBio1(D0); // button 1 BioRobotics shield
tverouden 4:5ce2c8864908 20 InterruptIn buttonBio2(D1); // button 2 BioRobotics shield
tverouden 0:c0c35b95765f 21 InterruptIn buttonK64F(SW3); // button on K64F
tverouden 8:8cef1050ebd9 22 InterruptIn buttonEmergency(SW2); // emergency button on K64F
tverouden 0:c0c35b95765f 23
tverouden 8:8cef1050ebd9 24 // Motor pins
tverouden 8:8cef1050ebd9 25
tverouden 8:8cef1050ebd9 26
tverouden 8:8cef1050ebd9 27 // PC communication
tverouden 4:5ce2c8864908 28 MODSERIAL pc(USBTX, USBRX); // communication with pc
tverouden 4:5ce2c8864908 29
tverouden 0:c0c35b95765f 30 // Define & initialise state machine
tverouden 11:2d1dfebae948 31 enum states { calibratingMotors, calibratingEMG,
tverouden 7:ef5966469621 32 homing, operating, reading, failing, demoing
tverouden 2:d70795e4e0bf 33 };
tverouden 11:2d1dfebae948 34 states currentState = calibratingMotors;// start in waiting mode
tverouden 11:2d1dfebae948 35 bool changeState = true; // initialise the first state
tverouden 2:d70795e4e0bf 36
tverouden 3:9c63fc5f157e 37
tverouden 3:9c63fc5f157e 38
tverouden 4:5ce2c8864908 39 // ≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡ FUNCTIONS ≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
tverouden 6:f32352bc5078 40 // ============================ GENERAL FUNCTIONS =============================
tverouden 6:f32352bc5078 41 void stopProgram(void)
tverouden 6:f32352bc5078 42 {
tverouden 6:f32352bc5078 43 // Error message
tverouden 6:f32352bc5078 44 pc.printf("[ERROR] emergency button pressed\r\n");
tverouden 6:f32352bc5078 45 currentState = failing; // change to state
tverouden 6:f32352bc5078 46 changeState = true; // next loop, switch states
tverouden 6:f32352bc5078 47 }
tverouden 8:8cef1050ebd9 48
tverouden 15:6566c5dedeeb 49 void blinkLedRed(void)
tverouden 15:6566c5dedeeb 50 {
tverouden 15:6566c5dedeeb 51 ledRed =! ledRed; // toggle LED
tverouden 10:584b7d2c2d63 52 }
tverouden 15:6566c5dedeeb 53 void blinkLedGreen(void)
tverouden 15:6566c5dedeeb 54 {
tverouden 15:6566c5dedeeb 55 ledGreen =! ledGreen; // toggle LED
tverouden 15:6566c5dedeeb 56 }
tverouden 15:6566c5dedeeb 57 void blinkLedBlue(void)
tverouden 15:6566c5dedeeb 58 {
tverouden 15:6566c5dedeeb 59 ledBlue =! ledBlue; // toggle LED
tverouden 15:6566c5dedeeb 60 }
tverouden 15:6566c5dedeeb 61
tverouden 6:f32352bc5078 62 // ============================ MOTOR FUNCTIONS ==============================
tverouden 4:5ce2c8864908 63
tverouden 4:5ce2c8864908 64
tverouden 4:5ce2c8864908 65 // ============================= EMG FUNCTIONS ===============================
tverouden 4:5ce2c8864908 66
tverouden 4:5ce2c8864908 67
tverouden 12:323ac4e27a0d 68 // ========================= KINEMATICS FUNCTIONS ============================
tverouden 12:323ac4e27a0d 69
tverouden 12:323ac4e27a0d 70
tverouden 2:d70795e4e0bf 71 // ≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡ STATE MACHINE ≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
tverouden 15:6566c5dedeeb 72 void stateMachine(void)
tverouden 3:9c63fc5f157e 73 {
tverouden 5:04b26b2f536a 74 switch (currentState) { // determine which state Odin is in // Van een aantal if statements moeten de conditions nog bepaald worden, niet vergeten
tverouden 3:9c63fc5f157e 75
tverouden 4:5ce2c8864908 76 // ========================= MOTOR CALIBRATION MODE ==========================
tverouden 4:5ce2c8864908 77 case calibratingMotors:
tverouden 4:5ce2c8864908 78 // ------------------------- initialisation --------------------------
tverouden 4:5ce2c8864908 79 if (changeState) { // when entering the state
tverouden 15:6566c5dedeeb 80 pc.printf("[MODE] calibrating motors...\r\n");
tverouden 5:04b26b2f536a 81 // print current state
tverouden 4:5ce2c8864908 82 changeState = false; // stay in this state
tverouden 4:5ce2c8864908 83
tverouden 4:5ce2c8864908 84 // Actions when entering state
tverouden 15:6566c5dedeeb 85 ledRed = 1; // cyan-green blinking LED
tverouden 15:6566c5dedeeb 86 ledGreen = 0;
tverouden 15:6566c5dedeeb 87 ledBlue = 0;
tverouden 15:6566c5dedeeb 88 blinkTimer.attach(&blinkLedBlue,0.5);
tverouden 4:5ce2c8864908 89
tverouden 4:5ce2c8864908 90 }
tverouden 4:5ce2c8864908 91 // ----------------------------- action ------------------------------
tverouden 5:04b26b2f536a 92 // Actions for each loop iteration
tverouden 5:04b26b2f536a 93 /* */
tverouden 4:5ce2c8864908 94
tverouden 4:5ce2c8864908 95 // --------------------------- transition ----------------------------
tverouden 15:6566c5dedeeb 96 // Transition condition #1: when all motor errors smaller than 0.01,
tverouden 15:6566c5dedeeb 97 // start calibrating EMG
tverouden 15:6566c5dedeeb 98 // if (errorMotorL < 0.01 && errorMotorR < 0.01
tverouden 15:6566c5dedeeb 99 // && errorMotorF < 0.01) {
tverouden 15:6566c5dedeeb 100 // // Actions when leaving state
tverouden 15:6566c5dedeeb 101 // blinkTimer.detach();
tverouden 15:6566c5dedeeb 102 //
tverouden 15:6566c5dedeeb 103 // currentState = calibratingEMG; // change to state
tverouden 15:6566c5dedeeb 104 // changeState = true; // next loop, switch states
tverouden 15:6566c5dedeeb 105 // }
tverouden 5:04b26b2f536a 106
tverouden 4:5ce2c8864908 107 break; // end case
tverouden 4:5ce2c8864908 108
tverouden 7:ef5966469621 109 // =========================== EMG CALIBRATION MODE ===========================
tverouden 7:ef5966469621 110 case calibratingEMG:
tverouden 4:5ce2c8864908 111 // ------------------------- initialisation --------------------------
tverouden 3:9c63fc5f157e 112 if (changeState) { // when entering the state
tverouden 4:5ce2c8864908 113 pc.printf("[MODE] calibrating EMG 1 (x-direction)...\r\n");
tverouden 5:04b26b2f536a 114 // print current state
tverouden 4:5ce2c8864908 115 changeState = false; // stay in this state
tverouden 4:5ce2c8864908 116
tverouden 4:5ce2c8864908 117 // Actions when entering state
tverouden 15:6566c5dedeeb 118 ledRed = 1; // cyan-blue blinking LED
tverouden 15:6566c5dedeeb 119 ledGreen = 0;
tverouden 15:6566c5dedeeb 120 ledBlue = 0;
tverouden 15:6566c5dedeeb 121 blinkTimer.attach(&blinkLedGreen,0.5);
tverouden 15:6566c5dedeeb 122
tverouden 4:5ce2c8864908 123
tverouden 4:5ce2c8864908 124 }
tverouden 4:5ce2c8864908 125 // ----------------------------- action ------------------------------
tverouden 5:04b26b2f536a 126 // Actions for each loop iteration
tverouden 5:04b26b2f536a 127 /* */
tverouden 4:5ce2c8864908 128
tverouden 4:5ce2c8864908 129 // --------------------------- transition ----------------------------
tverouden 7:ef5966469621 130 // Transition condition #1: after 20 sec in state
tverouden 7:ef5966469621 131 if (1) { // CONDITION
tverouden 4:5ce2c8864908 132 // Actions when leaving state
tverouden 15:6566c5dedeeb 133 blinkTimer.detach();
tverouden 5:04b26b2f536a 134
tverouden 4:5ce2c8864908 135 currentState = homing; // change to state
tverouden 4:5ce2c8864908 136 changeState = true; // next loop, switch states
tverouden 5:04b26b2f536a 137 }
tverouden 5:04b26b2f536a 138 break; // end case
tverouden 4:5ce2c8864908 139
tverouden 4:5ce2c8864908 140 // ============================== HOMING MODE ================================
tverouden 4:5ce2c8864908 141 case homing:
tverouden 7:ef5966469621 142 // ------------------------- initialisation -------------------------- // Evt. ook checken op snelheid als mensen zo dom zijn om tijdens homing op random knopjes te drukken
tverouden 4:5ce2c8864908 143 if (changeState) { // when entering the state
tverouden 4:5ce2c8864908 144 pc.printf("[MODE] homing...\r\n");
tverouden 5:04b26b2f536a 145 // print current state
tverouden 4:5ce2c8864908 146 changeState = false; // stay in this state
tverouden 4:5ce2c8864908 147
tverouden 4:5ce2c8864908 148
tverouden 4:5ce2c8864908 149 // Actions when entering state
tverouden 15:6566c5dedeeb 150 ledRed = 1; // cyan LED on
tverouden 15:6566c5dedeeb 151 ledGreen = 0;
tverouden 15:6566c5dedeeb 152 ledBlue = 0;
tverouden 4:5ce2c8864908 153
tverouden 4:5ce2c8864908 154 }
tverouden 4:5ce2c8864908 155 // ----------------------------- action ------------------------------
tverouden 5:04b26b2f536a 156 // Actions for each loop iteration
tverouden 5:04b26b2f536a 157 /* */
tverouden 4:5ce2c8864908 158
tverouden 7:ef5966469621 159 // --------------------------- transition ---------------------------- // Volgorde veranderen voor logica?
tverouden 4:5ce2c8864908 160 // Transition condition #1: with button press, enter demo mode
tverouden 4:5ce2c8864908 161 if (buttonBio1 == true) { // Het is niet nodig om hier ook nog "&& currentState == homing" toe te voegen, want hij bereikt dit stuk code alleen in homing mode
tverouden 4:5ce2c8864908 162 // Actions when leaving state
tverouden 4:5ce2c8864908 163 /* */
tverouden 5:04b26b2f536a 164
tverouden 4:5ce2c8864908 165 currentState = demoing; // change to state
tverouden 4:5ce2c8864908 166 changeState = true; // next loop, switch states
tverouden 4:5ce2c8864908 167 }
tverouden 4:5ce2c8864908 168 // Transition condition #2: with button press, enter operation mode
tverouden 4:5ce2c8864908 169 if (buttonBio2 == true) {
tverouden 4:5ce2c8864908 170 // Actions when leaving state
tverouden 4:5ce2c8864908 171 /* */
tverouden 5:04b26b2f536a 172
tverouden 4:5ce2c8864908 173 currentState = operating; // change to state
tverouden 4:5ce2c8864908 174 changeState = true; // next loop, switch states
tverouden 5:04b26b2f536a 175 }
tverouden 4:5ce2c8864908 176 break; // end case
tverouden 4:5ce2c8864908 177
tverouden 4:5ce2c8864908 178 // ============================= OPERATING MODE ==============================
tverouden 4:5ce2c8864908 179 case operating:
tverouden 4:5ce2c8864908 180 // ------------------------- initialisation --------------------------
tverouden 4:5ce2c8864908 181 if (changeState) { // when entering the state
tverouden 4:5ce2c8864908 182 pc.printf("[MODE] operating...\r\n");
tverouden 5:04b26b2f536a 183 // print current state
tverouden 5:04b26b2f536a 184 changeState = false; // stay in this state
tverouden 5:04b26b2f536a 185
tverouden 5:04b26b2f536a 186 // Actions when entering state
tverouden 15:6566c5dedeeb 187 ledRed = 1; // blue fast blinking LED
tverouden 15:6566c5dedeeb 188 ledGreen = 1;
tverouden 15:6566c5dedeeb 189 ledBlue = 1;
tverouden 15:6566c5dedeeb 190 blinkTimer.attach(&blinkLedBlue,0.25);
tverouden 5:04b26b2f536a 191
tverouden 5:04b26b2f536a 192 }
tverouden 5:04b26b2f536a 193 // ----------------------------- action ------------------------------
tverouden 5:04b26b2f536a 194 // Actions for each loop iteration
tverouden 5:04b26b2f536a 195 /* */
tverouden 5:04b26b2f536a 196
tverouden 5:04b26b2f536a 197 // --------------------------- transition ----------------------------
tverouden 7:ef5966469621 198 // Transition condition #1: with button press, back to homing mode // Is het nodig om vanuit operating mode naar homing mode terug te kunnen gaan? -> ja, voor als je een demo wilt starten
tverouden 5:04b26b2f536a 199 if (buttonBio2 == true) {
tverouden 5:04b26b2f536a 200 // Actions when leaving state
tverouden 15:6566c5dedeeb 201 blinkTimer.detach();
tverouden 5:04b26b2f536a 202
tverouden 5:04b26b2f536a 203 currentState = homing; // change to state
tverouden 5:04b26b2f536a 204 changeState = true; // next loop, switch states
tverouden 5:04b26b2f536a 205 }
tverouden 7:ef5966469621 206 // Transition condition #2: motor angle error < certain value,
tverouden 15:6566c5dedeeb 207 // start reading
tverouden 7:ef5966469621 208 if (1) { // CONDITION
tverouden 5:04b26b2f536a 209 // Actions when leaving state
tverouden 15:6566c5dedeeb 210 blinkTimer.detach();
tverouden 5:04b26b2f536a 211
tverouden 5:04b26b2f536a 212 currentState = homing; // change to state
tverouden 5:04b26b2f536a 213 changeState = true; // next loop, switch states
tverouden 5:04b26b2f536a 214 }
tverouden 5:04b26b2f536a 215 break; // end case
tverouden 5:04b26b2f536a 216
tverouden 7:ef5966469621 217 // ============================== READING MODE =============================== // Beweegt deze modus zowel heen als weer en zo ja, hoe bepaalt hij wat moet gebeuren?
tverouden 7:ef5966469621 218 case reading:
tverouden 5:04b26b2f536a 219 // ------------------------- initialisation --------------------------
tverouden 5:04b26b2f536a 220 if (changeState) { // when entering the state
tverouden 7:ef5966469621 221 pc.printf("[MODE] reading...\r\n");
tverouden 5:04b26b2f536a 222 // print current state
tverouden 5:04b26b2f536a 223 changeState = false; // stay in this state
tverouden 5:04b26b2f536a 224
tverouden 5:04b26b2f536a 225 // Actions when entering state
tverouden 15:6566c5dedeeb 226 ledRed = 1; // blue LED on
tverouden 15:6566c5dedeeb 227 ledGreen = 1;
tverouden 15:6566c5dedeeb 228 ledBlue = 0;
tverouden 5:04b26b2f536a 229
tverouden 5:04b26b2f536a 230 }
tverouden 5:04b26b2f536a 231 // ----------------------------- action ------------------------------
tverouden 5:04b26b2f536a 232 // Actions for each loop iteration
tverouden 5:04b26b2f536a 233 /* */
tverouden 5:04b26b2f536a 234
tverouden 5:04b26b2f536a 235 // --------------------------- transition ----------------------------
tverouden 7:ef5966469621 236 // Transition condition #1: with button press, back to homing mode // Hier automatisch terug naar operating mode!
tverouden 5:04b26b2f536a 237 if (1) { // En hij gaat nu terug naar homing mode, maar dan moet je dus elke keer weer kiezen voor demo of operation mode?
tverouden 7:ef5966469621 238 // Actions when leaving state // CONDITION
tverouden 5:04b26b2f536a 239 /* */
tverouden 5:04b26b2f536a 240
tverouden 5:04b26b2f536a 241 currentState = homing; // change to state
tverouden 5:04b26b2f536a 242 changeState = true; // next loop, switch states
tverouden 5:04b26b2f536a 243 }
tverouden 5:04b26b2f536a 244 break; // end case
tverouden 5:04b26b2f536a 245
tverouden 5:04b26b2f536a 246 // ============================== DEMOING MODE ===============================
tverouden 5:04b26b2f536a 247 case demoing:
tverouden 5:04b26b2f536a 248 // ------------------------- initialisation --------------------------
tverouden 5:04b26b2f536a 249 if (changeState) { // when entering the state
tverouden 5:04b26b2f536a 250 pc.printf("[MODE] demoing...\r\n");
tverouden 5:04b26b2f536a 251 // print current state
tverouden 5:04b26b2f536a 252 changeState = false; // stay in this state
tverouden 5:04b26b2f536a 253
tverouden 5:04b26b2f536a 254 // Actions when entering state
tverouden 15:6566c5dedeeb 255 ledRed = 0; // yellow LED on
tverouden 15:6566c5dedeeb 256 ledGreen = 0;
tverouden 15:6566c5dedeeb 257 ledBlue = 1;
tverouden 5:04b26b2f536a 258
tverouden 5:04b26b2f536a 259 }
tverouden 5:04b26b2f536a 260 // ----------------------------- action ------------------------------
tverouden 5:04b26b2f536a 261 // Actions for each loop iteration
tverouden 5:04b26b2f536a 262 /* */
tverouden 5:04b26b2f536a 263
tverouden 5:04b26b2f536a 264 // --------------------------- transition ----------------------------
tverouden 5:04b26b2f536a 265 // Transition condition #1: with button press, back to homing mode
tverouden 5:04b26b2f536a 266 if (1) {
tverouden 5:04b26b2f536a 267 // Actions when leaving state
tverouden 5:04b26b2f536a 268 /* */
tverouden 5:04b26b2f536a 269
tverouden 5:04b26b2f536a 270 currentState = homing; // change to state
tverouden 5:04b26b2f536a 271 changeState = true; // next loop, switch states
tverouden 5:04b26b2f536a 272 }
tverouden 15:6566c5dedeeb 273 // Transition condition #2: after 3 sec relaxation, start reading
tverouden 5:04b26b2f536a 274 if (1) {
tverouden 5:04b26b2f536a 275 // Actions when leaving state
tverouden 5:04b26b2f536a 276 /* */
tverouden 5:04b26b2f536a 277
tverouden 7:ef5966469621 278 currentState = reading; // change to state
tverouden 5:04b26b2f536a 279 changeState = true; // next loop, switch states
tverouden 5:04b26b2f536a 280 }
tverouden 5:04b26b2f536a 281 break; // end case
tverouden 5:04b26b2f536a 282
tverouden 5:04b26b2f536a 283 // =============================== FAILING MODE ================================
tverouden 5:04b26b2f536a 284 case failing:
tverouden 5:04b26b2f536a 285 // ------------------------- initialisation --------------------------
tverouden 5:04b26b2f536a 286 if (changeState) { // when entering the state
tverouden 5:04b26b2f536a 287 pc.printf("[ERROR] entering failure mode\r\n");
tverouden 15:6566c5dedeeb 288 // print current state
tverouden 3:9c63fc5f157e 289 changeState = false; // stay in this state
tverouden 3:9c63fc5f157e 290
tverouden 3:9c63fc5f157e 291 // Actions when entering state
tverouden 15:6566c5dedeeb 292 ledGreen = 1; // fast blinking red LED
tverouden 6:f32352bc5078 293 ledBlue = 1;
tverouden 6:f32352bc5078 294 ledRed = 0;
tverouden 15:6566c5dedeeb 295 blinkTimer.attach(&blinkLedRed,0.25);
tverouden 4:5ce2c8864908 296
tverouden 6:f32352bc5078 297 // pin3 = 0; // all motor forces to zero // Pins nog niet gedefiniëerd
tverouden 6:f32352bc5078 298 // pin5 = 0;
tverouden 6:f32352bc5078 299 // pin6 = 0;
tverouden 6:f32352bc5078 300 exit (0); // abort mission
tverouden 4:5ce2c8864908 301 }
tverouden 4:5ce2c8864908 302 break; // end case
tverouden 4:5ce2c8864908 303
tverouden 4:5ce2c8864908 304 // ============================== DEFAULT MODE =================================
tverouden 3:9c63fc5f157e 305 default:
tverouden 4:5ce2c8864908 306 // ---------------------------- enter failing mode -----------------------------
tverouden 4:5ce2c8864908 307 currentState = failing; // change to state
tverouden 4:5ce2c8864908 308 changeState = true; // next loop, switch states
tverouden 4:5ce2c8864908 309 // print current state
tverouden 4:5ce2c8864908 310 pc.printf("[ERROR] unknown or unimplemented state reached\r\n");
tverouden 3:9c63fc5f157e 311
tverouden 4:5ce2c8864908 312 } // end switch
tverouden 4:5ce2c8864908 313 } // end stateMachine
tverouden 3:9c63fc5f157e 314
tverouden 3:9c63fc5f157e 315
tverouden 2:d70795e4e0bf 316
tverouden 2:d70795e4e0bf 317 // ≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡ MAIN LOOP ≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
tverouden 2:d70795e4e0bf 318
tverouden 3:9c63fc5f157e 319 int main()
tverouden 3:9c63fc5f157e 320 {
tverouden 8:8cef1050ebd9 321 // ================================ EMERGENCY ================================
tverouden 15:6566c5dedeeb 322 //If the emergency button is pressed, stop program via failing state
tverouden 8:8cef1050ebd9 323 buttonEmergency.rise(stopProgram); // Automatische triggers voor failure mode?
tverouden 15:6566c5dedeeb 324
tverouden 15:6566c5dedeeb 325 // ================================ EMERGENCY ================================
tverouden 8:8cef1050ebd9 326 pc.baud(115200); // communication with terminal // Baud rate
tverouden 6:f32352bc5078 327
tverouden 2:d70795e4e0bf 328 // ==================================== LOOP ===================================
tverouden 2:d70795e4e0bf 329 while (true) { // loop forever
tverouden 15:6566c5dedeeb 330 stateMachine();
tverouden 2:d70795e4e0bf 331 }
tverouden 2:d70795e4e0bf 332 }