lololololol

Dependencies:   mbed QEI HIDScope biquadFilter MODSERIAL FastPWM

Committer:
Hendrikvg
Date:
Mon Sep 23 13:47:47 2019 +0000
Revision:
16:40183eeadb6d
Parent:
15:80b3ac2b8448
Child:
17:cacf9e75eda7
Finite State Machine met 3 states: motor uit, CW en CCW. Snelheid instelbaar mbh potentiometer, met LED voor feedback.; Ticker functie werkt!

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Hendrikvg 15:80b3ac2b8448 1 #include "mbed.h"
Hendrikvg 14:20f11bb58244 2 #include "FastPWM.h"
Hendrikvg 16:40183eeadb6d 3 #include "MODSERIAL.h"
Hendrikvg 9:12b9865e7373 4
Hendrikvg 15:80b3ac2b8448 5 MODSERIAL pc(USBTX, USBRX);
Hendrikvg 15:80b3ac2b8448 6 DigitalOut ledr(LED_RED);
Hendrikvg 15:80b3ac2b8448 7 DigitalOut ledg(LED_GREEN);
Hendrikvg 15:80b3ac2b8448 8 DigitalOut ledb(LED_BLUE);
Hendrikvg 16:40183eeadb6d 9 Ticker ReduceEmission;
Hendrikvg 15:80b3ac2b8448 10 Timer R;
Hendrikvg 15:80b3ac2b8448 11 Timer G;
Hendrikvg 15:80b3ac2b8448 12 Timer B;
Hendrikvg 15:80b3ac2b8448 13
Hendrikvg 9:12b9865e7373 14 InterruptIn BUT1(D1);
Hendrikvg 9:12b9865e7373 15 InterruptIn BUT2(D0);
Hendrikvg 14:20f11bb58244 16 FastPWM lichtje(D3);
Hendrikvg 9:12b9865e7373 17 AnalogIn ain(A0);
Hendrikvg 14:20f11bb58244 18 DigitalOut direction(D6);
Hendrikvg 14:20f11bb58244 19 DigitalOut speed(D7);
RobertoO 0:67c50348f842 20
Hendrikvg 15:80b3ac2b8448 21 // variables
Hendrikvg 15:80b3ac2b8448 22
Hendrikvg 15:80b3ac2b8448 23 volatile char command = 'r';
Hendrikvg 15:80b3ac2b8448 24 enum states {red, green, blue};
Hendrikvg 15:80b3ac2b8448 25 states CurrentState = red;
Hendrikvg 15:80b3ac2b8448 26 bool StateChanged = true;
Hendrikvg 15:80b3ac2b8448 27
Hendrikvg 16:40183eeadb6d 28 volatile int on_time_ms; // The time the LED should be on, in microseconds
Hendrikvg 16:40183eeadb6d 29 volatile int off_time_ms;
Hendrikvg 15:80b3ac2b8448 30
Hendrikvg 9:12b9865e7373 31 int n=5;
Hendrikvg 2:d9b0ebf3fcca 32
Hendrikvg 15:80b3ac2b8448 33 // functions
Hendrikvg 15:80b3ac2b8448 34
Hendrikvg 9:12b9865e7373 35 void plus()
Hendrikvg 9:12b9865e7373 36 {
Hendrikvg 9:12b9865e7373 37 n++; // n=n+1
Hendrikvg 15:80b3ac2b8448 38 if (n>10) {
Hendrikvg 9:12b9865e7373 39 n=10;
Hendrikvg 9:12b9865e7373 40 }
Hendrikvg 15:80b3ac2b8448 41 }
Hendrikvg 15:80b3ac2b8448 42
Hendrikvg 9:12b9865e7373 43 void min()
Hendrikvg 8:d1794f225fff 44 {
Hendrikvg 9:12b9865e7373 45 n--;
Hendrikvg 15:80b3ac2b8448 46 if (n<0) {
Hendrikvg 9:12b9865e7373 47 n=0;
Hendrikvg 7:d307e31f7391 48 }
Hendrikvg 15:80b3ac2b8448 49 }
Hendrikvg 7:d307e31f7391 50
Hendrikvg 16:40183eeadb6d 51 void TurnLedRed()
Hendrikvg 16:40183eeadb6d 52 {
Hendrikvg 16:40183eeadb6d 53 ledr = 0;
Hendrikvg 16:40183eeadb6d 54 ledg = 1;
Hendrikvg 16:40183eeadb6d 55 ledb = 1;
Hendrikvg 16:40183eeadb6d 56 }
Hendrikvg 16:40183eeadb6d 57
Hendrikvg 16:40183eeadb6d 58 void TurnLedGreen()
Hendrikvg 16:40183eeadb6d 59 {
Hendrikvg 16:40183eeadb6d 60 ledr = 1;
Hendrikvg 16:40183eeadb6d 61 ledg = 0;
Hendrikvg 16:40183eeadb6d 62 ledb = 1;
Hendrikvg 16:40183eeadb6d 63 }
Hendrikvg 16:40183eeadb6d 64
Hendrikvg 16:40183eeadb6d 65 void TurnLedBlue()
Hendrikvg 16:40183eeadb6d 66 {
Hendrikvg 16:40183eeadb6d 67 ledr = 1;
Hendrikvg 16:40183eeadb6d 68 ledg = 1;
Hendrikvg 16:40183eeadb6d 69 ledb = 0;
Hendrikvg 16:40183eeadb6d 70 }
Hendrikvg 16:40183eeadb6d 71
Hendrikvg 16:40183eeadb6d 72 void PulseWidthModulation() // Bepaalt de duty cycle gebaseerd op de potentiometer en zet de motor dan op die snelheid mbh PWM
Hendrikvg 16:40183eeadb6d 73 {
Hendrikvg 16:40183eeadb6d 74 on_time_ms = (int) (ain.read()*(1.0/50)*1.0e3);
Hendrikvg 16:40183eeadb6d 75 off_time_ms = (int) ((1-ain.read())*(1.0/50)*1.0e3);
Hendrikvg 16:40183eeadb6d 76 direction = 1;
Hendrikvg 16:40183eeadb6d 77 wait_ms(on_time_ms);
Hendrikvg 16:40183eeadb6d 78 direction = 0;
Hendrikvg 16:40183eeadb6d 79 wait_ms(off_time_ms);
Hendrikvg 16:40183eeadb6d 80 }
Hendrikvg 16:40183eeadb6d 81
Hendrikvg 16:40183eeadb6d 82 void EnergySaving() // Functie voor de "ReduceEmissions" ticker, zet de motor uit en LED op rood
Hendrikvg 16:40183eeadb6d 83 {
Hendrikvg 16:40183eeadb6d 84 command = 'r';
Hendrikvg 16:40183eeadb6d 85 }
Hendrikvg 16:40183eeadb6d 86
Hendrikvg 16:40183eeadb6d 87 void CheckCommandFromTerminal(void) // Functie voor de in de main loop
Hendrikvg 16:40183eeadb6d 88 {
Hendrikvg 16:40183eeadb6d 89 command = pc.getcNb();
Hendrikvg 16:40183eeadb6d 90 }
Hendrikvg 16:40183eeadb6d 91
Hendrikvg 16:40183eeadb6d 92 void WhileRed()
Hendrikvg 16:40183eeadb6d 93 {
Hendrikvg 16:40183eeadb6d 94 if (command == 'g') {
Hendrikvg 16:40183eeadb6d 95 R.stop();
Hendrikvg 16:40183eeadb6d 96 pc.printf("The LED has been red for %f seconds!\n\r", R.read());
Hendrikvg 16:40183eeadb6d 97 CurrentState= green;
Hendrikvg 16:40183eeadb6d 98 StateChanged= true;
Hendrikvg 16:40183eeadb6d 99 }
Hendrikvg 16:40183eeadb6d 100 if (command == 'b') {
Hendrikvg 16:40183eeadb6d 101 R.stop();
Hendrikvg 16:40183eeadb6d 102 pc.printf("The LED has been red for %f seconds!\n\r", R.read());
Hendrikvg 16:40183eeadb6d 103 CurrentState= blue;
Hendrikvg 16:40183eeadb6d 104 StateChanged= true;
Hendrikvg 16:40183eeadb6d 105 }
Hendrikvg 16:40183eeadb6d 106 }
Hendrikvg 16:40183eeadb6d 107
Hendrikvg 16:40183eeadb6d 108 void WhileGreen()
Hendrikvg 16:40183eeadb6d 109 {
Hendrikvg 16:40183eeadb6d 110 PulseWidthModulation();
Hendrikvg 16:40183eeadb6d 111 if (command == 'r') {
Hendrikvg 16:40183eeadb6d 112 G.stop();
Hendrikvg 16:40183eeadb6d 113 pc.printf("The LED has been green for %f seconds!\n\r", G.read());
Hendrikvg 16:40183eeadb6d 114 CurrentState= red;
Hendrikvg 16:40183eeadb6d 115 StateChanged= true;
Hendrikvg 16:40183eeadb6d 116 }
Hendrikvg 16:40183eeadb6d 117 if (command == 'b') {
Hendrikvg 16:40183eeadb6d 118 G.stop();
Hendrikvg 16:40183eeadb6d 119 pc.printf("The LED has been green for %f seconds!\n\r", G.read());
Hendrikvg 16:40183eeadb6d 120 CurrentState= blue;
Hendrikvg 16:40183eeadb6d 121 StateChanged= true;
Hendrikvg 16:40183eeadb6d 122 }
Hendrikvg 16:40183eeadb6d 123 }
Hendrikvg 16:40183eeadb6d 124
Hendrikvg 16:40183eeadb6d 125 void WhileBlue()
Hendrikvg 16:40183eeadb6d 126 {
Hendrikvg 16:40183eeadb6d 127 PulseWidthModulation();
Hendrikvg 16:40183eeadb6d 128 if (command == 'r') {
Hendrikvg 16:40183eeadb6d 129 B.stop();
Hendrikvg 16:40183eeadb6d 130 pc.printf("The LED has been blue for %f seconds!\n\r", B.read());
Hendrikvg 16:40183eeadb6d 131 CurrentState= red;
Hendrikvg 16:40183eeadb6d 132 StateChanged= true;
Hendrikvg 16:40183eeadb6d 133 }
Hendrikvg 16:40183eeadb6d 134 if (command == 'g') {
Hendrikvg 16:40183eeadb6d 135 B.stop();
Hendrikvg 16:40183eeadb6d 136 pc.printf("The LED has been blue for %f seconds!\n\r", B.read());
Hendrikvg 16:40183eeadb6d 137 CurrentState= green;
Hendrikvg 16:40183eeadb6d 138 StateChanged= true;
Hendrikvg 16:40183eeadb6d 139 }
Hendrikvg 16:40183eeadb6d 140 }
Hendrikvg 16:40183eeadb6d 141
Hendrikvg 16:40183eeadb6d 142 void StateMachine(void)
Hendrikvg 16:40183eeadb6d 143 {
Hendrikvg 16:40183eeadb6d 144 switch(CurrentState) {
Hendrikvg 16:40183eeadb6d 145 case red:
Hendrikvg 16:40183eeadb6d 146 if (StateChanged) {
Hendrikvg 16:40183eeadb6d 147 pc.printf("Initiating turning LED red\n\r");
Hendrikvg 16:40183eeadb6d 148 StateChanged= false;
Hendrikvg 16:40183eeadb6d 149 TurnLedRed();
Hendrikvg 16:40183eeadb6d 150 R.start();
Hendrikvg 16:40183eeadb6d 151 direction = 0;
Hendrikvg 16:40183eeadb6d 152 pc.printf("LED is now red!\n\r");
Hendrikvg 16:40183eeadb6d 153 }
Hendrikvg 16:40183eeadb6d 154 WhileRed();
Hendrikvg 16:40183eeadb6d 155 break;
Hendrikvg 16:40183eeadb6d 156 case green:
Hendrikvg 16:40183eeadb6d 157 if (StateChanged) {
Hendrikvg 16:40183eeadb6d 158 pc.printf("Initiating turning LED green\n\r");
Hendrikvg 16:40183eeadb6d 159 StateChanged= false;
Hendrikvg 16:40183eeadb6d 160 TurnLedGreen();
Hendrikvg 16:40183eeadb6d 161 G.start();
Hendrikvg 16:40183eeadb6d 162 speed = 0;
Hendrikvg 16:40183eeadb6d 163 pc.printf("LED is now green!\n\r");
Hendrikvg 16:40183eeadb6d 164 }
Hendrikvg 16:40183eeadb6d 165 WhileGreen();
Hendrikvg 16:40183eeadb6d 166 break;
Hendrikvg 16:40183eeadb6d 167 case blue:
Hendrikvg 16:40183eeadb6d 168 if (StateChanged) {
Hendrikvg 16:40183eeadb6d 169 pc.printf("Initiating turning LED blue\n\r");
Hendrikvg 16:40183eeadb6d 170 StateChanged= false;
Hendrikvg 16:40183eeadb6d 171 TurnLedBlue();
Hendrikvg 16:40183eeadb6d 172 B.start();
Hendrikvg 16:40183eeadb6d 173 speed = 255;
Hendrikvg 16:40183eeadb6d 174 pc.printf("LED is now blue!\n\r");
Hendrikvg 16:40183eeadb6d 175 }
Hendrikvg 16:40183eeadb6d 176 WhileBlue();
Hendrikvg 16:40183eeadb6d 177 break;
Hendrikvg 16:40183eeadb6d 178 default:
Hendrikvg 16:40183eeadb6d 179 pc.printf("Unknown or unimplemented state reached!\n\r");
Hendrikvg 16:40183eeadb6d 180 }
Hendrikvg 16:40183eeadb6d 181 }
Hendrikvg 16:40183eeadb6d 182
Hendrikvg 15:80b3ac2b8448 183 // main
Hendrikvg 15:80b3ac2b8448 184
Hendrikvg 15:80b3ac2b8448 185 int main()
Hendrikvg 15:80b3ac2b8448 186 {
RobertoO 0:67c50348f842 187 pc.baud(115200);
Hendrikvg 16:40183eeadb6d 188 ReduceEmission.attach(EnergySaving,20);
Hendrikvg 9:12b9865e7373 189 BUT1.fall(plus);
Hendrikvg 9:12b9865e7373 190 BUT2.fall(min);
Hendrikvg 15:80b3ac2b8448 191 while(true) {
Hendrikvg 15:80b3ac2b8448 192 CheckCommandFromTerminal();
Hendrikvg 15:80b3ac2b8448 193 StateMachine();
Hendrikvg 15:80b3ac2b8448 194 lichtje.write(ain.read()); // duty cycle
Hendrikvg 9:12b9865e7373 195 }
Hendrikvg 2:d9b0ebf3fcca 196 }