Ward Broughton / Mbed 2 deprecated Unit58_Traffic_Lights_group2

Dependencies:   mbed

Committer:
WardieB
Date:
Thu Dec 03 10:27:31 2015 +0000
Revision:
0:1157a4aa1042
HND Electronics Project

Who changed what in which revision?

UserRevisionLine numberNew 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 }