lololololol

Dependencies:   mbed QEI HIDScope biquadFilter MODSERIAL FastPWM

Revision:
16:40183eeadb6d
Parent:
15:80b3ac2b8448
Child:
17:cacf9e75eda7
diff -r 80b3ac2b8448 -r 40183eeadb6d main.cpp
--- a/main.cpp	Mon Sep 23 11:08:17 2019 +0000
+++ b/main.cpp	Mon Sep 23 13:47:47 2019 +0000
@@ -1,15 +1,12 @@
 #include "mbed.h"
-#include "MODSERIAL.h"
 #include "FastPWM.h"
-
-// Motor 1 aan zetten en uit zetten dmv button 1 en 2 werkt.
-// Snelheid aansturen nog niet.
+#include "MODSERIAL.h"
 
 MODSERIAL pc(USBTX, USBRX);
 DigitalOut ledr(LED_RED);
 DigitalOut ledg(LED_GREEN);
 DigitalOut ledb(LED_BLUE);
-Ticker RE;
+Ticker ReduceEmission;
 Timer R;
 Timer G;
 Timer B;
@@ -25,111 +22,16 @@
 
 volatile char command = 'r';
 enum states {red, green, blue};
-
 states CurrentState = red;
 bool StateChanged = true;
 
-double numerator;
-double denominator;
-double brightness;
+volatile int on_time_ms; // The time the LED should be on, in microseconds
+volatile int off_time_ms;
 
 int n=5;
 
-float speedy;
-
 // functions
 
-void ES()
-{
-    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();
-                direction = 0;
-                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;
-            }
-            break;
-        case green:
-            if  (StateChanged) {
-                pc.printf("Initiating turning LED green\n\r");
-                StateChanged= false;
-                ledr = 1;
-                ledg = 0;
-                ledb = 1;
-                G.start();
-                direction = 1;
-                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;
-            }
-            break;
-        case blue:
-            if  (StateChanged) {
-                pc.printf("Initiating turning LED blue\n\r");
-                StateChanged= false;
-                ledr = 1;
-                ledg = 1;
-                ledb = 0;
-                B.start();
-                //direction = 1;
-                speed = 255;
-                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;
-            }
-            break;
-        default:
-            pc.printf("Unknown or unimplemented state reached!\n\r");
-    }
-}
-
 void plus()
 {
     n++; // n=n+1
@@ -146,15 +48,146 @@
     }
 }
 
+void TurnLedRed()
+{
+    ledr = 0;
+    ledg = 1;
+    ledb = 1;
+}
+
+void TurnLedGreen()
+{
+    ledr = 1;
+    ledg = 0;
+    ledb = 1;
+}
+
+void TurnLedBlue()
+{
+    ledr = 1;
+    ledg = 1;
+    ledb = 0;
+}
+
+void PulseWidthModulation() // Bepaalt de duty cycle gebaseerd op de potentiometer en zet de motor dan op die snelheid mbh PWM
+{
+    on_time_ms = (int) (ain.read()*(1.0/50)*1.0e3);
+    off_time_ms = (int) ((1-ain.read())*(1.0/50)*1.0e3);
+    direction = 1;
+    wait_ms(on_time_ms);
+    direction = 0;
+    wait_ms(off_time_ms);
+}
+
+void EnergySaving() // Functie voor de "ReduceEmissions" ticker, zet de motor uit en LED op rood
+{
+    command = 'r';
+}
+
+void CheckCommandFromTerminal(void) // Functie voor de in de main loop
+{
+    command = pc.getcNb();
+}
+
+void WhileRed()
+{
+    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;
+    }
+}
+
+void WhileGreen()
+{
+    PulseWidthModulation();
+    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;
+    }
+}
+
+void WhileBlue()
+{
+    PulseWidthModulation();
+    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;
+    }
+}
+
+void StateMachine(void)
+{
+    switch(CurrentState) {
+        case red:
+            if  (StateChanged) {
+                pc.printf("Initiating turning LED red\n\r");
+                StateChanged= false;
+                TurnLedRed();
+                R.start();
+                direction = 0;
+                pc.printf("LED is now red!\n\r");
+            }
+            WhileRed();
+            break;
+        case green:
+            if  (StateChanged) {
+                pc.printf("Initiating turning LED green\n\r");
+                StateChanged= false;
+                TurnLedGreen();
+                G.start();
+                speed = 0;
+                pc.printf("LED is now green!\n\r");
+            }
+            WhileGreen();
+            break;
+        case blue:
+            if  (StateChanged) {
+                pc.printf("Initiating turning LED blue\n\r");
+                StateChanged= false;
+                TurnLedBlue();
+                B.start();
+                speed = 255;
+                pc.printf("LED is now blue!\n\r");
+            }
+            WhileBlue();
+            break;
+        default:
+            pc.printf("Unknown or unimplemented state reached!\n\r");
+    }
+}
+
 // main
 
 int main()
 {
     pc.baud(115200);
-    RE.attach(ES,3);
+    ReduceEmission.attach(EnergySaving,20);
     BUT1.fall(plus);
     BUT2.fall(min);
-    //lichtje.period_ms(20);    // Wat is hier het praktisch nu van?
     while(true) {
         CheckCommandFromTerminal();
         StateMachine();