compilable code before testing

Dependencies:   4DGL-uLCD-SE EthernetInterface PinDetect mbed-rtos mbed

Committer:
landes
Date:
Wed Oct 21 21:56:10 2015 +0000
Revision:
0:a66216813d00
Child:
2:50b6517bcae4
first commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
landes 0:a66216813d00 1 #include "mbed.h"
landes 0:a66216813d00 2 #include "rtos.h"
landes 0:a66216813d00 3 #include "uLCD_4DGL.h"
landes 0:a66216813d00 4 //#include "SDFileSystem.h"
landes 0:a66216813d00 5 //#include "wave_player.h"
landes 0:a66216813d00 6 #include "SongPlayer.h"
landes 0:a66216813d00 7 #include "PinDetect.h"
landes 0:a66216813d00 8 #include "string.h"
landes 0:a66216813d00 9 #include "EthernetInterface.h"
landes 0:a66216813d00 10
landes 0:a66216813d00 11 //uLCD_4DGL uLCD(p9,p10,p11); // serial tx, serial rx, reset pin;
landes 0:a66216813d00 12 uLCD_4DGL uLCD(p28, p27, p29);
landes 0:a66216813d00 13 //SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card
landes 0:a66216813d00 14 DigitalOut latch(p15);
landes 0:a66216813d00 15 DigitalOut enable(p16);
landes 0:a66216813d00 16 //AnalogOut DACout(p18);
landes 0:a66216813d00 17 //Cycles through different colors on RGB LED
landes 0:a66216813d00 18 SPI spi(p11, p12, p13);
landes 0:a66216813d00 19 //Set up IR sensor
landes 0:a66216813d00 20 AnalogIn IrSensor(p20);
landes 0:a66216813d00 21 Serial serial(USBTX, USBRX);
landes 0:a66216813d00 22 SongPlayer mySpeaker(p26);
landes 0:a66216813d00 23
landes 0:a66216813d00 24 // ethernet setup
landes 0:a66216813d00 25 EthernetInterface eth;
landes 0:a66216813d00 26
landes 0:a66216813d00 27 DigitalOut myLED1(LED1);
landes 0:a66216813d00 28 DigitalOut myLED2(LED2);
landes 0:a66216813d00 29 DigitalOut myLED3(LED3);
landes 0:a66216813d00 30 DigitalOut myLED4(LED4);
landes 0:a66216813d00 31
landes 0:a66216813d00 32 PinDetect pb1(p21);
landes 0:a66216813d00 33 PinDetect pb2(p22);
landes 0:a66216813d00 34 PinDetect pb3(p23);
landes 0:a66216813d00 35 PinDetect pb4(p24);
landes 0:a66216813d00 36
landes 0:a66216813d00 37
landes 0:a66216813d00 38 //void Thread_maintnence(char Thread);
landes 0:a66216813d00 39 void init_pbs(void);
landes 0:a66216813d00 40 enum Statetype { Armed =0 ,IR_sensed = 1,Second_Step = 2,Cleared = 3, Alarm_ON = 4};
landes 0:a66216813d00 41 Statetype state = Armed;
landes 0:a66216813d00 42
landes 0:a66216813d00 43 char Code[4] = {0,0,0,0};
landes 0:a66216813d00 44 int CodeCounter = 0;
landes 0:a66216813d00 45
landes 0:a66216813d00 46 void pb1_hit_callback (void) {
landes 0:a66216813d00 47 if (state == IR_sensed) {
landes 0:a66216813d00 48 myLED1 = !myLED1;
landes 0:a66216813d00 49 Code[CodeCounter] = 1;
landes 0:a66216813d00 50 //printf("\n PB: %d\n\r",Code[CodeCounter]);
landes 0:a66216813d00 51 CodeCounter++;
landes 0:a66216813d00 52 wait(0.500);
landes 0:a66216813d00 53 }
landes 0:a66216813d00 54 }
landes 0:a66216813d00 55 void pb2_hit_callback (void) {
landes 0:a66216813d00 56 if (state == IR_sensed) {
landes 0:a66216813d00 57 myLED2 = !myLED2;
landes 0:a66216813d00 58 Code[CodeCounter] = 2;
landes 0:a66216813d00 59 //printf("\n PB: %d\n\r",Code[CodeCounter]);
landes 0:a66216813d00 60 CodeCounter++;
landes 0:a66216813d00 61 wait(0.500);
landes 0:a66216813d00 62 }
landes 0:a66216813d00 63 }
landes 0:a66216813d00 64 void pb3_hit_callback (void) {
landes 0:a66216813d00 65 if (state == IR_sensed) {
landes 0:a66216813d00 66 myLED3 = !myLED3;
landes 0:a66216813d00 67 Code[CodeCounter] = 3;
landes 0:a66216813d00 68 //printf("\n PB: %d\n\r",Code[CodeCounter]);
landes 0:a66216813d00 69 CodeCounter++;
landes 0:a66216813d00 70 wait(0.500);
landes 0:a66216813d00 71 }
landes 0:a66216813d00 72 }
landes 0:a66216813d00 73 void pb4_hit_callback (void) {
landes 0:a66216813d00 74 if (state == IR_sensed) {
landes 0:a66216813d00 75 myLED4 = !myLED4;
landes 0:a66216813d00 76 Code[CodeCounter] = 4;
landes 0:a66216813d00 77 //printf("\n PB: %d\n\r",Code[CodeCounter]);
landes 0:a66216813d00 78 CodeCounter++;
landes 0:a66216813d00 79 wait(0.500);
landes 0:a66216813d00 80 }
landes 0:a66216813d00 81 }
landes 0:a66216813d00 82
landes 0:a66216813d00 83
landes 0:a66216813d00 84
landes 0:a66216813d00 85
landes 0:a66216813d00 86
landes 0:a66216813d00 87 //Mutex stdio_mutex;
landes 0:a66216813d00 88 Semaphore LCD_Access(2);
landes 0:a66216813d00 89 Semaphore Consul_Access(5);
landes 0:a66216813d00 90 float IrVoltage = 0.0;
landes 0:a66216813d00 91
landes 0:a66216813d00 92
landes 0:a66216813d00 93 //wave_player waver(&DACout);
landes 0:a66216813d00 94
landes 0:a66216813d00 95
landes 0:a66216813d00 96 float note[18]= {1568.0,1396.9,1244.5,1244.5,1396.9,1568.0,1568.0,1568.0,1396.9,
landes 0:a66216813d00 97 1244.5,1396.9,1568.0,1396.9,1244.5,1174.7,1244.5,1244.5, 0.0
landes 0:a66216813d00 98 };
landes 0:a66216813d00 99 float duration[18]= {0.48,0.24,0.72,0.48,0.24,0.48,0.24,0.24,0.24,
landes 0:a66216813d00 100 0.24,0.24,0.24,0.24,0.48,0.24,0.48,0.48, 0.0
landes 0:a66216813d00 101 };
landes 0:a66216813d00 102
landes 0:a66216813d00 103
landes 0:a66216813d00 104
landes 0:a66216813d00 105 void init_LCD();
landes 0:a66216813d00 106 void RGB_LED(int red, int green, int blue);
landes 0:a66216813d00 107 //void LCD_Armed(void);
landes 0:a66216813d00 108
landes 0:a66216813d00 109
landes 0:a66216813d00 110
landes 0:a66216813d00 111 void Speaker_thread(void const *args) {
landes 0:a66216813d00 112 while (1) {
landes 0:a66216813d00 113 if (state == Alarm_ON) {
landes 0:a66216813d00 114 Consul_Access.wait();
landes 0:a66216813d00 115 serial.printf("\n play sound\n\r");
landes 0:a66216813d00 116 Consul_Access.release();
landes 0:a66216813d00 117 mySpeaker.PlaySong(note,duration);
landes 0:a66216813d00 118 Thread::wait(5000);
landes 0:a66216813d00 119 }
landes 0:a66216813d00 120 }
landes 0:a66216813d00 121 }
landes 0:a66216813d00 122
landes 0:a66216813d00 123 void uLCD_thread(void const *args) {
landes 0:a66216813d00 124 int Change = 99;
landes 0:a66216813d00 125 Consul_Access.wait();
landes 0:a66216813d00 126 //serial.printf("state %d %d\n\r",Change,state);
landes 0:a66216813d00 127 Consul_Access.release();
landes 0:a66216813d00 128 while(1) {
landes 0:a66216813d00 129
landes 0:a66216813d00 130 if (Change != state) {
landes 0:a66216813d00 131 Change = state;
landes 0:a66216813d00 132 switch (state) {
landes 0:a66216813d00 133 case Armed:
landes 0:a66216813d00 134 LCD_Access.wait();
landes 0:a66216813d00 135 uLCD.cls();
landes 0:a66216813d00 136 uLCD.color(WHITE);
landes 0:a66216813d00 137 uLCD.printf(" ARMED \n ");
landes 0:a66216813d00 138 LCD_Access.release();
landes 0:a66216813d00 139 break;
landes 0:a66216813d00 140 case IR_sensed:
landes 0:a66216813d00 141 LCD_Access.wait();
landes 0:a66216813d00 142 uLCD.cls();
landes 0:a66216813d00 143 uLCD.printf("\nSensor triggred \n"); //Default Green on black text
landes 0:a66216813d00 144 uLCD.printf("\n Enter the code ...");
landes 0:a66216813d00 145 uLCD.text_width(4); //4X size text
landes 0:a66216813d00 146 uLCD.text_height(4);
landes 0:a66216813d00 147 uLCD.color(RED);
landes 0:a66216813d00 148 LCD_Access.release();
landes 0:a66216813d00 149 for (int i=30; i>=0; --i) {
landes 0:a66216813d00 150 if (state == IR_sensed) {
landes 0:a66216813d00 151 LCD_Access.wait();
landes 0:a66216813d00 152 uLCD.text_width(4); //4X size text
landes 0:a66216813d00 153 uLCD.text_height(4);
landes 0:a66216813d00 154 uLCD.color(RED);
landes 0:a66216813d00 155 uLCD.locate(1,2);
landes 0:a66216813d00 156 uLCD.printf("%2D",i);
landes 0:a66216813d00 157 LCD_Access.release();
landes 0:a66216813d00 158 Consul_Access.wait();
landes 0:a66216813d00 159 serial.printf("CC: %d%d%d%d\n\r",Code[0],Code[1],Code[2],Code[3]);
landes 0:a66216813d00 160 Consul_Access.release();
landes 0:a66216813d00 161 Thread::wait(100);
landes 0:a66216813d00 162 }
landes 0:a66216813d00 163 }
landes 0:a66216813d00 164 if (state == IR_sensed) {
landes 0:a66216813d00 165 state = Alarm_ON;
landes 0:a66216813d00 166 }
landes 0:a66216813d00 167
landes 0:a66216813d00 168 break;
landes 0:a66216813d00 169 case Second_Step:
landes 0:a66216813d00 170 LCD_Access.wait();
landes 0:a66216813d00 171 uLCD.cls();
landes 0:a66216813d00 172 uLCD.color(BLUE);
landes 0:a66216813d00 173 uLCD.printf("\nPleas enter code from text massage \n");
landes 0:a66216813d00 174 LCD_Access.release();
landes 0:a66216813d00 175 break;
landes 0:a66216813d00 176 case Alarm_ON:
landes 0:a66216813d00 177 LCD_Access.wait();
landes 0:a66216813d00 178 uLCD.cls();
landes 0:a66216813d00 179 uLCD.color(RED);
landes 0:a66216813d00 180 uLCD.printf("\nThis house is being broken into. \nThe athoroties have been informed \n");
landes 0:a66216813d00 181 LCD_Access.release();
landes 0:a66216813d00 182 break;
landes 0:a66216813d00 183 case Cleared:
landes 0:a66216813d00 184 LCD_Access.wait();
landes 0:a66216813d00 185 uLCD.cls();
landes 0:a66216813d00 186 uLCD.color(GREEN);
landes 0:a66216813d00 187 uLCD.printf("\nAccess Granted. \n\n");
landes 0:a66216813d00 188 LCD_Access.release();
landes 0:a66216813d00 189 break;
landes 0:a66216813d00 190 }
landes 0:a66216813d00 191 }
landes 0:a66216813d00 192 }
landes 0:a66216813d00 193 }
landes 0:a66216813d00 194
landes 0:a66216813d00 195 void IR_thread(void const *args) {
landes 0:a66216813d00 196
landes 0:a66216813d00 197 Timer t;
landes 0:a66216813d00 198 t.start();
landes 0:a66216813d00 199
landes 0:a66216813d00 200 while(1) {
landes 0:a66216813d00 201
landes 0:a66216813d00 202 if (state == Armed) {
landes 0:a66216813d00 203 IrVoltage=IrSensor.read();
landes 0:a66216813d00 204 if (IrVoltage <= 0.1) { //if value just nois reset timer
landes 0:a66216813d00 205 t.reset();
landes 0:a66216813d00 206 state = Armed;
landes 0:a66216813d00 207 Consul_Access.wait();
landes 0:a66216813d00 208 serial.printf("Vtimer reset %f\r\n", IrVoltage);
landes 0:a66216813d00 209 serial.printf("tread: %f\r\n", t.read());
landes 0:a66216813d00 210 Consul_Access.release();
landes 0:a66216813d00 211 }
landes 0:a66216813d00 212 if (t.read() >= 5) { //wait 5 seconds to make sure that sense someone
landes 0:a66216813d00 213 state = IR_sensed;
landes 0:a66216813d00 214 Consul_Access.wait();
landes 0:a66216813d00 215 serial.printf("alarm on %f\r\n", IrVoltage);
landes 0:a66216813d00 216 Consul_Access.release();
landes 0:a66216813d00 217 }
landes 0:a66216813d00 218 Thread::wait(1000);
landes 0:a66216813d00 219 }
landes 0:a66216813d00 220 else {
landes 0:a66216813d00 221 //nothing to do for this thread make space for others
landes 0:a66216813d00 222 Thread::wait(1000);
landes 0:a66216813d00 223 }
landes 0:a66216813d00 224 }
landes 0:a66216813d00 225 }
landes 0:a66216813d00 226
landes 0:a66216813d00 227 void Shiftbright_thread(void const *args){
landes 0:a66216813d00 228 //int red=0;
landes 0:a66216813d00 229 //int green=0;
landes 0:a66216813d00 230 //int blue=0;
landes 0:a66216813d00 231 spi.format(16,0);
landes 0:a66216813d00 232 spi.frequency(500000);
landes 0:a66216813d00 233 enable=0;
landes 0:a66216813d00 234 latch=0;
landes 0:a66216813d00 235
landes 0:a66216813d00 236 while(1) {
landes 0:a66216813d00 237 switch (state) {
landes 0:a66216813d00 238 case Armed:
landes 0:a66216813d00 239 Consul_Access.wait();
landes 0:a66216813d00 240 serial.printf("armed \r\n");
landes 0:a66216813d00 241 Consul_Access.release();
landes 0:a66216813d00 242 for (int i = 0; i <= 100; i++) {
landes 0:a66216813d00 243 RGB_LED( 0, i, 0);
landes 0:a66216813d00 244 Thread::wait(10);
landes 0:a66216813d00 245 }
landes 0:a66216813d00 246 for (int i = 100; i >= 0; i--) {
landes 0:a66216813d00 247 RGB_LED( 0, i, 0);
landes 0:a66216813d00 248 Thread::wait(10);
landes 0:a66216813d00 249 }
landes 0:a66216813d00 250 break;
landes 0:a66216813d00 251 case IR_sensed:
landes 0:a66216813d00 252 Consul_Access.wait();
landes 0:a66216813d00 253 serial.printf("sensed \r\n");
landes 0:a66216813d00 254 Consul_Access.release();
landes 0:a66216813d00 255 RGB_LED( 0, 0, 100);
landes 0:a66216813d00 256 break;
landes 0:a66216813d00 257 case Alarm_ON:
landes 0:a66216813d00 258 Consul_Access.wait();
landes 0:a66216813d00 259 serial.printf("on \r\n");
landes 0:a66216813d00 260 Consul_Access.release();
landes 0:a66216813d00 261 RGB_LED( 100, 0, 0);
landes 0:a66216813d00 262 break;
landes 0:a66216813d00 263 case Cleared:
landes 0:a66216813d00 264 RGB_LED( 0, 100, 0);
landes 0:a66216813d00 265 break;
landes 0:a66216813d00 266 }
landes 0:a66216813d00 267 Thread::wait(1000);
landes 0:a66216813d00 268 }
landes 0:a66216813d00 269 }
landes 0:a66216813d00 270
landes 0:a66216813d00 271 void CheckCode_thread(void const *args) {
landes 0:a66216813d00 272 while(1){
landes 0:a66216813d00 273 if (state == IR_sensed) {
landes 0:a66216813d00 274 //printf("CC from check: %d%d%d%d\n\r",Code[0],Code[1],Code[2],Code[3]);
landes 0:a66216813d00 275 if ((Code[0] == 1) && (Code[1] == 2) && (Code[2] == 3) && (Code[3] == 4)) {
landes 0:a66216813d00 276 Code[0] = Code[1] = Code[2] = Code[3] =0;
landes 0:a66216813d00 277 state = Second_Step;
landes 0:a66216813d00 278 CodeCounter = 0;
landes 0:a66216813d00 279 break;
landes 0:a66216813d00 280 }
landes 0:a66216813d00 281 else if ((Code[0] != 0) && (Code[1] != 0) && (Code[2] != 0) && (Code[3] != 0)) {
landes 0:a66216813d00 282 Code[0] = Code[1] = Code[2] = Code[3] =0;
landes 0:a66216813d00 283 Consul_Access.wait();
landes 0:a66216813d00 284 serial.printf("\nAWrong passcode. \n\n");
landes 0:a66216813d00 285 Consul_Access.release();
landes 0:a66216813d00 286 state = Alarm_ON;
landes 0:a66216813d00 287 }
landes 0:a66216813d00 288 }
landes 0:a66216813d00 289 if (state == Second_Step) {
landes 0:a66216813d00 290 Consul_Access.wait();
landes 0:a66216813d00 291 serial.printf("CC from check: %d%d%d%d\n\r",Code[0],Code[1],Code[2],Code[3]);
landes 0:a66216813d00 292 Consul_Access.release();
landes 0:a66216813d00 293 if ((Code[0] == 3) && (Code[1] == 2) && (Code[2] == 2) && (Code[3] == 1)) {
landes 0:a66216813d00 294 Code[0] = Code[1] = Code[2] = Code[3] =0;
landes 0:a66216813d00 295 state = Cleared;
landes 0:a66216813d00 296 CodeCounter = 0;
landes 0:a66216813d00 297 }
landes 0:a66216813d00 298 else if ((Code[0] != 0) && (Code[1] != 0) && (Code[2] != 0) && (Code[3] != 0)) {
landes 0:a66216813d00 299 Code[0] = Code[1] = Code[2] = Code[3] =0;
landes 0:a66216813d00 300 Consul_Access.wait();
landes 0:a66216813d00 301 serial.printf("\nAWrong passcode. \n\n");
landes 0:a66216813d00 302 Consul_Access.release();
landes 0:a66216813d00 303 state = Alarm_ON;
landes 0:a66216813d00 304 }
landes 0:a66216813d00 305 }
landes 0:a66216813d00 306 Thread::wait(1000);
landes 0:a66216813d00 307 }
landes 0:a66216813d00 308 }
landes 0:a66216813d00 309
landes 0:a66216813d00 310 void Ethernet_thread(void const *args) {
landes 0:a66216813d00 311
landes 0:a66216813d00 312 int Change = 99;
landes 0:a66216813d00 313 while(1) {
landes 0:a66216813d00 314 if (Change != state) {
landes 0:a66216813d00 315
landes 0:a66216813d00 316 Change = state;
landes 0:a66216813d00 317 switch (state) {
landes 0:a66216813d00 318 case Armed:
landes 0:a66216813d00 319 //add code that verifies connection every so often
landes 0:a66216813d00 320 Thread::wait(1000);
landes 0:a66216813d00 321 break;
landes 0:a66216813d00 322 case IR_sensed:
landes 0:a66216813d00 323 /*// send alert
landes 0:a66216813d00 324 TCPSocketConnection sock;
landes 0:a66216813d00 325 sock.connect("dreamphysix.com", 80);
landes 0:a66216813d00 326
landes 0:a66216813d00 327 char http_cmd[] = "GET http://dreamphysix.com/alert.php?authcode=0e9cae34a0 HTTP/1.0\n\n";
landes 0:a66216813d00 328 sock.send_all(http_cmd, sizeof(http_cmd)-1);
landes 0:a66216813d00 329
landes 0:a66216813d00 330 char buffer[300];
landes 0:a66216813d00 331 int ret;
landes 0:a66216813d00 332 while (true) {
landes 0:a66216813d00 333 ret = sock.receive(buffer, sizeof(buffer)-1);
landes 0:a66216813d00 334 if (ret <= 0)
landes 0:a66216813d00 335 break;
landes 0:a66216813d00 336 buffer[ret] = '\0';
landes 0:a66216813d00 337 Consul_Access.wait();
landes 0:a66216813d00 338 serial.printf("Received %d chars from server:\n%s\n", ret, buffer);
landes 0:a66216813d00 339 Consul_Access.release();
landes 0:a66216813d00 340 }
landes 0:a66216813d00 341 sock.close();*/
landes 0:a66216813d00 342 break;
landes 0:a66216813d00 343 case Second_Step:
landes 0:a66216813d00 344 /*TCPSocketConnection sock;
landes 0:a66216813d00 345 sock.connect("dreamphysix.com", 80);
landes 0:a66216813d00 346 char buffer[300];
landes 0:a66216813d00 347 int ret;
landes 0:a66216813d00 348 //code second step
landes 0:a66216813d00 349 // send random code
landes 0:a66216813d00 350 srand(time(NULL));
landes 0:a66216813d00 351 int randomNumber = 3221 ;//rand() % 4444 + 1000;
landes 0:a66216813d00 352 char randomCode[sizeof(int)*4];
landes 0:a66216813d00 353 snprintf(randomCode, sizeof(randomCode), "%i", randomNumber);
landes 0:a66216813d00 354
landes 0:a66216813d00 355 sock.connect("dreamphysix.com", 80);
landes 0:a66216813d00 356
landes 0:a66216813d00 357 char http_cmd1[100] = "GET http://dreamphysix.com/sendcode.php?authcode=0e9cae34a0&randomcode=";
landes 0:a66216813d00 358 strcat(http_cmd1, randomCode);
landes 0:a66216813d00 359 strcat(http_cmd1, " HTTP/1.0\n\n");
landes 0:a66216813d00 360 sock.send_all(http_cmd1, sizeof(http_cmd1)-1);
landes 0:a66216813d00 361
landes 0:a66216813d00 362 while (true) {
landes 0:a66216813d00 363 ret = sock.receive(buffer, sizeof(buffer)-1);
landes 0:a66216813d00 364 if (ret <= 0)
landes 0:a66216813d00 365 break;
landes 0:a66216813d00 366 buffer[ret] = '\0';
landes 0:a66216813d00 367 Consul_Access.wait();
landes 0:a66216813d00 368 serial.printf("Received %d chars from server:\n%s\n", ret, buffer);
landes 0:a66216813d00 369 Consul_Access.release();
landes 0:a66216813d00 370 }
landes 0:a66216813d00 371
landes 0:a66216813d00 372 sock.close();
landes 0:a66216813d00 373 */
landes 0:a66216813d00 374 break;
landes 0:a66216813d00 375 case Cleared:
landes 0:a66216813d00 376 //nothing to do for this thread make space for others
landes 0:a66216813d00 377 Thread::wait(1000);
landes 0:a66216813d00 378 break;
landes 0:a66216813d00 379 case Alarm_ON:
landes 0:a66216813d00 380 //nothing to do for this thread make space for others
landes 0:a66216813d00 381 Thread::wait(1000);
landes 0:a66216813d00 382 break;
landes 0:a66216813d00 383 }
landes 0:a66216813d00 384 }
landes 0:a66216813d00 385 }
landes 0:a66216813d00 386 }
landes 0:a66216813d00 387
landes 0:a66216813d00 388 void LCD_Code_Enter_Thread(void const *args) {
landes 0:a66216813d00 389 int LineHight = 120;
landes 0:a66216813d00 390 int LineWidth = 10;
landes 0:a66216813d00 391 int SpaceWidth = 5;
landes 0:a66216813d00 392 int MidPoint = 127/2;
landes 0:a66216813d00 393 while(1) {
landes 0:a66216813d00 394 switch (state) {
landes 0:a66216813d00 395 //state: Armed =0 ,IR_sensed = 1,Second_Step = 2,Cleared = 3, Alarm_ON = 4};
landes 0:a66216813d00 396 case Armed:
landes 0:a66216813d00 397 Thread::wait(1000); //nothing to do for this thread make space for others
landes 0:a66216813d00 398 break;
landes 0:a66216813d00 399 case IR_sensed:
landes 0:a66216813d00 400 case Second_Step:
landes 0:a66216813d00 401 LCD_Access.wait();
landes 0:a66216813d00 402
landes 0:a66216813d00 403 uLCD.line(MidPoint-2*(LineWidth+SpaceWidth), LineHight, MidPoint- 2*SpaceWidth-LineWidth, LineHight, WHITE); //line( int x1, int y1, int x2, int y2, int color)
landes 0:a66216813d00 404 uLCD.line(MidPoint-LineWidth-SpaceWidth, LineHight, MidPoint-SpaceWidth, LineHight, WHITE); //line( int x1, int y1, int x2, int y2, int color)
landes 0:a66216813d00 405 uLCD.line(MidPoint+SpaceWidth, LineHight, MidPoint+SpaceWidth+LineWidth, LineHight, WHITE); //line( int x1, int y1, int x2, int y2, int color)
landes 0:a66216813d00 406 uLCD.line(MidPoint+2*SpaceWidth+LineWidth, LineHight, MidPoint+2*(SpaceWidth+LineWidth), LineHight, WHITE); //line( int x1, int y1, int x2, int y2, int color)
landes 0:a66216813d00 407
landes 0:a66216813d00 408 uLCD.locate(20,20);
landes 0:a66216813d00 409 uLCD.printf("%d %d %d %d ",Code[0],Code[1],Code[2],Code[3]);
landes 0:a66216813d00 410 LCD_Access.release();
landes 0:a66216813d00 411 break;
landes 0:a66216813d00 412 case Cleared:
landes 0:a66216813d00 413 Thread::wait(1000); //nothing to do for this thread make space for others
landes 0:a66216813d00 414 break;
landes 0:a66216813d00 415 case Alarm_ON:
landes 0:a66216813d00 416 Thread::wait(1000); //nothing to do for this thread make space for others
landes 0:a66216813d00 417 break;
landes 0:a66216813d00 418 }
landes 0:a66216813d00 419 }
landes 0:a66216813d00 420 }
landes 0:a66216813d00 421
landes 0:a66216813d00 422 int main() {
landes 0:a66216813d00 423
landes 0:a66216813d00 424 init_pbs();
landes 0:a66216813d00 425
landes 0:a66216813d00 426 serial.printf("Setting up connection\r\n");
landes 0:a66216813d00 427
landes 0:a66216813d00 428 eth.init(); //Use DHCP
landes 0:a66216813d00 429 eth.connect();
landes 0:a66216813d00 430 Thread Ethernetthread(Ethernet_thread);
landes 0:a66216813d00 431 serial.printf("IP Address is %s\n", eth.getIPAddress());
landes 0:a66216813d00 432 wait(5);
landes 0:a66216813d00 433
landes 0:a66216813d00 434 Thread LCDthread(uLCD_thread);
landes 0:a66216813d00 435 Thread IRthread(IR_thread);
landes 0:a66216813d00 436 Thread Shiftbright(Shiftbright_thread);
landes 0:a66216813d00 437 Thread Speakerthread(Speaker_thread);
landes 0:a66216813d00 438 Thread CheckCode(CheckCode_thread);
landes 0:a66216813d00 439 Thread LCD_CodeEnterThread(LCD_Code_Enter_Thread);
landes 0:a66216813d00 440
landes 0:a66216813d00 441 while (1) {
landes 0:a66216813d00 442 /* switch (state) {
landes 0:a66216813d00 443 //state: Armed =0 ,IR_sensed = 1,Second_Step = 2,Cleared = 3, Alarm_ON = 4};
landes 0:a66216813d00 444 case Armed:
landes 0:a66216813d00 445
landes 0:a66216813d00 446 break;
landes 0:a66216813d00 447 case IR_sensed:
landes 0:a66216813d00 448
landes 0:a66216813d00 449 break;
landes 0:a66216813d00 450 case Second_Step:
landes 0:a66216813d00 451
landes 0:a66216813d00 452 break;
landes 0:a66216813d00 453 case Cleared:
landes 0:a66216813d00 454
landes 0:a66216813d00 455 break;
landes 0:a66216813d00 456 case Alarm_ON:
landes 0:a66216813d00 457
landes 0:a66216813d00 458 break;
landes 0:a66216813d00 459 }*/
landes 0:a66216813d00 460 }
landes 0:a66216813d00 461
landes 0:a66216813d00 462
landes 0:a66216813d00 463
landes 0:a66216813d00 464
landes 0:a66216813d00 465
landes 0:a66216813d00 466
landes 0:a66216813d00 467
landes 0:a66216813d00 468
landes 0:a66216813d00 469
landes 0:a66216813d00 470 //while (true) { }
landes 0:a66216813d00 471
landes 0:a66216813d00 472 }
landes 0:a66216813d00 473
landes 0:a66216813d00 474 void init_LCD() {
landes 0:a66216813d00 475
landes 0:a66216813d00 476
landes 0:a66216813d00 477
landes 0:a66216813d00 478 uLCD.baudrate(3000000);
landes 0:a66216813d00 479 uLCD.background_color(BLACK);
landes 0:a66216813d00 480 }
landes 0:a66216813d00 481
landes 0:a66216813d00 482 void RGB_LED(int red, int green, int blue) {
landes 0:a66216813d00 483
landes 0:a66216813d00 484 unsigned int low_color=0;
landes 0:a66216813d00 485 unsigned int high_color=0;
landes 0:a66216813d00 486 high_color=(blue<<4)|((red&0x3C0)>>6);
landes 0:a66216813d00 487 low_color=(((red&0x3F)<<10)|(green));
landes 0:a66216813d00 488 spi.write(high_color);
landes 0:a66216813d00 489 spi.write(low_color);
landes 0:a66216813d00 490 latch=1;
landes 0:a66216813d00 491 latch=0;
landes 0:a66216813d00 492
landes 0:a66216813d00 493 }
landes 0:a66216813d00 494 void init_pbs(void) {
landes 0:a66216813d00 495 // Use internal pullups for the three pushbuttons
landes 0:a66216813d00 496 pb1.mode(PullUp);
landes 0:a66216813d00 497 pb2.mode(PullUp);
landes 0:a66216813d00 498 pb3.mode(PullUp);
landes 0:a66216813d00 499 pb4.mode(PullUp);
landes 0:a66216813d00 500 // Delay for initial pullup to take effect
landes 0:a66216813d00 501 wait(.01);
landes 0:a66216813d00 502 // Setup Interrupt callback functions for a pb hit
landes 0:a66216813d00 503 pb1.attach_deasserted(&pb1_hit_callback);
landes 0:a66216813d00 504 pb2.attach_deasserted(&pb2_hit_callback);
landes 0:a66216813d00 505 pb3.attach_deasserted(&pb3_hit_callback);
landes 0:a66216813d00 506 pb4.attach_deasserted(&pb4_hit_callback);
landes 0:a66216813d00 507 // Start sampling pb inputs using interrupts
landes 0:a66216813d00 508 pb1.setSampleFrequency();
landes 0:a66216813d00 509 pb2.setSampleFrequency();
landes 0:a66216813d00 510 pb3.setSampleFrequency();
landes 0:a66216813d00 511 pb4.setSampleFrequency();
landes 0:a66216813d00 512 // pushbuttons now setup and running
landes 0:a66216813d00 513
landes 0:a66216813d00 514 }
landes 0:a66216813d00 515
landes 0:a66216813d00 516 /*void Thread_maintnence(char Thread) {
landes 0:a66216813d00 517 switch (Thread) {
landes 0:a66216813d00 518 case 'IRthread':
landes 0:a66216813d00 519 IRthread.terminate();
landes 0:a66216813d00 520 break;
landes 0:a66216813d00 521 }*/