compilable code before testing

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

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