lololololol

Dependencies:   mbed QEI HIDScope biquadFilter MODSERIAL FastPWM

Revision:
6:61618bf71a08
Parent:
5:dc3a076bbb10
Child:
7:d307e31f7391
--- a/main.cpp	Thu Sep 12 13:48:12 2019 +0000
+++ b/main.cpp	Fri Sep 13 11:00:52 2019 +0000
@@ -5,75 +5,112 @@
 DigitalOut ledr(LED_RED);
 DigitalOut ledg(LED_GREEN);
 DigitalOut ledb(LED_BLUE);
-Ticker ReadEnCoder;
+Ticker RE;
+Timer R;
+Timer G;
+Timer B;
 
-char color='r';
+volatile char Command;
+enum states {red, green, blue};
 
-void flicker()
+states CurrentState = red;
+bool StateChanged = true;
+
+void ES() 
 {
-    if (color == 'r') {
-        ledr=!ledr;
-        ledg=1;
-        ledb=1;
-    }
-    if (color == 'g') {
-        ledr=1;
-        ledg=!ledg;
-        ledb=1;
-    }
-    if (color == 'b') {
-        ledr=1;
-        ledg=1;
-        ledb=!ledb;
-    }
-    if (color == 'y') {
-        ledr=!ledr;
-        ledg=!ledg;
-        ledb=1;
-    }
-    if (color == 'c') {
-        ledr=1;
-        ledg=!ledg;
-        ledb=!ledb;
-    }
-    if (color == 'm') {
-        ledr=!ledr;
-        ledg=1;
-        ledb=!ledb;
-    }
-    if (color == 'w') {
-        ledr=!ledr;
-        ledg=!ledg;
-        ledb=!ledb;
-    }
+    Command = 'r';
+}    
+
+void CheckCommandFromTerminal(void)
+{
+    Command = pc.getcNb();
 }
 
+void StateMachine(void)
+{
+    switch(CurrentState) {
+        case red:
+            if  (StateChanged) { 
+                pc.printf("Initiating turning LED red\n\r");
+                StateChanged= false;
+                ledr = 0;
+                ledg = 1;
+                ledb = 1;
+                R.start();
+                pc.printf("LED is now red!\n\r");
+            }
+            if (Command == 'g') {
+                R.stop();
+                pc.printf("The LED has been red for %f seconds!\n\r", R.read());
+                CurrentState= green;
+                StateChanged= true;
+            }
+            if (Command == 'b') {
+                R.stop();
+                pc.printf("The LED has been red for %f seconds!\n\r", R.read());
+                CurrentState= blue;
+                StateChanged= true;
+            }
+            else {}
+            break;
+        case green:
+            if  (StateChanged) { 
+                pc.printf("Initiating turning LED green\n\r");
+                StateChanged= false;
+                ledr = 1;
+                ledg = 0;
+                ledb = 1;
+                G.start();
+                pc.printf("LED is now green!\n\r");
+            }
+            if (Command == 'r') {
+                G.stop();
+                pc.printf("The LED has been green for %f seconds!\n\r", G.read());
+                CurrentState= red;
+                StateChanged= true;
+            }
+            if (Command == 'b') {
+                G.stop();
+                pc.printf("The LED has been green for %f seconds!\n\r", G.read());
+                CurrentState= blue;
+                StateChanged= true;
+            }
+            else {}
+            break;
+        case blue:
+            if  (StateChanged) { 
+                pc.printf("Initiating turning LED blue\n\r");
+                StateChanged= false;
+                ledr = 1;
+                ledg = 1;
+                ledb = 0;
+                B.start();
+                pc.printf("LED is now blue!\n\r");
+            }
+            if (Command == 'r') {
+                B.stop();
+                pc.printf("The LED has been blue for %f seconds!\n\r", B.read());
+                CurrentState= red;
+                StateChanged= true;
+            }
+            if (Command == 'g') {
+                B.stop();
+                pc.printf("The LED has been blue for %f seconds!\n\r", B.read());
+                CurrentState= green;
+                StateChanged= true;
+            }
+            else {}
+            break;
+        default:
+            pc.printf("Unknown or unimplemented state reached!\n");
+    }  
+}
 int main()
 {
     pc.baud(115200);
-    while (true) {
-        pc.printf("%c\n\r",color);
-        ReadEnCoder.attach(flicker,0.5);
-        color = pc.getc();
-        if (color == 'w') {
-            ledr=0;
-            ledg=0;
-            ledb=0;    
-        }
-        if (color == 'y') {
-            ledr=0;
-            ledg=0;
-            ledb=1;    
-        }
-        if (color == 'm') {
-            ledr=0;
-            ledg=1;
-            ledb=0;    
-        }
-        if (color == 'c') {
-            ledr=1;
-            ledg=0;
-            ledb=0;    
-        }
+    RE.attach(ES,3);
+    while(true) {
+        CheckCommandFromTerminal();
+        StateMachine();
     }
 }
\ No newline at end of file