mag niet van hendrik D:
Dependencies: mbed MatrixMath QEI HIDScope Matrix biquadFilter MODSERIAL FastPWM
Diff: main.cpp
- Revision:
- 16:40183eeadb6d
- Parent:
- 15:80b3ac2b8448
- Child:
- 17:cacf9e75eda7
--- 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();