statemachine opzet

Dependencies:   MODSERIAL

Files at this revision

API Documentation at this revision

Comitter:
onnoderkman
Date:
Wed Oct 31 10:47:46 2018 +0000
Commit message:
State machine opzet. Overgangen van state naar state zijn nog niet compleet.

Changed in this revision

.gitignore Show annotated file Show diff for this revision Revisions of this file
MODSERIAL.lib Show annotated file Show diff for this revision Revisions of this file
README.md Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-os.lib Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.gitignore	Wed Oct 31 10:47:46 2018 +0000
@@ -0,0 +1,4 @@
+.build
+.mbed
+projectfiles
+*.py*
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MODSERIAL.lib	Wed Oct 31 10:47:46 2018 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/Sissors/code/MODSERIAL/#a3b2bc878529
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/README.md	Wed Oct 31 10:47:46 2018 +0000
@@ -0,0 +1,57 @@
+# Getting started with Blinky on mbed OS
+
+This guide reviews the steps required to get Blinky working on an mbed OS platform.
+
+Please install [mbed CLI](https://github.com/ARMmbed/mbed-cli#installing-mbed-cli).
+
+## Import the example application
+
+From the command-line, import the example:
+
+```
+mbed import mbed-os-example-blinky
+cd mbed-os-example-blinky
+```
+
+### Now compile
+
+Invoke `mbed compile`, and specify the name of your platform and your favorite toolchain (`GCC_ARM`, `ARM`, `IAR`). For example, for the ARM Compiler 5:
+
+```
+mbed compile -m K64F -t ARM
+```
+
+Your PC may take a few minutes to compile your code. At the end, you see the following result:
+
+```
+[snip]
++----------------------------+-------+-------+------+
+| Module                     | .text | .data | .bss |
++----------------------------+-------+-------+------+
+| Misc                       | 13939 |    24 | 1372 |
+| core/hal                   | 16993 |    96 |  296 |
+| core/rtos                  |  7384 |    92 | 4204 |
+| features/FEATURE_IPV4      |    80 |     0 |  176 |
+| frameworks/greentea-client |  1830 |    60 |   44 |
+| frameworks/utest           |  2392 |   512 |  292 |
+| Subtotals                  | 42618 |   784 | 6384 |
++----------------------------+-------+-------+------+
+Allocated Heap: unknown
+Allocated Stack: unknown
+Total Static RAM memory (data + bss): 7168 bytes
+Total RAM memory (data + bss + heap + stack): 7168 bytes
+Total Flash memory (text + data + misc): 43402 bytes
+Image: .\.build\K64F\ARM\mbed-os-example-blinky.bin
+```
+
+### Program your board
+
+1. Connect your mbed device to the computer over USB.
+1. Copy the binary file to the mbed device.
+1. Press the reset button to start the program.
+
+The LED on your platform turns on and off.
+
+## Troubleshooting
+
+If you have problems, you can review the [documentation](https://os.mbed.com/docs/latest/tutorials/debugging.html) for suggestions on what could be wrong and how to fix it.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Oct 31 10:47:46 2018 +0000
@@ -0,0 +1,166 @@
+#include "mbed.h"
+#include "MODSERIAL.h"
+
+DigitalOut ledr(LED1);
+DigitalOut ledg(LED2);
+DigitalOut ledb(LED3);
+DigitalIn button1(SW2);
+DigitalIn button2(SW3);
+MODSERIAL pc(USBTX, USBRX);
+enum states{WAITING, EMG_CAL, BCM, FAIL};
+states CurrentState = WAITING;
+bool StateChanged = true;
+volatile int x = 0;
+bool failure = false;
+
+void ProcessStateMachine(void)
+{
+    switch(CurrentState)
+    {
+        case WAITING: //This state is used to only start calibrating upon user input
+            //State initialization
+            if(StateChanged) 
+            {
+                pc.printf("Entering WAITING\r\n");
+                ledr = 0;
+                ledg = 1;
+                ledb = 1;
+                StateChanged = false;
+            }
+            //State actions
+            pc.printf("Still WAITING\r\n"); 
+            while(button1)
+            {
+            }
+            //State transition  
+            CurrentState = EMG_CAL;
+            StateChanged = true;
+            break; // End of WAITING
+        case EMG_CAL: //State for calibrating EMG channels
+            //State initialization
+            if(StateChanged) 
+            {
+                pc.printf("Entering EMG calibration\r\n");
+                x = 0;
+                ledr = 1;
+                ledg = 0;
+                ledb = 1;
+                StateChanged = false;
+            }
+            //State actions
+            pc.printf("EMG calibration starting\r\n");
+            wait(0.3f); //Dit moet nog veranderd worden naar timer die opneemt hoe lang hij in WAITING zit.
+            // calibratiestappen voor de emg hier invoegen
+            while(x < 4 && !failure)
+            {
+                if(x == 1)
+                {
+                    //Functie die het eerste EMG signaal calibreert
+                }
+                if(x == 2)
+                {
+                    //Functie die het tweede  EMG signaal calibreert
+                }
+                if(x == 3)
+                {
+                    //Functie die het derde EMG signaal calibreert
+                }
+                if(!button2)
+                {
+                    failure = true;
+                }
+                if(!button1)
+                {
+                    x++;
+                    pc.printf("EMG calibration %i is now running\r\n", x);
+                    wait(0.2f);
+                }
+            }
+            //State transition
+            if(failure)
+            {
+                CurrentState = FAIL;
+                StateChanged = true;
+            }
+            else
+            {
+                CurrentState = BCM;
+                StateChanged = true;
+            }
+            break; //End of EMG_CAL state
+        case BCM: //State for moving the robot
+            //State initialization
+            if(StateChanged)
+            {
+                pc.printf("Entering Basic Control Mode\r\n");
+                ledr = 1;
+                ledg = 1;
+                ledb = 0;
+                StateChanged = false;
+            }
+            //State actions
+            pc.printf("Basic Control Mode is active\r\n");
+            while(button1 && !failure)
+            {
+                if(!button2)
+                {
+                    failure = true;
+                }
+            }
+            //State transition
+            if(failure)
+            {
+                pc.printf("Go to fail mode\r\n");
+                CurrentState = FAIL;
+                StateChanged = true;
+            }
+            else
+            {
+                CurrentState = WAITING;
+                StateChanged = true;
+            }
+            break; //End of BCM state
+        case FAIL: //Fail state
+            //State initialization
+            if(StateChanged)
+            {
+                pc.printf("Fail mode is entered\r\n");
+                failure = false;
+                StateChanged = false;
+            }
+            //State actions
+            pc.printf("Fail mode is active. Press button1 to enter WAITING\r\n");
+            while(button1)
+            {
+            }
+            //State transition
+            CurrentState = WAITING;
+            StateChanged = true;
+            break; //End of FAIL state
+        default: //Emergency state for when something unexpected happens
+            //motoren uit enzo
+            pc.printf("SOS SOS SOS\r\n");
+            ledr = 0;
+            ledg = 0;
+            ledb = 0;
+            while(button1)
+            {
+                ledr = !ledr;
+                wait(0.3f);
+            }
+            CurrentState = WAITING;
+            StateChanged = true;
+    }
+}
+
+int main() 
+{
+    pc.baud(115200);
+    ledr = 1;
+    ledg = 1;
+    ledb = 1;
+    while (true) 
+    {
+        ProcessStateMachine(); //Activates state machine
+    }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-os.lib	Wed Oct 31 10:47:46 2018 +0000
@@ -0,0 +1,1 @@
+https://github.com/ARMmbed/mbed-os/#e1bea44212b8275f7d8ce7253e758c2e25c57482