Updated to latest version. Added in new version of the Siren
Dependencies: mbed-src
Fork of VolundrIntroCase2015 by
main.cpp@3:ce51f3857195, 2015-08-16 (annotated)
- Committer:
- tweaker1331
- Date:
- Sun Aug 16 11:44:48 2015 +0000
- Revision:
- 3:ce51f3857195
- Parent:
- 2:7ca8b2154664
- Child:
- 4:17d1343916ec
Defintieve versie V1.0
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
tweaker1331 | 0:9826a0b36948 | 1 | #include "mbed.h" |
tweaker1331 | 1:fad61b6e660b | 2 | /* |
tweaker1331 | 1:fad61b6e660b | 3 | MOTOR A |
tweaker1331 | 1:fad61b6e660b | 4 | ENA - p21 |
tweaker1331 | 1:fad61b6e660b | 5 | IN1 - p5 --> OUT1 - MOTORA+ |
tweaker1331 | 1:fad61b6e660b | 6 | IN2 - p6 --> OUT2 - MOTORA- |
tweaker1331 | 1:fad61b6e660b | 7 | MOTOR B |
tweaker1331 | 1:fad61b6e660b | 8 | ENB - p22 |
tweaker1331 | 1:fad61b6e660b | 9 | IN3 - p26 --> OUT3 - MOTORB+ |
tweaker1331 | 1:fad61b6e660b | 10 | IN4 - p25 --> OUT4 - MOTORB- |
tweaker1331 | 1:fad61b6e660b | 11 | */ |
tweaker1331 | 1:fad61b6e660b | 12 | |
tweaker1331 | 2:7ca8b2154664 | 13 | Timeout systicker; |
tweaker1331 | 2:7ca8b2154664 | 14 | |
tweaker1331 | 1:fad61b6e660b | 15 | PwmOut in1(p5); |
tweaker1331 | 1:fad61b6e660b | 16 | PwmOut in2(p6); |
tweaker1331 | 1:fad61b6e660b | 17 | |
tweaker1331 | 1:fad61b6e660b | 18 | PwmOut in3(p26); |
tweaker1331 | 1:fad61b6e660b | 19 | PwmOut in4(p25); |
tweaker1331 | 1:fad61b6e660b | 20 | |
tweaker1331 | 1:fad61b6e660b | 21 | DigitalOut en_a(p21); |
tweaker1331 | 1:fad61b6e660b | 22 | DigitalOut en_b(p22); |
tweaker1331 | 1:fad61b6e660b | 23 | |
tweaker1331 | 3:ce51f3857195 | 24 | DigitalOut led1(LED1); |
tweaker1331 | 3:ce51f3857195 | 25 | DigitalOut led2(LED2); |
tweaker1331 | 3:ce51f3857195 | 26 | DigitalOut led3(LED3); |
tweaker1331 | 3:ce51f3857195 | 27 | DigitalOut led4(LED4); |
tweaker1331 | 3:ce51f3857195 | 28 | |
tweaker1331 | 3:ce51f3857195 | 29 | AnalogIn collision(p15); |
tweaker1331 | 3:ce51f3857195 | 30 | |
tweaker1331 | 3:ce51f3857195 | 31 | DigitalOut sirene(p19); |
tweaker1331 | 3:ce51f3857195 | 32 | DigitalOut lights(p20); |
tweaker1331 | 1:fad61b6e660b | 33 | |
tweaker1331 | 1:fad61b6e660b | 34 | Serial bluetooth(p9, p10); |
tweaker1331 | 3:ce51f3857195 | 35 | //Serial pc(USBTX, USBRX); |
tweaker1331 | 2:7ca8b2154664 | 36 | |
tweaker1331 | 3:ce51f3857195 | 37 | static int control_state = 0; // When 0, allow bluetooth control, When 1 disable bluetooth control |
tweaker1331 | 1:fad61b6e660b | 38 | |
tweaker1331 | 3:ce51f3857195 | 39 | void reset_LED() |
tweaker1331 | 2:7ca8b2154664 | 40 | { |
tweaker1331 | 3:ce51f3857195 | 41 | led1.write(0); |
tweaker1331 | 3:ce51f3857195 | 42 | led2.write(0); |
tweaker1331 | 3:ce51f3857195 | 43 | led3.write(0); |
tweaker1331 | 3:ce51f3857195 | 44 | led4.write(0); |
tweaker1331 | 3:ce51f3857195 | 45 | } |
tweaker1331 | 3:ce51f3857195 | 46 | |
tweaker1331 | 3:ce51f3857195 | 47 | void TimeOut_handler() |
tweaker1331 | 3:ce51f3857195 | 48 | { |
tweaker1331 | 3:ce51f3857195 | 49 | in1.write(0.0); |
tweaker1331 | 3:ce51f3857195 | 50 | in2.write(0.0); |
tweaker1331 | 3:ce51f3857195 | 51 | in3.write(0.0); |
tweaker1331 | 3:ce51f3857195 | 52 | in4.write(0.0); |
tweaker1331 | 3:ce51f3857195 | 53 | reset_LED(); |
tweaker1331 | 2:7ca8b2154664 | 54 | } |
tweaker1331 | 1:fad61b6e660b | 55 | |
tweaker1331 | 1:fad61b6e660b | 56 | /* Initialize timers for the H-bridge*/ |
tweaker1331 | 1:fad61b6e660b | 57 | int init_drive() |
tweaker1331 | 1:fad61b6e660b | 58 | { |
tweaker1331 | 1:fad61b6e660b | 59 | // Set PWM frequency to 10 kHz |
tweaker1331 | 1:fad61b6e660b | 60 | in1.period_us(100); |
tweaker1331 | 1:fad61b6e660b | 61 | in2.period_us(100); |
tweaker1331 | 1:fad61b6e660b | 62 | in3.period_us(100); |
tweaker1331 | 1:fad61b6e660b | 63 | in4.period_us(100); |
tweaker1331 | 3:ce51f3857195 | 64 | |
tweaker1331 | 3:ce51f3857195 | 65 | in1.write(0.0); |
tweaker1331 | 3:ce51f3857195 | 66 | in2.write(0.0); |
tweaker1331 | 3:ce51f3857195 | 67 | in3.write(0.0); |
tweaker1331 | 3:ce51f3857195 | 68 | in4.write(0.0); |
tweaker1331 | 1:fad61b6e660b | 69 | /* Set enable pin high. NEVER set this pins low during driving. |
tweaker1331 | 1:fad61b6e660b | 70 | There are no protection diodes and with EN low, H-bridge is in Hi-Z mode. |
tweaker1331 | 1:fad61b6e660b | 71 | This can generate a high voltage that breaks the H-bridge.*/ |
tweaker1331 | 1:fad61b6e660b | 72 | en_a.write(1); |
tweaker1331 | 1:fad61b6e660b | 73 | en_b.write(1); |
tweaker1331 | 1:fad61b6e660b | 74 | |
tweaker1331 | 1:fad61b6e660b | 75 | return 1; |
tweaker1331 | 1:fad61b6e660b | 76 | } |
tweaker1331 | 1:fad61b6e660b | 77 | |
tweaker1331 | 1:fad61b6e660b | 78 | void rxCallback() |
tweaker1331 | 1:fad61b6e660b | 79 | { |
tweaker1331 | 3:ce51f3857195 | 80 | static int sirene_state = 0; |
tweaker1331 | 3:ce51f3857195 | 81 | static int lights_state = 0; |
tweaker1331 | 3:ce51f3857195 | 82 | |
tweaker1331 | 3:ce51f3857195 | 83 | if (control_state == 1) |
tweaker1331 | 3:ce51f3857195 | 84 | { |
tweaker1331 | 3:ce51f3857195 | 85 | return; |
tweaker1331 | 1:fad61b6e660b | 86 | } |
tweaker1331 | 3:ce51f3857195 | 87 | |
tweaker1331 | 3:ce51f3857195 | 88 | float time_out_sec = 0.1; |
tweaker1331 | 2:7ca8b2154664 | 89 | char c; |
tweaker1331 | 3:ce51f3857195 | 90 | c = bluetooth.getc(); |
tweaker1331 | 2:7ca8b2154664 | 91 | switch (c) { |
tweaker1331 | 2:7ca8b2154664 | 92 | // Forward direction |
tweaker1331 | 3:ce51f3857195 | 93 | case 'W': |
tweaker1331 | 3:ce51f3857195 | 94 | reset_LED(); |
tweaker1331 | 3:ce51f3857195 | 95 | led1.write(1); |
tweaker1331 | 2:7ca8b2154664 | 96 | in1.write(1.0); |
tweaker1331 | 2:7ca8b2154664 | 97 | in2.write(0.0); |
tweaker1331 | 3:ce51f3857195 | 98 | in3.write(0.0); |
tweaker1331 | 3:ce51f3857195 | 99 | in4.write(1.0); |
tweaker1331 | 3:ce51f3857195 | 100 | systicker.attach(&TimeOut_handler, time_out_sec); |
tweaker1331 | 2:7ca8b2154664 | 101 | break; |
tweaker1331 | 2:7ca8b2154664 | 102 | // Backward direction |
tweaker1331 | 3:ce51f3857195 | 103 | case 'S': |
tweaker1331 | 3:ce51f3857195 | 104 | reset_LED(); |
tweaker1331 | 3:ce51f3857195 | 105 | led2.write(1); |
tweaker1331 | 2:7ca8b2154664 | 106 | in1.write(0.0); |
tweaker1331 | 2:7ca8b2154664 | 107 | in2.write(1.0); |
tweaker1331 | 3:ce51f3857195 | 108 | in3.write(1.0); |
tweaker1331 | 3:ce51f3857195 | 109 | in4.write(0.0); |
tweaker1331 | 3:ce51f3857195 | 110 | systicker.attach(&TimeOut_handler, time_out_sec); |
tweaker1331 | 2:7ca8b2154664 | 111 | break; |
tweaker1331 | 2:7ca8b2154664 | 112 | // Left direction |
tweaker1331 | 3:ce51f3857195 | 113 | case 'A': |
tweaker1331 | 3:ce51f3857195 | 114 | reset_LED(); |
tweaker1331 | 3:ce51f3857195 | 115 | led3.write(1); |
tweaker1331 | 2:7ca8b2154664 | 116 | in1.write(1.0); |
tweaker1331 | 2:7ca8b2154664 | 117 | in2.write(0.0); |
tweaker1331 | 2:7ca8b2154664 | 118 | in3.write(0.0); |
tweaker1331 | 2:7ca8b2154664 | 119 | in4.write(0.0); |
tweaker1331 | 3:ce51f3857195 | 120 | systicker.attach(&TimeOut_handler, time_out_sec); |
tweaker1331 | 2:7ca8b2154664 | 121 | break; |
tweaker1331 | 3:ce51f3857195 | 122 | case 'D': |
tweaker1331 | 3:ce51f3857195 | 123 | reset_LED(); |
tweaker1331 | 3:ce51f3857195 | 124 | led4.write(1); |
tweaker1331 | 2:7ca8b2154664 | 125 | in1.write(0.0); |
tweaker1331 | 3:ce51f3857195 | 126 | in2.write(0.0); |
tweaker1331 | 2:7ca8b2154664 | 127 | in3.write(0.0); |
tweaker1331 | 3:ce51f3857195 | 128 | in4.write(1.0); |
tweaker1331 | 3:ce51f3857195 | 129 | systicker.attach(&TimeOut_handler, time_out_sec); |
tweaker1331 | 2:7ca8b2154664 | 130 | break; |
tweaker1331 | 3:ce51f3857195 | 131 | case 'g': |
tweaker1331 | 3:ce51f3857195 | 132 | if (sirene_state == 0) { |
tweaker1331 | 3:ce51f3857195 | 133 | sirene.write(0); |
tweaker1331 | 3:ce51f3857195 | 134 | sirene_state = 1; |
tweaker1331 | 3:ce51f3857195 | 135 | } else { |
tweaker1331 | 3:ce51f3857195 | 136 | sirene.write(1); |
tweaker1331 | 3:ce51f3857195 | 137 | sirene_state = 0; |
tweaker1331 | 3:ce51f3857195 | 138 | } |
tweaker1331 | 3:ce51f3857195 | 139 | break; |
tweaker1331 | 3:ce51f3857195 | 140 | case 'k': |
tweaker1331 | 3:ce51f3857195 | 141 | if (lights_state == 0) { |
tweaker1331 | 3:ce51f3857195 | 142 | lights.write(1); |
tweaker1331 | 3:ce51f3857195 | 143 | lights_state = 1; |
tweaker1331 | 3:ce51f3857195 | 144 | } else { |
tweaker1331 | 3:ce51f3857195 | 145 | lights.write(0); |
tweaker1331 | 3:ce51f3857195 | 146 | lights_state = 0; |
tweaker1331 | 3:ce51f3857195 | 147 | } |
tweaker1331 | 3:ce51f3857195 | 148 | break; |
tweaker1331 | 2:7ca8b2154664 | 149 | } |
tweaker1331 | 2:7ca8b2154664 | 150 | } |
tweaker1331 | 2:7ca8b2154664 | 151 | |
tweaker1331 | 1:fad61b6e660b | 152 | /* Initialize the bluetooth module*/ |
tweaker1331 | 1:fad61b6e660b | 153 | int init_bluetooth() |
tweaker1331 | 1:fad61b6e660b | 154 | { |
tweaker1331 | 1:fad61b6e660b | 155 | bluetooth.baud(9600); |
tweaker1331 | 1:fad61b6e660b | 156 | bluetooth.attach(&rxCallback, Serial::RxIrq); |
tweaker1331 | 1:fad61b6e660b | 157 | return 1; |
tweaker1331 | 0:9826a0b36948 | 158 | } |
tweaker1331 | 0:9826a0b36948 | 159 | |
tweaker1331 | 1:fad61b6e660b | 160 | int main() |
tweaker1331 | 1:fad61b6e660b | 161 | { |
tweaker1331 | 3:ce51f3857195 | 162 | float value=0.0; |
tweaker1331 | 3:ce51f3857195 | 163 | |
tweaker1331 | 3:ce51f3857195 | 164 | sirene.write(1); // Is switched with PNP --> High is off |
tweaker1331 | 3:ce51f3857195 | 165 | lights.write(0); // Is directly connected to IO-pin --> Low is off |
tweaker1331 | 0:9826a0b36948 | 166 | |
tweaker1331 | 0:9826a0b36948 | 167 | init_drive(); |
tweaker1331 | 3:ce51f3857195 | 168 | init_bluetooth(); |
tweaker1331 | 2:7ca8b2154664 | 169 | |
tweaker1331 | 3:ce51f3857195 | 170 | /** Collision Low == 1.2 V |
tweaker1331 | 3:ce51f3857195 | 171 | Collision High == 1.7V |
tweaker1331 | 3:ce51f3857195 | 172 | Trigger on 1.5V -> 0.45 |
tweaker1331 | 3:ce51f3857195 | 173 | */ |
tweaker1331 | 3:ce51f3857195 | 174 | while(1) { |
tweaker1331 | 3:ce51f3857195 | 175 | value = collision.read(); |
tweaker1331 | 3:ce51f3857195 | 176 | if (value >= 0.45) { |
tweaker1331 | 3:ce51f3857195 | 177 | control_state = 1; // Disable bluetooth control |
tweaker1331 | 3:ce51f3857195 | 178 | // Drive backwards for a second |
tweaker1331 | 3:ce51f3857195 | 179 | led2.write(1); |
tweaker1331 | 3:ce51f3857195 | 180 | led3.write(1); |
tweaker1331 | 3:ce51f3857195 | 181 | led4.write(1); |
tweaker1331 | 3:ce51f3857195 | 182 | led1.write(1); |
tweaker1331 | 3:ce51f3857195 | 183 | in1.write(0.0); |
tweaker1331 | 3:ce51f3857195 | 184 | in2.write(1.0); |
tweaker1331 | 3:ce51f3857195 | 185 | in3.write(1.0); |
tweaker1331 | 3:ce51f3857195 | 186 | in4.write(0.0); |
tweaker1331 | 3:ce51f3857195 | 187 | wait (1); |
tweaker1331 | 3:ce51f3857195 | 188 | reset_LED(); |
tweaker1331 | 3:ce51f3857195 | 189 | control_state = 0; // Allow bluetooth control |
tweaker1331 | 3:ce51f3857195 | 190 | } else { |
tweaker1331 | 3:ce51f3857195 | 191 | // do nothing |
tweaker1331 | 3:ce51f3857195 | 192 | } |
tweaker1331 | 1:fad61b6e660b | 193 | |
tweaker1331 | 3:ce51f3857195 | 194 | } |
tweaker1331 | 1:fad61b6e660b | 195 | } |