Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: Encoder HIDScope TextLCD mbed-dsp mbed
Fork of Main-script_groep7 by
main.cpp@1:b08ac32d1ddc, 2014-10-30 (annotated)
- Committer:
- phgbartels
- Date:
- Thu Oct 30 09:00:36 2014 +0000
- Revision:
- 1:b08ac32d1ddc
- Parent:
- 0:2386012c6594
- Child:
- 2:de7b6c1d67c4
Komt tot state 6 (niet verder naar 7)
Who changed what in which revision?
| User | Revision | Line number | New contents of line | 
|---|---|---|---|
| phgbartels | 0:2386012c6594 | 1 | /********************************************/ | 
| phgbartels | 0:2386012c6594 | 2 | /* */ | 
| phgbartels | 0:2386012c6594 | 3 | /* BRONCODE GROEP 7, MODULE 9, 2014 */ | 
| phgbartels | 0:2386012c6594 | 4 | /* *-THE SLAP-* */ | 
| phgbartels | 0:2386012c6594 | 5 | /* */ | 
| phgbartels | 0:2386012c6594 | 6 | /* -Anne ten Dam */ | 
| phgbartels | 0:2386012c6594 | 7 | /* -Laura de Heus */ | 
| phgbartels | 0:2386012c6594 | 8 | /* -Moniek Strijdveen */ | 
| phgbartels | 0:2386012c6594 | 9 | /* -Bart Arendshorst */ | 
| phgbartels | 0:2386012c6594 | 10 | /* -Peter Bartels */ | 
| phgbartels | 0:2386012c6594 | 11 | /********************************************/ | 
| phgbartels | 0:2386012c6594 | 12 | |
| phgbartels | 0:2386012c6594 | 13 | /* | 
| phgbartels | 0:2386012c6594 | 14 | #include voor alle libraries | 
| phgbartels | 0:2386012c6594 | 15 | */ | 
| phgbartels | 0:2386012c6594 | 16 | #include "TextLCD.h" | 
| phgbartels | 0:2386012c6594 | 17 | #include "mbed.h" | 
| phgbartels | 0:2386012c6594 | 18 | #include "encoder.h" | 
| phgbartels | 1:b08ac32d1ddc | 19 | //#include "HIDScope.h" | 
| phgbartels | 0:2386012c6594 | 20 | #include "PwmOut.h" | 
| phgbartels | 0:2386012c6594 | 21 | |
| phgbartels | 0:2386012c6594 | 22 | /* | 
| phgbartels | 0:2386012c6594 | 23 | #define vaste waarden | 
| phgbartels | 0:2386012c6594 | 24 | */ | 
| phgbartels | 0:2386012c6594 | 25 | /*definieren pinnen Motor 1*/ | 
| phgbartels | 0:2386012c6594 | 26 | #define M1_PWM PTA5 | 
| phgbartels | 0:2386012c6594 | 27 | #define M1_DIR PTA4 | 
| phgbartels | 0:2386012c6594 | 28 | #define M2_PWM PTC8 | 
| phgbartels | 0:2386012c6594 | 29 | #define M2_DIR PTC9 | 
| phgbartels | 0:2386012c6594 | 30 | /*Definieren minimale waarden PWM per motor*/ | 
| phgbartels | 0:2386012c6594 | 31 | #define PWM1_min_50 0.529 /*met koppelstuk!*/ | 
| phgbartels | 0:2386012c6594 | 32 | #define PWM2_min_30 0.529 /*aanpassen! Klopt nog niet met koppelstuk*/ | 
| phgbartels | 0:2386012c6594 | 33 | /*Definieren om de hoeveel seconden er gegevens naar de HID-scope gestuurd worden.*/ | 
| phgbartels | 0:2386012c6594 | 34 | #define TSAMP 0.005 | 
| phgbartels | 0:2386012c6594 | 35 | #define K_P (100) | 
| phgbartels | 0:2386012c6594 | 36 | #define K_I (50 * TSAMP) | 
| phgbartels | 0:2386012c6594 | 37 | #define K_D (1) | 
| phgbartels | 0:2386012c6594 | 38 | //#define K_D (0.0005 /TSAMP) | 
| phgbartels | 0:2386012c6594 | 39 | #define I_LIMIT 100. | 
| phgbartels | 0:2386012c6594 | 40 | #define PI 3.1415926535897 | 
| phgbartels | 0:2386012c6594 | 41 | #define lengte_arm 0.5 | 
| phgbartels | 0:2386012c6594 | 42 | |
| phgbartels | 0:2386012c6594 | 43 | /* | 
| phgbartels | 0:2386012c6594 | 44 | Geef een naam aan een actie en vertel welke pinnen hiervoor gebruikt worden. | 
| phgbartels | 0:2386012c6594 | 45 | */ | 
| phgbartels | 0:2386012c6594 | 46 | TextLCD lcd(PTD2, PTA12, PTB2, PTB3, PTC2, PTA13, TextLCD::LCD16x2); // rs, e, d4-d7 | 
| phgbartels | 0:2386012c6594 | 47 | Encoder motor1(PTD3,PTD1); | 
| phgbartels | 0:2386012c6594 | 48 | Encoder motor2(PTD5, PTD0); | 
| phgbartels | 0:2386012c6594 | 49 | PwmOut pwm_motor1(M1_PWM); | 
| phgbartels | 0:2386012c6594 | 50 | PwmOut pwm_motor2(M2_PWM); | 
| phgbartels | 0:2386012c6594 | 51 | DigitalOut motordir1(M1_DIR); | 
| phgbartels | 0:2386012c6594 | 52 | DigitalOut motordir2(M2_DIR); | 
| phgbartels | 0:2386012c6594 | 53 | DigitalOut LEDGREEN(LED_GREEN); | 
| phgbartels | 0:2386012c6594 | 54 | DigitalOut LEDRED(LED_RED); | 
| phgbartels | 0:2386012c6594 | 55 | |
| phgbartels | 0:2386012c6594 | 56 | /* | 
| phgbartels | 0:2386012c6594 | 57 | definieer namen aan var, float, int, static float, uint8_t, uint16_t etc. en geef ze eventueel een waarde | 
| phgbartels | 0:2386012c6594 | 58 | */ | 
| phgbartels | 0:2386012c6594 | 59 | Ticker statemachine; | 
| phgbartels | 0:2386012c6594 | 60 | Ticker screen; | 
| phgbartels | 0:2386012c6594 | 61 | int previous_herhalingen = 0; | 
| phgbartels | 1:b08ac32d1ddc | 62 | int current_herhalingen = 0; | 
| phgbartels | 0:2386012c6594 | 63 | int PWM2_percentage = 100; | 
| phgbartels | 0:2386012c6594 | 64 | int aantal_rotaties_1 = 10; | 
| phgbartels | 0:2386012c6594 | 65 | int aantalcr_1 = 1600; | 
| phgbartels | 0:2386012c6594 | 66 | int aantalcr_2 = 960; | 
| phgbartels | 0:2386012c6594 | 67 | int beginpos_motor1; | 
| phgbartels | 0:2386012c6594 | 68 | int beginpos_motor1_new; | 
| phgbartels | 0:2386012c6594 | 69 | int beginpos_motor2; | 
| phgbartels | 0:2386012c6594 | 70 | int beginpos_motor2_new; | 
| phgbartels | 0:2386012c6594 | 71 | int previous_pos_motor1 = 0; | 
| phgbartels | 0:2386012c6594 | 72 | int current_pos_motor1; | 
| phgbartels | 0:2386012c6594 | 73 | int delta_pos_motor1_puls; | 
| phgbartels | 0:2386012c6594 | 74 | void clamp(float * in, float min, float max); | 
| phgbartels | 0:2386012c6594 | 75 | volatile bool looptimerflag; | 
| phgbartels | 0:2386012c6594 | 76 | uint16_t gewenste_snelheid = 2; | 
| phgbartels | 0:2386012c6594 | 77 | uint16_t gewenste_snelheid_rad = 4; | 
| phgbartels | 0:2386012c6594 | 78 | float pid(float setpoint, float measurement); | 
| phgbartels | 0:2386012c6594 | 79 | float pos_motor1_rad; | 
| phgbartels | 0:2386012c6594 | 80 | float PWM1_percentage = 0; | 
| phgbartels | 0:2386012c6594 | 81 | float delta_pos_motor1_rad; | 
| phgbartels | 0:2386012c6594 | 82 | float snelheid_motor1_rad; | 
| phgbartels | 0:2386012c6594 | 83 | float snelheid_arm_ms; | 
| phgbartels | 0:2386012c6594 | 84 | float PWM1; | 
| phgbartels | 0:2386012c6594 | 85 | float PWM2; | 
| phgbartels | 0:2386012c6594 | 86 | float Speed_motor1; | 
| phgbartels | 0:2386012c6594 | 87 | float Speed_motor1rad; | 
| phgbartels | 1:b08ac32d1ddc | 88 | float setpoint = 0; | 
| phgbartels | 1:b08ac32d1ddc | 89 | float prev_setpoint = 0; | 
| phgbartels | 0:2386012c6594 | 90 | |
| phgbartels | 1:b08ac32d1ddc | 91 | //HIDScope scope(6); | 
| phgbartels | 0:2386012c6594 | 92 | |
| phgbartels | 0:2386012c6594 | 93 | enum state_t {RUST, ARM_KALIBRATIE, EMG_KALIBRATIE, METEN_RICHTING, METEN_HOOGTE, INSTELLEN_RICHTING, SLAAN, RETURN2RUST}; //verschillende stadia definieren voor gebruik in CASES | 
| phgbartels | 0:2386012c6594 | 94 | state_t state = RUST; | 
| phgbartels | 0:2386012c6594 | 95 | |
| phgbartels | 0:2386012c6594 | 96 | //functies die vanuit de statemachinefunction aangeroepen kunnen worden | 
| phgbartels | 0:2386012c6594 | 97 | void rust() { | 
| phgbartels | 0:2386012c6594 | 98 | current_herhalingen = previous_herhalingen + 1; previous_herhalingen = current_herhalingen; | 
| phgbartels | 0:2386012c6594 | 99 | } | 
| phgbartels | 0:2386012c6594 | 100 | |
| phgbartels | 0:2386012c6594 | 101 | void arm_kalibratie() { | 
| phgbartels | 0:2386012c6594 | 102 | //voor nu om de loop te doorlopen wordt onderstaande code gebruikt. Nogmaal gesproken moet er gewacht worden op een 'hoog' signaal van een knop | 
| phgbartels | 0:2386012c6594 | 103 | current_herhalingen = previous_herhalingen + 1; previous_herhalingen = current_herhalingen; | 
| phgbartels | 0:2386012c6594 | 104 | motor1.setPosition(0); | 
| phgbartels | 1:b08ac32d1ddc | 105 | motor2.setPosition(0); | 
| phgbartels | 0:2386012c6594 | 106 | } | 
| phgbartels | 0:2386012c6594 | 107 | |
| phgbartels | 0:2386012c6594 | 108 | void emg_kalibratie() { | 
| phgbartels | 0:2386012c6594 | 109 | current_herhalingen = previous_herhalingen + 1; previous_herhalingen = current_herhalingen; | 
| phgbartels | 0:2386012c6594 | 110 | } | 
| phgbartels | 0:2386012c6594 | 111 | |
| phgbartels | 0:2386012c6594 | 112 | void meten_richting() { | 
| phgbartels | 0:2386012c6594 | 113 | current_herhalingen = previous_herhalingen + 1; previous_herhalingen = current_herhalingen; | 
| phgbartels | 0:2386012c6594 | 114 | } | 
| phgbartels | 0:2386012c6594 | 115 | |
| phgbartels | 0:2386012c6594 | 116 | void meten_hoogte() { | 
| phgbartels | 0:2386012c6594 | 117 | current_herhalingen = previous_herhalingen + 1; previous_herhalingen = current_herhalingen; | 
| phgbartels | 0:2386012c6594 | 118 | } | 
| phgbartels | 0:2386012c6594 | 119 | |
| phgbartels | 0:2386012c6594 | 120 | void instellen_richting() { | 
| phgbartels | 0:2386012c6594 | 121 | current_herhalingen = previous_herhalingen + 1; previous_herhalingen = current_herhalingen; | 
| phgbartels | 0:2386012c6594 | 122 | } | 
| phgbartels | 0:2386012c6594 | 123 | |
| phgbartels | 0:2386012c6594 | 124 | void slaan () { | 
| phgbartels | 0:2386012c6594 | 125 | current_pos_motor1 = motor1.getPosition(); //bekijk na elke 0.005s wat de huidige 'waarde' van de encoder is | 
| phgbartels | 0:2386012c6594 | 126 | delta_pos_motor1_puls = current_pos_motor1 - previous_pos_motor1; //Bereken wat het verschil in waarde is voor het berekenen van de snelheid(puls) | 
| phgbartels | 0:2386012c6594 | 127 | pos_motor1_rad = current_pos_motor1/(1600/(2*PI)); //echte waarde omrekenen naar rad voor (positie) PID regelaar | 
| phgbartels | 0:2386012c6594 | 128 | delta_pos_motor1_rad = delta_pos_motor1_puls/(1600/(2*PI)); //delta waarde omrekenen naar rad voor snelheidsbepaling (rad) | 
| phgbartels | 0:2386012c6594 | 129 | snelheid_motor1_rad = delta_pos_motor1_rad / TSAMP; //rad delen door TSAMP om rad/s te verkrijgen | 
| phgbartels | 0:2386012c6594 | 130 | snelheid_arm_ms = snelheid_motor1_rad * lengte_arm; //deze waarde maar lengte van de arm om de snelheid van het uiteinde van die arm te verkrijgen | 
| phgbartels | 1:b08ac32d1ddc | 131 | //scope.set(0, snelheid_motor1_rad); | 
| phgbartels | 0:2386012c6594 | 132 | |
| phgbartels | 0:2386012c6594 | 133 | previous_pos_motor1 = current_pos_motor1; //sla de huidige waarde op als vorige waarde. | 
| phgbartels | 0:2386012c6594 | 134 | |
| phgbartels | 0:2386012c6594 | 135 | //nu gaan we positie regelen i.p.v. snelheid. | 
| phgbartels | 0:2386012c6594 | 136 | if (current_pos_motor1 >= 400) | 
| phgbartels | 0:2386012c6594 | 137 | { | 
| phgbartels | 0:2386012c6594 | 138 | gewenste_snelheid_rad = 0; | 
| phgbartels | 0:2386012c6594 | 139 | } | 
| phgbartels | 0:2386012c6594 | 140 | |
| phgbartels | 0:2386012c6594 | 141 | setpoint = prev_setpoint + TSAMP * gewenste_snelheid_rad; | 
| phgbartels | 0:2386012c6594 | 142 | /*new_pwm = (setpoint - motor1.getPosition())*.001; -> P action*/ | 
| phgbartels | 0:2386012c6594 | 143 | PWM1_percentage = pid(setpoint, pos_motor1_rad); | 
| phgbartels | 1:b08ac32d1ddc | 144 | //scope.set(1, setpoint-pos_motor1_rad); | 
| phgbartels | 0:2386012c6594 | 145 | |
| phgbartels | 0:2386012c6594 | 146 | if (PWM1_percentage < -100) | 
| phgbartels | 0:2386012c6594 | 147 | { | 
| phgbartels | 0:2386012c6594 | 148 | PWM1_percentage = -100; | 
| phgbartels | 0:2386012c6594 | 149 | } | 
| phgbartels | 0:2386012c6594 | 150 | else if (PWM1_percentage >100) | 
| phgbartels | 0:2386012c6594 | 151 | { | 
| phgbartels | 0:2386012c6594 | 152 | PWM1_percentage =100; | 
| phgbartels | 0:2386012c6594 | 153 | } | 
| phgbartels | 0:2386012c6594 | 154 | else {} | 
| phgbartels | 0:2386012c6594 | 155 | |
| phgbartels | 0:2386012c6594 | 156 | if(PWM1_percentage < 0) | 
| phgbartels | 0:2386012c6594 | 157 | { | 
| phgbartels | 0:2386012c6594 | 158 | motordir1 = 1; | 
| phgbartels | 0:2386012c6594 | 159 | } | 
| phgbartels | 0:2386012c6594 | 160 | else | 
| phgbartels | 0:2386012c6594 | 161 | { | 
| phgbartels | 0:2386012c6594 | 162 | motordir1 = 0; | 
| phgbartels | 0:2386012c6594 | 163 | } | 
| phgbartels | 0:2386012c6594 | 164 | |
| phgbartels | 0:2386012c6594 | 165 | pwm_motor1.write(abs(((1-PWM1_min_50)/100)*PWM1_percentage + PWM1_min_50)); | 
| phgbartels | 1:b08ac32d1ddc | 166 | //scope.set(5, abs(((1-PWM1_min_50)/100)*PWM1_percentage + PWM1_min_50)); | 
| phgbartels | 0:2386012c6594 | 167 | prev_setpoint = setpoint; | 
| phgbartels | 1:b08ac32d1ddc | 168 | //scope.send(); | 
| phgbartels | 0:2386012c6594 | 169 | } | 
| phgbartels | 0:2386012c6594 | 170 | |
| phgbartels | 0:2386012c6594 | 171 | float pid(float setpoint, float measurement) | 
| phgbartels | 0:2386012c6594 | 172 | { | 
| phgbartels | 0:2386012c6594 | 173 | float error; | 
| phgbartels | 0:2386012c6594 | 174 | static float prev_error = 0; | 
| phgbartels | 0:2386012c6594 | 175 | float out_p = 0; | 
| phgbartels | 0:2386012c6594 | 176 | static float out_i = 0; | 
| phgbartels | 0:2386012c6594 | 177 | float out_d = 0; | 
| phgbartels | 0:2386012c6594 | 178 | error = (setpoint-measurement); | 
| phgbartels | 0:2386012c6594 | 179 | out_p = error*K_P; | 
| phgbartels | 0:2386012c6594 | 180 | out_i += error*K_I; | 
| phgbartels | 0:2386012c6594 | 181 | out_d = (error-prev_error)*K_D; | 
| phgbartels | 0:2386012c6594 | 182 | clamp(&out_i,-I_LIMIT,I_LIMIT); | 
| phgbartels | 0:2386012c6594 | 183 | prev_error = error; | 
| phgbartels | 1:b08ac32d1ddc | 184 | //scope.set(2, out_p); | 
| phgbartels | 1:b08ac32d1ddc | 185 | //scope.set(3, out_i); | 
| phgbartels | 1:b08ac32d1ddc | 186 | //scope.set(4, out_d); | 
| phgbartels | 0:2386012c6594 | 187 | return out_p + out_i + out_d; | 
| phgbartels | 0:2386012c6594 | 188 | } | 
| phgbartels | 0:2386012c6594 | 189 | |
| phgbartels | 0:2386012c6594 | 190 | void clamp(float* in, float min, float max) // "*" is een pointer (verwijst naar het adres waar een variebele instaat). Dus je slaat niet de variabele op | 
| phgbartels | 0:2386012c6594 | 191 | // maar de locatie van de variabele. | 
| phgbartels | 0:2386012c6594 | 192 | { | 
| phgbartels | 0:2386012c6594 | 193 | *in > min ? /*(*/*in < max? /*niets doen*/ : *in = max/*)*/: *in = min; // a ? b : c --> als a waar is, dan doe je b, en anders c | 
| phgbartels | 0:2386012c6594 | 194 | // *in = het getal dat staat op locatie van in --> waarde van new_pwm | 
| phgbartels | 0:2386012c6594 | 195 | } | 
| phgbartels | 0:2386012c6594 | 196 | |
| phgbartels | 0:2386012c6594 | 197 | void return2rust () { | 
| phgbartels | 0:2386012c6594 | 198 | } | 
| phgbartels | 0:2386012c6594 | 199 | |
| phgbartels | 0:2386012c6594 | 200 | void statemachinefunction() | 
| phgbartels | 0:2386012c6594 | 201 | { | 
| phgbartels | 0:2386012c6594 | 202 | switch(state) { | 
| phgbartels | 0:2386012c6594 | 203 | case RUST: { | 
| phgbartels | 0:2386012c6594 | 204 | rust(); | 
| phgbartels | 0:2386012c6594 | 205 | /*voorwaarde wanneer hij door kan naar de volgende case*/ | 
| phgbartels | 1:b08ac32d1ddc | 206 | if (current_herhalingen == 600) | 
| phgbartels | 0:2386012c6594 | 207 | { | 
| phgbartels | 0:2386012c6594 | 208 | current_herhalingen = 0; | 
| phgbartels | 0:2386012c6594 | 209 | previous_herhalingen = 0; | 
| phgbartels | 1:b08ac32d1ddc | 210 | state = ARM_KALIBRATIE; | 
| phgbartels | 0:2386012c6594 | 211 | } | 
| phgbartels | 1:b08ac32d1ddc | 212 | break; | 
| phgbartels | 0:2386012c6594 | 213 | /*bepalen hoe je zorgt dat je maar 1x de kalibraties uitvoerd! (Of eventueel de arm kalibratie elke keer!!)*/ | 
| phgbartels | 0:2386012c6594 | 214 | //if (metingstatus<5); | 
| phgbartels | 0:2386012c6594 | 215 | // state = ARMKALIBRATIE; | 
| phgbartels | 0:2386012c6594 | 216 | //if (metingstatus==5); | 
| phgbartels | 0:2386012c6594 | 217 | // state = METEN_RICHTING; | 
| phgbartels | 0:2386012c6594 | 218 | //break; | 
| phgbartels | 0:2386012c6594 | 219 | //} | 
| phgbartels | 0:2386012c6594 | 220 | } | 
| phgbartels | 0:2386012c6594 | 221 | |
| phgbartels | 0:2386012c6594 | 222 | case ARM_KALIBRATIE: | 
| phgbartels | 0:2386012c6594 | 223 | { | 
| phgbartels | 0:2386012c6594 | 224 | arm_kalibratie(); | 
| phgbartels | 0:2386012c6594 | 225 | if (current_herhalingen == 200) | 
| phgbartels | 0:2386012c6594 | 226 | { | 
| phgbartels | 0:2386012c6594 | 227 | current_herhalingen = 0; | 
| phgbartels | 0:2386012c6594 | 228 | previous_herhalingen = 0; | 
| phgbartels | 1:b08ac32d1ddc | 229 | state = EMG_KALIBRATIE; | 
| phgbartels | 0:2386012c6594 | 230 | } | 
| phgbartels | 1:b08ac32d1ddc | 231 | break; | 
| phgbartels | 0:2386012c6594 | 232 | } | 
| phgbartels | 0:2386012c6594 | 233 | |
| phgbartels | 0:2386012c6594 | 234 | case EMG_KALIBRATIE: | 
| phgbartels | 0:2386012c6594 | 235 | { | 
| phgbartels | 0:2386012c6594 | 236 | emg_kalibratie(); | 
| phgbartels | 0:2386012c6594 | 237 | if (current_herhalingen == 200) | 
| phgbartels | 0:2386012c6594 | 238 | { | 
| phgbartels | 0:2386012c6594 | 239 | state = METEN_RICHTING; | 
| phgbartels | 0:2386012c6594 | 240 | current_herhalingen = 0; | 
| phgbartels | 0:2386012c6594 | 241 | previous_herhalingen = 0; | 
| phgbartels | 0:2386012c6594 | 242 | } | 
| phgbartels | 1:b08ac32d1ddc | 243 | break; | 
| phgbartels | 0:2386012c6594 | 244 | } | 
| phgbartels | 0:2386012c6594 | 245 | |
| phgbartels | 0:2386012c6594 | 246 | case METEN_RICHTING: | 
| phgbartels | 0:2386012c6594 | 247 | { | 
| phgbartels | 0:2386012c6594 | 248 | meten_richting(); | 
| phgbartels | 0:2386012c6594 | 249 | if (current_herhalingen == 200) | 
| phgbartels | 0:2386012c6594 | 250 | { | 
| phgbartels | 0:2386012c6594 | 251 | state = METEN_HOOGTE; | 
| phgbartels | 0:2386012c6594 | 252 | current_herhalingen = 0; | 
| phgbartels | 0:2386012c6594 | 253 | previous_herhalingen = 0; | 
| phgbartels | 0:2386012c6594 | 254 | } | 
| phgbartels | 1:b08ac32d1ddc | 255 | break; | 
| phgbartels | 0:2386012c6594 | 256 | } | 
| phgbartels | 0:2386012c6594 | 257 | |
| phgbartels | 0:2386012c6594 | 258 | case METEN_HOOGTE: | 
| phgbartels | 0:2386012c6594 | 259 | { | 
| phgbartels | 0:2386012c6594 | 260 | meten_hoogte(); | 
| phgbartels | 0:2386012c6594 | 261 | if (current_herhalingen == 200) | 
| phgbartels | 0:2386012c6594 | 262 | { | 
| phgbartels | 0:2386012c6594 | 263 | state = INSTELLEN_RICHTING; | 
| phgbartels | 0:2386012c6594 | 264 | current_herhalingen = 0; | 
| phgbartels | 0:2386012c6594 | 265 | previous_herhalingen = 0; | 
| phgbartels | 0:2386012c6594 | 266 | } | 
| phgbartels | 1:b08ac32d1ddc | 267 | break; | 
| phgbartels | 0:2386012c6594 | 268 | } | 
| phgbartels | 0:2386012c6594 | 269 | |
| phgbartels | 0:2386012c6594 | 270 | case INSTELLEN_RICHTING: | 
| phgbartels | 0:2386012c6594 | 271 | { | 
| phgbartels | 0:2386012c6594 | 272 | instellen_richting(); | 
| phgbartels | 0:2386012c6594 | 273 | if (current_herhalingen == 200) | 
| phgbartels | 0:2386012c6594 | 274 | { | 
| phgbartels | 0:2386012c6594 | 275 | state = SLAAN; | 
| phgbartels | 0:2386012c6594 | 276 | current_herhalingen = 0; | 
| phgbartels | 0:2386012c6594 | 277 | previous_herhalingen = 0; | 
| phgbartels | 0:2386012c6594 | 278 | } | 
| phgbartels | 1:b08ac32d1ddc | 279 | |
| phgbartels | 0:2386012c6594 | 280 | } | 
| phgbartels | 0:2386012c6594 | 281 | |
| phgbartels | 0:2386012c6594 | 282 | case SLAAN: | 
| phgbartels | 0:2386012c6594 | 283 | { | 
| phgbartels | 0:2386012c6594 | 284 | slaan(); | 
| phgbartels | 0:2386012c6594 | 285 | if (current_herhalingen == 200) | 
| phgbartels | 0:2386012c6594 | 286 | { | 
| phgbartels | 0:2386012c6594 | 287 | state = RETURN2RUST; | 
| phgbartels | 0:2386012c6594 | 288 | current_herhalingen = 0; | 
| phgbartels | 0:2386012c6594 | 289 | previous_herhalingen = 0; | 
| phgbartels | 0:2386012c6594 | 290 | } | 
| phgbartels | 1:b08ac32d1ddc | 291 | break; | 
| phgbartels | 0:2386012c6594 | 292 | } | 
| phgbartels | 0:2386012c6594 | 293 | |
| phgbartels | 0:2386012c6594 | 294 | case RETURN2RUST: | 
| phgbartels | 0:2386012c6594 | 295 | { | 
| phgbartels | 0:2386012c6594 | 296 | return2rust(); | 
| phgbartels | 0:2386012c6594 | 297 | if (current_herhalingen == 200) | 
| phgbartels | 0:2386012c6594 | 298 | { | 
| phgbartels | 0:2386012c6594 | 299 | state = RUST; | 
| phgbartels | 0:2386012c6594 | 300 | current_herhalingen = 0; | 
| phgbartels | 0:2386012c6594 | 301 | previous_herhalingen = 0; | 
| phgbartels | 0:2386012c6594 | 302 | } | 
| phgbartels | 1:b08ac32d1ddc | 303 | break; | 
| phgbartels | 0:2386012c6594 | 304 | } | 
| phgbartels | 0:2386012c6594 | 305 | |
| phgbartels | 0:2386012c6594 | 306 | default: { | 
| phgbartels | 0:2386012c6594 | 307 | state = RUST; | 
| phgbartels | 0:2386012c6594 | 308 | } | 
| phgbartels | 0:2386012c6594 | 309 | |
| phgbartels | 0:2386012c6594 | 310 | }//switch(state) | 
| phgbartels | 0:2386012c6594 | 311 | }//void statemachinefunction | 
| phgbartels | 0:2386012c6594 | 312 | |
| phgbartels | 0:2386012c6594 | 313 | |
| phgbartels | 0:2386012c6594 | 314 | void screenupdate(){ | 
| phgbartels | 0:2386012c6594 | 315 | if(state==RUST){ | 
| phgbartels | 0:2386012c6594 | 316 | lcd.cls(); | 
| phgbartels | 0:2386012c6594 | 317 | lcd.locate(0,0); | 
| phgbartels | 0:2386012c6594 | 318 | lcd.printf("S.T.I.E.N.E.N."); //regel 1 LCD scherm | 
| phgbartels | 0:2386012c6594 | 319 | lcd.locate(0,1); | 
| phgbartels | 0:2386012c6594 | 320 | lcd.printf(" GROEP 7 "); | 
| phgbartels | 0:2386012c6594 | 321 | } | 
| phgbartels | 0:2386012c6594 | 322 | else{ | 
| phgbartels | 0:2386012c6594 | 323 | lcd.cls(); | 
| phgbartels | 0:2386012c6594 | 324 | lcd.printf("state %d", state); //hier nog aan toevoegen hoe je de 'waarde', dus eigenlijk tekst, die opgeslagen staat in state kan printen. | 
| phgbartels | 0:2386012c6594 | 325 | } | 
| phgbartels | 0:2386012c6594 | 326 | } | 
| phgbartels | 0:2386012c6594 | 327 | |
| phgbartels | 0:2386012c6594 | 328 | int main() { | 
| phgbartels | 1:b08ac32d1ddc | 329 | motor1.setPosition(0); | 
| phgbartels | 1:b08ac32d1ddc | 330 | motor2.setPosition(0); | 
| phgbartels | 1:b08ac32d1ddc | 331 | pwm_motor1.period_us(100); | 
| phgbartels | 1:b08ac32d1ddc | 332 | pwm_motor2.period_us(100); | 
| phgbartels | 0:2386012c6594 | 333 | statemachine.attach(&statemachinefunction, 0.005); // the address of the function to be attached (flip) and the interval (2 seconds) | 
| phgbartels | 0:2386012c6594 | 334 | screen.attach(&screenupdate, 0.2); | 
| phgbartels | 0:2386012c6594 | 335 | } | 
