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.
main.cpp@0:1157a4aa1042, 2015-12-03 (annotated)
- Committer:
- WardieB
- Date:
- Thu Dec 03 10:27:31 2015 +0000
- Revision:
- 0:1157a4aa1042
HND Electronics Project
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| WardieB | 0:1157a4aa1042 | 1 | // Trafic Light Program |
| WardieB | 0:1157a4aa1042 | 2 | // |
| WardieB | 0:1157a4aa1042 | 3 | // HND Electronics |
| WardieB | 0:1157a4aa1042 | 4 | // |
| WardieB | 0:1157a4aa1042 | 5 | // Coleg Gwent |
| WardieB | 0:1157a4aa1042 | 6 | |
| WardieB | 0:1157a4aa1042 | 7 | #include "mbed.h" |
| WardieB | 0:1157a4aa1042 | 8 | |
| WardieB | 0:1157a4aa1042 | 9 | |
| WardieB | 0:1157a4aa1042 | 10 | //Traffic Lights |
| WardieB | 0:1157a4aa1042 | 11 | // R,Y,G R,Y,G |
| WardieB | 0:1157a4aa1042 | 12 | BusOut leds(p5,p6,p7,p8,p9,p10); |
| WardieB | 0:1157a4aa1042 | 13 | |
| WardieB | 0:1157a4aa1042 | 14 | // 7 seg Display |
| WardieB | 0:1157a4aa1042 | 15 | BusOut disp1(p11,p12,p13,p14,p15,p16,p17); |
| WardieB | 0:1157a4aa1042 | 16 | // A B C D E F G |
| WardieB | 0:1157a4aa1042 | 17 | |
| WardieB | 0:1157a4aa1042 | 18 | // 7 seg Dispay |
| WardieB | 0:1157a4aa1042 | 19 | BusOut disp2(p21,p22,p23,p24,p25,p26,p27); |
| WardieB | 0:1157a4aa1042 | 20 | // A B C D E F G |
| WardieB | 0:1157a4aa1042 | 21 | |
| WardieB | 0:1157a4aa1042 | 22 | |
| WardieB | 0:1157a4aa1042 | 23 | //Test Leds - for debugging |
| WardieB | 0:1157a4aa1042 | 24 | DigitalOut myLED1(LED1); |
| WardieB | 0:1157a4aa1042 | 25 | DigitalOut myLED2(LED2); |
| WardieB | 0:1157a4aa1042 | 26 | |
| WardieB | 0:1157a4aa1042 | 27 | |
| WardieB | 0:1157a4aa1042 | 28 | |
| WardieB | 0:1157a4aa1042 | 29 | int valdisp =0; |
| WardieB | 0:1157a4aa1042 | 30 | |
| WardieB | 0:1157a4aa1042 | 31 | //using MAN74A seven seg display |
| WardieB | 0:1157a4aa1042 | 32 | //set up each number in an array |
| WardieB | 0:1157a4aa1042 | 33 | int numb[10][7]={{1,1,1,1,1,1,0}, |
| WardieB | 0:1157a4aa1042 | 34 | {0,1,1,0,0,0,0}, |
| WardieB | 0:1157a4aa1042 | 35 | {1,1,0,1,1,0,1}, |
| WardieB | 0:1157a4aa1042 | 36 | {1,1,1,1,0,0,1}, |
| WardieB | 0:1157a4aa1042 | 37 | {0,1,1,0,0,1,1}, |
| WardieB | 0:1157a4aa1042 | 38 | {1,0,1,1,0,1,1}, |
| WardieB | 0:1157a4aa1042 | 39 | {1,0,1,1,1,1,1}, |
| WardieB | 0:1157a4aa1042 | 40 | {1,1,1,0,0,0,0}, |
| WardieB | 0:1157a4aa1042 | 41 | {1,1,1,1,1,1,1}, |
| WardieB | 0:1157a4aa1042 | 42 | {1,1,1,1,0,1,1}}; |
| WardieB | 0:1157a4aa1042 | 43 | |
| WardieB | 0:1157a4aa1042 | 44 | |
| WardieB | 0:1157a4aa1042 | 45 | //Traffic light sequence |
| WardieB | 0:1157a4aa1042 | 46 | int nLights[] = {0x09,0x19,0x21,0x11,0x09,0x0B,0x0C,0x0A}; |
| WardieB | 0:1157a4aa1042 | 47 | |
| WardieB | 0:1157a4aa1042 | 48 | |
| WardieB | 0:1157a4aa1042 | 49 | // Switch inputs |
| WardieB | 0:1157a4aa1042 | 50 | DigitalIn man(p28); |
| WardieB | 0:1157a4aa1042 | 51 | DigitalIn dir(p29); |
| WardieB | 0:1157a4aa1042 | 52 | |
| WardieB | 0:1157a4aa1042 | 53 | |
| WardieB | 0:1157a4aa1042 | 54 | // Analog input to set time |
| WardieB | 0:1157a4aa1042 | 55 | AnalogIn timeIn(p19); |
| WardieB | 0:1157a4aa1042 | 56 | |
| WardieB | 0:1157a4aa1042 | 57 | int state; |
| WardieB | 0:1157a4aa1042 | 58 | |
| WardieB | 0:1157a4aa1042 | 59 | int waitTime = 0; |
| WardieB | 0:1157a4aa1042 | 60 | |
| WardieB | 0:1157a4aa1042 | 61 | void displayWait() { |
| WardieB | 0:1157a4aa1042 | 62 | |
| WardieB | 0:1157a4aa1042 | 63 | waitTime = timeIn*99; |
| WardieB | 0:1157a4aa1042 | 64 | |
| WardieB | 0:1157a4aa1042 | 65 | // display number UNITS |
| WardieB | 0:1157a4aa1042 | 66 | for (int i = 0 ;i < 7; i++) |
| WardieB | 0:1157a4aa1042 | 67 | { |
| WardieB | 0:1157a4aa1042 | 68 | disp2[i]=(numb[waitTime%10][i]); |
| WardieB | 0:1157a4aa1042 | 69 | } |
| WardieB | 0:1157a4aa1042 | 70 | // display number TENS |
| WardieB | 0:1157a4aa1042 | 71 | for (int i = 0 ;i < 7; i++) |
| WardieB | 0:1157a4aa1042 | 72 | { |
| WardieB | 0:1157a4aa1042 | 73 | disp1[i]=(numb[waitTime/10][i]); |
| WardieB | 0:1157a4aa1042 | 74 | } |
| WardieB | 0:1157a4aa1042 | 75 | } |
| WardieB | 0:1157a4aa1042 | 76 | |
| WardieB | 0:1157a4aa1042 | 77 | int main() { |
| WardieB | 0:1157a4aa1042 | 78 | while(1) { |
| WardieB | 0:1157a4aa1042 | 79 | |
| WardieB | 0:1157a4aa1042 | 80 | while (!man) { |
| WardieB | 0:1157a4aa1042 | 81 | // if in AUTO mode |
| WardieB | 0:1157a4aa1042 | 82 | // In AUTO mode sequence through the lights |
| WardieB | 0:1157a4aa1042 | 83 | leds = nLights[state]; |
| WardieB | 0:1157a4aa1042 | 84 | displayWait(); |
| WardieB | 0:1157a4aa1042 | 85 | if (state%2 == 0) wait(waitTime/10); //Only long Waits on Even states |
| WardieB | 0:1157a4aa1042 | 86 | wait(1); |
| WardieB | 0:1157a4aa1042 | 87 | state++; |
| WardieB | 0:1157a4aa1042 | 88 | if (state==8) state=0; |
| WardieB | 0:1157a4aa1042 | 89 | } |
| WardieB | 0:1157a4aa1042 | 90 | |
| WardieB | 0:1157a4aa1042 | 91 | // While Auto loop over now in manual |
| WardieB | 0:1157a4aa1042 | 92 | { |
| WardieB | 0:1157a4aa1042 | 93 | |
| WardieB | 0:1157a4aa1042 | 94 | if (dir){ |
| WardieB | 0:1157a4aa1042 | 95 | // Direction 1 |
| WardieB | 0:1157a4aa1042 | 96 | wait(1); |
| WardieB | 0:1157a4aa1042 | 97 | leds = nLights[1]; //RED, RED AMBER |
| WardieB | 0:1157a4aa1042 | 98 | wait(1); |
| WardieB | 0:1157a4aa1042 | 99 | leds = nLights[2]; //RED, GREEN |
| WardieB | 0:1157a4aa1042 | 100 | // Stay on Green until direction changed or Automode selected |
| WardieB | 0:1157a4aa1042 | 101 | while (dir && man){displayWait(); } |
| WardieB | 0:1157a4aa1042 | 102 | leds = nLights[3]; //RED, RED AMBER |
| WardieB | 0:1157a4aa1042 | 103 | wait(1); |
| WardieB | 0:1157a4aa1042 | 104 | // set the state to 4 for the AUTO routine |
| WardieB | 0:1157a4aa1042 | 105 | state=4; |
| WardieB | 0:1157a4aa1042 | 106 | } |
| WardieB | 0:1157a4aa1042 | 107 | else |
| WardieB | 0:1157a4aa1042 | 108 | { |
| WardieB | 0:1157a4aa1042 | 109 | // Direction 2 |
| WardieB | 0:1157a4aa1042 | 110 | wait(1); |
| WardieB | 0:1157a4aa1042 | 111 | leds = nLights[5]; //RED AMBER, RED |
| WardieB | 0:1157a4aa1042 | 112 | wait(1); |
| WardieB | 0:1157a4aa1042 | 113 | leds = nLights[6]; //GREEN, GREEN |
| WardieB | 0:1157a4aa1042 | 114 | |
| WardieB | 0:1157a4aa1042 | 115 | // Stay on Green until direction changed or Automode selected |
| WardieB | 0:1157a4aa1042 | 116 | while (!dir && man){displayWait(); } |
| WardieB | 0:1157a4aa1042 | 117 | leds = nLights[7]; //RED AMBER, RED |
| WardieB | 0:1157a4aa1042 | 118 | wait(1); |
| WardieB | 0:1157a4aa1042 | 119 | // set the state to 0 for the AUTO routine |
| WardieB | 0:1157a4aa1042 | 120 | state=0; |
| WardieB | 0:1157a4aa1042 | 121 | } |
| WardieB | 0:1157a4aa1042 | 122 | displayWait(); |
| WardieB | 0:1157a4aa1042 | 123 | leds = nLights[0]; //Always go to Red Red when not in loop |
| WardieB | 0:1157a4aa1042 | 124 | wait(timeIn *9); // wait on Red for road distance wait |
| WardieB | 0:1157a4aa1042 | 125 | } |
| WardieB | 0:1157a4aa1042 | 126 | |
| WardieB | 0:1157a4aa1042 | 127 | } |
| WardieB | 0:1157a4aa1042 | 128 | } |