Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: biquadFilter MODSERIAL QEI mbed
Fork of StateMachineEMGisAFditisemcasper1643 by
Diff: main.cpp
- Revision:
- 0:90750f158475
- Child:
- 1:070092564648
diff -r 000000000000 -r 90750f158475 main.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Wed Oct 31 14:15:54 2018 +0000
@@ -0,0 +1,209 @@
+//Voor het toevoegen van een button:
+#include "mbed.h"
+#include <iostream>
+DigitalOut gpo(D0);
+
+DigitalIn button2(SW3);
+DigitalIn button1(SW2); //or SW2
+
+DigitalOut led1(LED_GREEN);
+DigitalOut led2(LED_RED);
+DigitalOut led3(LED_BLUE);
+
+Timer t;
+
+enum states {MOTORS_OFF,CALIBRATION,HOMING,DEMO,MOVEMENT,CLICK};
+int f = 1;
+states currentState = MOTORS_OFF;
+bool stateChanged = true; // Make sure the initialization of first state is executed
+
+void ProcessStateMachine(void)
+{
+ switch (currentState)
+ {
+ case MOTORS_OFF:
+ // Actions
+ if (stateChanged)
+ {
+ // state initialization: rood
+ led1 = 1;
+ led2 = 0;
+ led3 = 1;
+ wait (1);
+ stateChanged = false;
+ }
+
+ // State transition logic: Als button 1 word ingedrukt --> calibratie, anders motor uithouden
+ if (!button1)
+ {
+ currentState = CALIBRATION;
+ stateChanged = true;
+ }
+ else if (!button2)
+ {
+ currentState = HOMING ;
+ stateChanged = true;
+ }
+ else
+ {
+ currentState = MOTORS_OFF;
+ stateChanged = true;
+ }
+
+ break;
+
+ case CALIBRATION:
+ // Actions
+ if (stateChanged)
+ {
+ // state initialization: oranje
+ led1 = 0;
+ led2 = 0;
+ led3 = 1;
+ wait (1);
+
+ stateChanged = false;
+ }
+
+ // State transition logic: automatisch terug naar motors off.
+
+ currentState = MOTORS_OFF;
+ stateChanged = true;
+ break;
+
+ case HOMING:
+ // Actions
+ if (stateChanged)
+ {
+ // state initialization: green
+ t.start();
+ led1 = 0;
+ led2 = 1;
+ led3 = 1;
+ wait (1);
+
+ stateChanged = false;
+ }
+
+ // State transition logic: naar DEMO (button1), naar MOVEMENT(button2)
+ if (!button1)
+ {
+ currentState = DEMO;
+ stateChanged = true;
+ }
+ else if (!button2)
+ {
+ currentState = MOVEMENT ;
+ stateChanged = true;
+ }
+ else if (t>300)
+ {
+ t.stop();
+ t.reset();
+ currentState = MOTORS_OFF ;
+ stateChanged = true;
+ }
+ else
+ {
+ currentState = HOMING ;
+ stateChanged = true;
+ }
+ break;
+
+ case DEMO:
+ // Actions
+ if (stateChanged)
+ {
+ // state initialization: light blue
+ led1 = 0;
+ led2 = 1;
+ led3 = 0;
+ wait (1);
+
+ stateChanged = false;
+ }
+
+ // State transition logic: automatisch terug naar HOMING
+ currentState = HOMING;
+ stateChanged = true;
+ break;
+
+ case MOVEMENT:
+ // Actions
+ if (stateChanged)
+ {
+ // state initialization: purple
+ t.start();
+ led1 = 1;
+ led2 = 0;
+ led3 = 0;
+ wait (1);
+
+ stateChanged = false;
+ }
+
+ // State transition logic: naar CLICK (button1), naar MOTORS_OFF(button2) anders naar MOVEMENT
+ if (!button1)
+ {
+ currentState = CLICK;
+ stateChanged = true;
+ }
+ else if (!button2)
+ {
+ currentState = MOTORS_OFF ;
+ stateChanged = true;
+ }
+ else if (t>300)
+ {
+ t.stop();
+ t.reset();
+ currentState = HOMING ;
+ stateChanged = true;
+ }
+ else
+ {
+ currentState = MOVEMENT ;
+ stateChanged = true;
+ }
+ break;
+
+ case CLICK:
+ // Actions
+ if (stateChanged)
+ {
+ // state initialization: blue
+ led1 = 1;
+ led2 = 1;
+ led3 = 0;
+ wait (1);
+
+ stateChanged = false;
+ }
+
+ // State transition logic: automatisch terug naar MOVEMENT.
+
+ currentState = MOVEMENT;
+ stateChanged = true;
+ break;
+
+}
+}
+
+int main()
+{
+ while (true)
+ {
+ led1 = 1;
+ led2 = 1;
+ led3 = 1;
+ ProcessStateMachine();
+
+ }
+
+}
+
+
+
+
+
+
