Solutions for the Multi LED experiments for LPC812 MAX

Dependencies:   mbed

Committer:
embeddedartists
Date:
Fri Nov 22 09:49:35 2013 +0000
Revision:
1:924060a1cf7c
Parent:
0:341d9b1d4081
Small fixes

Who changed what in which revision?

UserRevisionLine numberNew contents of line
embeddedartists 0:341d9b1d4081 1 #include "mbed.h"
embeddedartists 0:341d9b1d4081 2
embeddedartists 0:341d9b1d4081 3 DigitalIn button1(D0);
embeddedartists 0:341d9b1d4081 4 DigitalIn button2(D1);
embeddedartists 0:341d9b1d4081 5 DigitalIn button3(D3);
embeddedartists 0:341d9b1d4081 6
embeddedartists 0:341d9b1d4081 7 DigitalOut led1(D8);
embeddedartists 0:341d9b1d4081 8 DigitalOut led2(D9);
embeddedartists 0:341d9b1d4081 9 DigitalOut led3(D10);
embeddedartists 0:341d9b1d4081 10 DigitalOut led4(D11);
embeddedartists 0:341d9b1d4081 11 DigitalOut led5(D12);
embeddedartists 0:341d9b1d4081 12 DigitalOut led6(D13);
embeddedartists 0:341d9b1d4081 13
embeddedartists 0:341d9b1d4081 14 static void experiment1_alt1()
embeddedartists 0:341d9b1d4081 15 {
embeddedartists 0:341d9b1d4081 16 int state = 0;
embeddedartists 0:341d9b1d4081 17
embeddedartists 0:341d9b1d4081 18 // Set LED start values
embeddedartists 0:341d9b1d4081 19 led1 = 1;
embeddedartists 0:341d9b1d4081 20 led2 = 1;
embeddedartists 0:341d9b1d4081 21 led3 = 1;
embeddedartists 0:341d9b1d4081 22 led4 = 1;
embeddedartists 0:341d9b1d4081 23 led5 = 1;
embeddedartists 0:341d9b1d4081 24 led6 = 1;
embeddedartists 0:341d9b1d4081 25
embeddedartists 0:341d9b1d4081 26 // Enable buttons
embeddedartists 0:341d9b1d4081 27 button1.mode(PullUp);
embeddedartists 0:341d9b1d4081 28
embeddedartists 0:341d9b1d4081 29 // Enter forever loop
embeddedartists 0:341d9b1d4081 30 while(1) {
embeddedartists 0:341d9b1d4081 31 // Delay a specified period of time or wait for push-button to be pressed
embeddedartists 0:341d9b1d4081 32 wait(0.1);
embeddedartists 0:341d9b1d4081 33
embeddedartists 0:341d9b1d4081 34 // Update state/counter
embeddedartists 0:341d9b1d4081 35 state = (state + 1) % 6;
embeddedartists 0:341d9b1d4081 36
embeddedartists 0:341d9b1d4081 37 // Reset all outputs
embeddedartists 1:924060a1cf7c 38 led1 = led2 = led3 = led4 = led5 = led6 = 1;
embeddedartists 0:341d9b1d4081 39
embeddedartists 0:341d9b1d4081 40 // Set only the active output
embeddedartists 0:341d9b1d4081 41 switch(state) {
embeddedartists 0:341d9b1d4081 42 case 0:
embeddedartists 0:341d9b1d4081 43 led1 = 0;
embeddedartists 0:341d9b1d4081 44 break;
embeddedartists 0:341d9b1d4081 45 case 1:
embeddedartists 0:341d9b1d4081 46 led2 = 0;
embeddedartists 0:341d9b1d4081 47 break;
embeddedartists 0:341d9b1d4081 48 case 2:
embeddedartists 0:341d9b1d4081 49 led3 = 0;
embeddedartists 0:341d9b1d4081 50 break;
embeddedartists 0:341d9b1d4081 51 case 3:
embeddedartists 0:341d9b1d4081 52 led4 = 0;
embeddedartists 0:341d9b1d4081 53 break;
embeddedartists 0:341d9b1d4081 54 case 4:
embeddedartists 0:341d9b1d4081 55 led5 = 0;
embeddedartists 0:341d9b1d4081 56 break;
embeddedartists 0:341d9b1d4081 57 case 5:
embeddedartists 0:341d9b1d4081 58 led6 = 0;
embeddedartists 0:341d9b1d4081 59 break;
embeddedartists 0:341d9b1d4081 60 }
embeddedartists 0:341d9b1d4081 61 }
embeddedartists 0:341d9b1d4081 62 }
embeddedartists 0:341d9b1d4081 63
embeddedartists 0:341d9b1d4081 64 static void experiment1_alt2()
embeddedartists 0:341d9b1d4081 65 {
embeddedartists 0:341d9b1d4081 66 int state = 0;
embeddedartists 0:341d9b1d4081 67
embeddedartists 0:341d9b1d4081 68 // Set LED start values
embeddedartists 0:341d9b1d4081 69 led1 = led2 = led3 = led4 = led5 = led6 = 1;
embeddedartists 0:341d9b1d4081 70
embeddedartists 0:341d9b1d4081 71 // Enable buttons
embeddedartists 0:341d9b1d4081 72 button1.mode(PullUp);
embeddedartists 0:341d9b1d4081 73
embeddedartists 0:341d9b1d4081 74 // Enter forever loop
embeddedartists 0:341d9b1d4081 75 while(1) {
embeddedartists 0:341d9b1d4081 76 // Delay a specified period of time or wait for push-button to be pressed
embeddedartists 0:341d9b1d4081 77 wait(0.1);
embeddedartists 0:341d9b1d4081 78
embeddedartists 0:341d9b1d4081 79 // Update state/counter
embeddedartists 0:341d9b1d4081 80 state = (state + 1) % 6;
embeddedartists 0:341d9b1d4081 81
embeddedartists 0:341d9b1d4081 82 //Set and reset the outputs
embeddedartists 0:341d9b1d4081 83 switch(state) {
embeddedartists 0:341d9b1d4081 84 case 0:
embeddedartists 0:341d9b1d4081 85 led2 = led3 = led4 = led5 = led6 = 1;
embeddedartists 0:341d9b1d4081 86 led1 = 0;
embeddedartists 0:341d9b1d4081 87 break;
embeddedartists 0:341d9b1d4081 88 case 1:
embeddedartists 0:341d9b1d4081 89 led1 = led3 = led4 = led5 = led6 = 1;
embeddedartists 0:341d9b1d4081 90 led2 = 0;
embeddedartists 0:341d9b1d4081 91 break;
embeddedartists 0:341d9b1d4081 92 case 2:
embeddedartists 0:341d9b1d4081 93 led1 = led2 = led4 = led5 = led6 = 1;
embeddedartists 0:341d9b1d4081 94 led3 = 0;
embeddedartists 0:341d9b1d4081 95 break;
embeddedartists 0:341d9b1d4081 96 case 3:
embeddedartists 0:341d9b1d4081 97 led1 = led2 = led3 = led5 = led6 = 1;
embeddedartists 0:341d9b1d4081 98 led4 = 0;
embeddedartists 0:341d9b1d4081 99 break;
embeddedartists 0:341d9b1d4081 100 case 4:
embeddedartists 0:341d9b1d4081 101 led1 = led2 = led3 = led4 = led6 = 1;
embeddedartists 0:341d9b1d4081 102 led5 = 0;
embeddedartists 0:341d9b1d4081 103 break;
embeddedartists 0:341d9b1d4081 104 case 5:
embeddedartists 0:341d9b1d4081 105 led1 = led2 = led3 = led4 = led5 = 1;
embeddedartists 0:341d9b1d4081 106 led6 = 0;
embeddedartists 0:341d9b1d4081 107 break;
embeddedartists 0:341d9b1d4081 108 }
embeddedartists 0:341d9b1d4081 109 }
embeddedartists 0:341d9b1d4081 110 }
embeddedartists 0:341d9b1d4081 111
embeddedartists 0:341d9b1d4081 112 static void experiment1_alt3()
embeddedartists 0:341d9b1d4081 113 {
embeddedartists 0:341d9b1d4081 114 int state = 0;
embeddedartists 0:341d9b1d4081 115
embeddedartists 0:341d9b1d4081 116 // Set LED start values
embeddedartists 0:341d9b1d4081 117 led1 = led2 = led3 = led4 = led5 = led6 = 1;
embeddedartists 0:341d9b1d4081 118
embeddedartists 0:341d9b1d4081 119 // Enable buttons
embeddedartists 0:341d9b1d4081 120 button1.mode(PullUp);
embeddedartists 0:341d9b1d4081 121
embeddedartists 0:341d9b1d4081 122 // Enter forever loop
embeddedartists 0:341d9b1d4081 123 while(1) {
embeddedartists 0:341d9b1d4081 124 // Wait for push-button to be pressed
embeddedartists 0:341d9b1d4081 125 while(button1) {
embeddedartists 0:341d9b1d4081 126 }
embeddedartists 0:341d9b1d4081 127 while(!button1) {
embeddedartists 0:341d9b1d4081 128 }
embeddedartists 0:341d9b1d4081 129
embeddedartists 0:341d9b1d4081 130 // Update state/counter
embeddedartists 0:341d9b1d4081 131 state = (state + 1) % 6;
embeddedartists 0:341d9b1d4081 132
embeddedartists 0:341d9b1d4081 133 //Set and reset the outputs
embeddedartists 0:341d9b1d4081 134 switch(state) {
embeddedartists 0:341d9b1d4081 135 case 0:
embeddedartists 0:341d9b1d4081 136 led2 = led3 = led4 = led5 = led6 = 1;
embeddedartists 0:341d9b1d4081 137 led1 = 0;
embeddedartists 0:341d9b1d4081 138 break;
embeddedartists 0:341d9b1d4081 139 case 1:
embeddedartists 0:341d9b1d4081 140 led1 = led3 = led4 = led5 = led6 = 1;
embeddedartists 0:341d9b1d4081 141 led2 = 0;
embeddedartists 0:341d9b1d4081 142 break;
embeddedartists 0:341d9b1d4081 143 case 2:
embeddedartists 0:341d9b1d4081 144 led1 = led2 = led4 = led5 = led6 = 1;
embeddedartists 0:341d9b1d4081 145 led3 = 0;
embeddedartists 0:341d9b1d4081 146 break;
embeddedartists 0:341d9b1d4081 147 case 3:
embeddedartists 0:341d9b1d4081 148 led1 = led2 = led3 = led5 = led6 = 1;
embeddedartists 0:341d9b1d4081 149 led4 = 0;
embeddedartists 0:341d9b1d4081 150 break;
embeddedartists 0:341d9b1d4081 151 case 4:
embeddedartists 0:341d9b1d4081 152 led1 = led2 = led3 = led4 = led6 = 1;
embeddedartists 0:341d9b1d4081 153 led5 = 0;
embeddedartists 0:341d9b1d4081 154 break;
embeddedartists 0:341d9b1d4081 155 case 5:
embeddedartists 0:341d9b1d4081 156 led1 = led2 = led3 = led4 = led5 = 1;
embeddedartists 0:341d9b1d4081 157 led6 = 0;
embeddedartists 0:341d9b1d4081 158 break;
embeddedartists 0:341d9b1d4081 159 }
embeddedartists 0:341d9b1d4081 160 }
embeddedartists 0:341d9b1d4081 161 }
embeddedartists 0:341d9b1d4081 162
embeddedartists 0:341d9b1d4081 163 static void experiment1_alt4()
embeddedartists 0:341d9b1d4081 164 {
embeddedartists 0:341d9b1d4081 165 int state = 0;
embeddedartists 0:341d9b1d4081 166 int waited = 0;
embeddedartists 0:341d9b1d4081 167
embeddedartists 0:341d9b1d4081 168 // Set LED start values
embeddedartists 0:341d9b1d4081 169 led1 = led2 = led3 = led4 = led5 = led6 = 1;
embeddedartists 0:341d9b1d4081 170
embeddedartists 0:341d9b1d4081 171 // Enable buttons
embeddedartists 0:341d9b1d4081 172 button1.mode(PullUp);
embeddedartists 0:341d9b1d4081 173
embeddedartists 0:341d9b1d4081 174 // Enter forever loop
embeddedartists 0:341d9b1d4081 175 while(1) {
embeddedartists 0:341d9b1d4081 176 // Delay a specified period of time or wait for push-button to be pressed
embeddedartists 0:341d9b1d4081 177 if (button1) {
embeddedartists 0:341d9b1d4081 178 // button is not pressed so we wait 10ms more
embeddedartists 0:341d9b1d4081 179 wait_ms(10);
embeddedartists 0:341d9b1d4081 180 waited += 10;
embeddedartists 0:341d9b1d4081 181 if (waited < 5000) {
embeddedartists 0:341d9b1d4081 182 // have not waited 5 seconds yet
embeddedartists 0:341d9b1d4081 183 continue;
embeddedartists 0:341d9b1d4081 184 }
embeddedartists 1:924060a1cf7c 185 } else {
embeddedartists 1:924060a1cf7c 186 // wait for button to be released
embeddedartists 1:924060a1cf7c 187 while(!button1) {
embeddedartists 1:924060a1cf7c 188 }
embeddedartists 0:341d9b1d4081 189 }
embeddedartists 0:341d9b1d4081 190
embeddedartists 0:341d9b1d4081 191 // ended up here either because the user pressed the button or 5 seconds have passed
embeddedartists 0:341d9b1d4081 192 waited = 0;
embeddedartists 0:341d9b1d4081 193
embeddedartists 0:341d9b1d4081 194 // Update state/counter
embeddedartists 0:341d9b1d4081 195 state = (state + 1) % 6;
embeddedartists 0:341d9b1d4081 196
embeddedartists 0:341d9b1d4081 197 //Set and reset the outputs
embeddedartists 0:341d9b1d4081 198 switch(state) {
embeddedartists 0:341d9b1d4081 199 case 0:
embeddedartists 0:341d9b1d4081 200 led2 = led3 = led4 = led5 = led6 = 1;
embeddedartists 0:341d9b1d4081 201 led1 = 0;
embeddedartists 0:341d9b1d4081 202 break;
embeddedartists 0:341d9b1d4081 203 case 1:
embeddedartists 0:341d9b1d4081 204 led1 = led3 = led4 = led5 = led6 = 1;
embeddedartists 0:341d9b1d4081 205 led2 = 0;
embeddedartists 0:341d9b1d4081 206 break;
embeddedartists 0:341d9b1d4081 207 case 2:
embeddedartists 0:341d9b1d4081 208 led1 = led2 = led4 = led5 = led6 = 1;
embeddedartists 0:341d9b1d4081 209 led3 = 0;
embeddedartists 0:341d9b1d4081 210 break;
embeddedartists 0:341d9b1d4081 211 case 3:
embeddedartists 0:341d9b1d4081 212 led1 = led2 = led3 = led5 = led6 = 1;
embeddedartists 0:341d9b1d4081 213 led4 = 0;
embeddedartists 0:341d9b1d4081 214 break;
embeddedartists 0:341d9b1d4081 215 case 4:
embeddedartists 0:341d9b1d4081 216 led1 = led2 = led3 = led4 = led6 = 1;
embeddedartists 0:341d9b1d4081 217 led5 = 0;
embeddedartists 0:341d9b1d4081 218 break;
embeddedartists 0:341d9b1d4081 219 case 5:
embeddedartists 0:341d9b1d4081 220 led1 = led2 = led3 = led4 = led5 = 1;
embeddedartists 0:341d9b1d4081 221 led6 = 0;
embeddedartists 0:341d9b1d4081 222 break;
embeddedartists 0:341d9b1d4081 223 }
embeddedartists 0:341d9b1d4081 224 }
embeddedartists 0:341d9b1d4081 225 }
embeddedartists 0:341d9b1d4081 226
embeddedartists 0:341d9b1d4081 227 static void experiment2()
embeddedartists 0:341d9b1d4081 228 {
embeddedartists 0:341d9b1d4081 229 bool started = true;
embeddedartists 0:341d9b1d4081 230 bool flowdown = true;
embeddedartists 1:924060a1cf7c 231 int speed = 1;
embeddedartists 0:341d9b1d4081 232 int state = 0;
embeddedartists 0:341d9b1d4081 233 int waited = 0;
embeddedartists 0:341d9b1d4081 234
embeddedartists 0:341d9b1d4081 235 // Set LED start values
embeddedartists 0:341d9b1d4081 236 led1 = led2 = led3 = led4 = led5 = led6 = 1;
embeddedartists 0:341d9b1d4081 237
embeddedartists 0:341d9b1d4081 238 // Enable buttons
embeddedartists 0:341d9b1d4081 239 button1.mode(PullUp); // increase speed
embeddedartists 0:341d9b1d4081 240 button2.mode(PullUp); // direction control
embeddedartists 0:341d9b1d4081 241 button3.mode(PullUp); // start/stop
embeddedartists 0:341d9b1d4081 242
embeddedartists 0:341d9b1d4081 243 // Enter forever loop
embeddedartists 0:341d9b1d4081 244 while(1) {
embeddedartists 0:341d9b1d4081 245 wait_ms(10);
embeddedartists 0:341d9b1d4081 246 waited += 10;
embeddedartists 0:341d9b1d4081 247
embeddedartists 0:341d9b1d4081 248 // Detect if the sequence should be started/stopped
embeddedartists 1:924060a1cf7c 249 if (!button3) {
embeddedartists 1:924060a1cf7c 250 while(!button3) {
embeddedartists 1:924060a1cf7c 251 }
embeddedartists 1:924060a1cf7c 252 if (started) {
embeddedartists 1:924060a1cf7c 253 started = false;
embeddedartists 1:924060a1cf7c 254 continue;
embeddedartists 1:924060a1cf7c 255 } else {
embeddedartists 1:924060a1cf7c 256 started = true;
embeddedartists 1:924060a1cf7c 257 waited = 0;
embeddedartists 1:924060a1cf7c 258 }
embeddedartists 1:924060a1cf7c 259 }
embeddedartists 1:924060a1cf7c 260 if (!started) {
embeddedartists 0:341d9b1d4081 261 continue;
embeddedartists 0:341d9b1d4081 262 }
embeddedartists 0:341d9b1d4081 263
embeddedartists 1:924060a1cf7c 264 // Detect direction change (and wait for user to let go of button)
embeddedartists 0:341d9b1d4081 265 if (!button2) {
embeddedartists 0:341d9b1d4081 266 flowdown = !flowdown;
embeddedartists 0:341d9b1d4081 267 while(!button2) {
embeddedartists 0:341d9b1d4081 268 }
embeddedartists 0:341d9b1d4081 269 }
embeddedartists 0:341d9b1d4081 270
embeddedartists 0:341d9b1d4081 271 // Detect speed change (increase one step per button press and reset
embeddedartists 0:341d9b1d4081 272 // when max is reached)
embeddedartists 0:341d9b1d4081 273 if (!button1) {
embeddedartists 1:924060a1cf7c 274 speed = (speed + 4) % 5;
embeddedartists 0:341d9b1d4081 275 while(!button1) {
embeddedartists 0:341d9b1d4081 276 }
embeddedartists 0:341d9b1d4081 277 }
embeddedartists 0:341d9b1d4081 278
embeddedartists 0:341d9b1d4081 279 // If we have not waited enough (based on current speed) then wait some more
embeddedartists 1:924060a1cf7c 280 if (waited < (500 * speed)) {
embeddedartists 0:341d9b1d4081 281 continue;
embeddedartists 0:341d9b1d4081 282 }
embeddedartists 1:924060a1cf7c 283 waited = 0;
embeddedartists 0:341d9b1d4081 284
embeddedartists 0:341d9b1d4081 285 // Update state/counter based on direction
embeddedartists 0:341d9b1d4081 286 if (flowdown) {
embeddedartists 0:341d9b1d4081 287 state = (state + 1) % 6;
embeddedartists 0:341d9b1d4081 288 } else {
embeddedartists 0:341d9b1d4081 289 state = (state + 5) % 6;
embeddedartists 0:341d9b1d4081 290 }
embeddedartists 0:341d9b1d4081 291
embeddedartists 0:341d9b1d4081 292 //Set and reset the outputs
embeddedartists 0:341d9b1d4081 293 switch(state) {
embeddedartists 0:341d9b1d4081 294 case 0:
embeddedartists 0:341d9b1d4081 295 led2 = led3 = led4 = led5 = led6 = 1;
embeddedartists 0:341d9b1d4081 296 led1 = 0;
embeddedartists 0:341d9b1d4081 297 break;
embeddedartists 0:341d9b1d4081 298 case 1:
embeddedartists 0:341d9b1d4081 299 led1 = led3 = led4 = led5 = led6 = 1;
embeddedartists 0:341d9b1d4081 300 led2 = 0;
embeddedartists 0:341d9b1d4081 301 break;
embeddedartists 0:341d9b1d4081 302 case 2:
embeddedartists 0:341d9b1d4081 303 led1 = led2 = led4 = led5 = led6 = 1;
embeddedartists 0:341d9b1d4081 304 led3 = 0;
embeddedartists 0:341d9b1d4081 305 break;
embeddedartists 0:341d9b1d4081 306 case 3:
embeddedartists 0:341d9b1d4081 307 led1 = led2 = led3 = led5 = led6 = 1;
embeddedartists 0:341d9b1d4081 308 led4 = 0;
embeddedartists 0:341d9b1d4081 309 break;
embeddedartists 0:341d9b1d4081 310 case 4:
embeddedartists 0:341d9b1d4081 311 led1 = led2 = led3 = led4 = led6 = 1;
embeddedartists 0:341d9b1d4081 312 led5 = 0;
embeddedartists 0:341d9b1d4081 313 break;
embeddedartists 0:341d9b1d4081 314 case 5:
embeddedartists 0:341d9b1d4081 315 led1 = led2 = led3 = led4 = led5 = 1;
embeddedartists 0:341d9b1d4081 316 led6 = 0;
embeddedartists 0:341d9b1d4081 317 break;
embeddedartists 0:341d9b1d4081 318 }
embeddedartists 0:341d9b1d4081 319 }
embeddedartists 0:341d9b1d4081 320 }
embeddedartists 0:341d9b1d4081 321
embeddedartists 0:341d9b1d4081 322 int main()
embeddedartists 0:341d9b1d4081 323 {
embeddedartists 1:924060a1cf7c 324 //experiment1_alt1(); // one way of controlling the LEDs
embeddedartists 1:924060a1cf7c 325 //experiment1_alt2(); // another way of controlling the LEDs
embeddedartists 1:924060a1cf7c 326 //experiment1_alt3(); // wait for button press
embeddedartists 1:924060a1cf7c 327 //experiment1_alt4(); // wait for button press or timeout
embeddedartists 0:341d9b1d4081 328 experiment2();
embeddedartists 0:341d9b1d4081 329 }