asdf

Dependencies:   NokiaLCD XMIT_IR mbed

Fork of 4180_mP_WirelessPong_revC by Curtis Mulady

Committer:
mesdoram
Date:
Tue Oct 09 23:28:34 2012 +0000
Revision:
20:a74fe4d43ec0
Parent:
19:5a4be4519de5
asdf

Who changed what in which revision?

UserRevisionLine numberNew contents of line
cmulady 0:c8ddcaa575ba 1 #include "mbed.h"
cmulady 0:c8ddcaa575ba 2 #include "rtos.h"
cmulady 0:c8ddcaa575ba 3 #include "NokiaLCD.h"
cmulady 1:9ba884d85ac6 4 #include "XMIT_IR.h"
mesdoram 20:a74fe4d43ec0 5 #include "pong.h"
cmulady 0:c8ddcaa575ba 6
cmulady 19:5a4be4519de5 7 #define FPS 15
cmulady 19:5a4be4519de5 8 #define PKT_RATE 15
cmulady 1:9ba884d85ac6 9
cmulady 3:8e492eacd346 10 /****************************************
cmulady 3:8e492eacd346 11 |=======================================|
cmulady 3:8e492eacd346 12 |MBED Connections: |
cmulady 3:8e492eacd346 13 | -p5 : DIO on Sparkfun Nokia LCD |
cmulady 3:8e492eacd346 14 | -p7 : CLK on Sparkfun Nokia LCD |
cmulady 3:8e492eacd346 15 | -p8 : CS on Sparkfun Nokia LCD |
cmulady 3:8e492eacd346 16 | -p9 : RST on Sparkfun Nokia LCD |
cmulady 12:9acca1dd0e8e 17 | -p21: CTL on Sparkfun IR Xmitter |
cmulady 12:9acca1dd0e8e 18 | -p14: OUT on Sparkfun IR Rcvr |
cmulady 12:9acca1dd0e8e 19 | -p13: GND on Sparkfun IR Xmitter |
cmulady 3:8e492eacd346 20 |=======================================|
cmulady 3:8e492eacd346 21 ****************************************/
cmulady 1:9ba884d85ac6 22
cmulady 13:17fd813ef7c9 23 //Function Prototypes
mesdoram 20:a74fe4d43ec0 24 /*void BlinkAlive(void const* arguments);
cmulady 13:17fd813ef7c9 25 void UpdateLCD(void const* arguments);
cmulady 13:17fd813ef7c9 26 void IRStuff(void const* arguments);
cmulady 13:17fd813ef7c9 27 void ISR_UARTRX(void);
cmulady 13:17fd813ef7c9 28 char CheckPacket(char new_data, char* packet_buffer, char* data, int data_len);
cmulady 13:17fd813ef7c9 29 void MakePacket2(char* data,int len);
mesdoram 20:a74fe4d43ec0 30 */
mesdoram 20:a74fe4d43ec0 31 /*//Pin Setup
cmulady 13:17fd813ef7c9 32 PwmOut led1(LED1);
cmulady 13:17fd813ef7c9 33 PwmOut led2(LED2);
cmulady 3:8e492eacd346 34 DigitalOut led3(LED3);
cmulady 3:8e492eacd346 35 DigitalOut led4(LED4);
mesdoram 20:a74fe4d43ec0 36 //NokiaLCD lcd(p5, p7, p8, p9, NokiaLCD::LCD6610); // mosi, sclk, cs, rst, type
cmulady 13:17fd813ef7c9 37 Serial* devicerx;
cmulady 13:17fd813ef7c9 38
cmulady 13:17fd813ef7c9 39 //Serial devicetx(p13,NC);
cmulady 6:5563f0026858 40 Serial pc(USBTX,USBRX);
cmulady 5:2e08cc167fff 41 PwmOut IRLED_mod(p21);
cmulady 1:9ba884d85ac6 42
cmulady 19:5a4be4519de5 43 IRTransmitter ir_tx(p13,p21,p14,4,&ISR_UARTRX); //tx,pwm,size
cmulady 13:17fd813ef7c9 44
cmulady 3:8e492eacd346 45 //Global Vars
cmulady 12:9acca1dd0e8e 46 char text_buffer[32];
cmulady 6:5563f0026858 47 char irdatOUT[10];
cmulady 6:5563f0026858 48 char irdatIN[10];
cmulady 12:9acca1dd0e8e 49 char irdata_out=0;
cmulady 6:5563f0026858 50 char error_code=0;
cmulady 8:54dd4a3d0de9 51 Thread* threadptr_irstuff;
cmulady 9:3e4e9d6a8ad8 52 char packet_buff[10];
cmulady 17:f92e4a384637 53 Mutex data_update_mutex;
mesdoram 20:a74fe4d43ec0 54 */
cmulady 13:17fd813ef7c9 55
mesdoram 20:a74fe4d43ec0 56 AnalogIn paddle(p20);
cmulady 1:9ba884d85ac6 57
cmulady 1:9ba884d85ac6 58 int main()
cmulady 1:9ba884d85ac6 59 {
mesdoram 20:a74fe4d43ec0 60 double left = 1.00, right = 0.8;
mesdoram 20:a74fe4d43ec0 61 right = paddle;
mesdoram 20:a74fe4d43ec0 62 pong pongTest;
mesdoram 20:a74fe4d43ec0 63 pongTest.drawObjects();
mesdoram 20:a74fe4d43ec0 64 while(1)
mesdoram 20:a74fe4d43ec0 65 {
mesdoram 20:a74fe4d43ec0 66 pongTest.clear();
mesdoram 20:a74fe4d43ec0 67 right = paddle;
mesdoram 20:a74fe4d43ec0 68 pongTest.update(left, right);
mesdoram 20:a74fe4d43ec0 69 pongTest.drawObjects();
mesdoram 20:a74fe4d43ec0 70 /*lcd.cls();
mesdoram 20:a74fe4d43ec0 71 lcd.locate(0,1);
mesdoram 20:a74fe4d43ec0 72 lcd.printf("%d", counter);
mesdoram 20:a74fe4d43ec0 73 */
mesdoram 20:a74fe4d43ec0 74 Thread::wait(1000/FPS);
mesdoram 20:a74fe4d43ec0 75 }
mesdoram 20:a74fe4d43ec0 76 }
mesdoram 20:a74fe4d43ec0 77 /*
cmulady 3:8e492eacd346 78 //LCD init
mesdoram 20:a74fe4d43ec0 79 //lcd.background(0x000000);
cmulady 1:9ba884d85ac6 80
cmulady 6:5563f0026858 81 //PC serial init
cmulady 6:5563f0026858 82 pc.baud(19200);
cmulady 7:c9ff6b5c8507 83 pc.printf("Starting...\n\n");
cmulady 6:5563f0026858 84
cmulady 16:bc0e213ba52d 85 //IR_TRX module
cmulady 16:bc0e213ba52d 86 ir_tx.set_debug_port(&pc);
cmulady 16:bc0e213ba52d 87
cmulady 13:17fd813ef7c9 88
cmulady 9:3e4e9d6a8ad8 89 //Variable Init
cmulady 9:3e4e9d6a8ad8 90 for(int i=0; i<10; i++) packet_buff[i]=0;
cmulady 9:3e4e9d6a8ad8 91
cmulady 12:9acca1dd0e8e 92 //Threads init
cmulady 1:9ba884d85ac6 93 Thread thread_blinkalive(BlinkAlive);
cmulady 1:9ba884d85ac6 94 Thread thread_updatelcd(UpdateLCD);
cmulady 3:8e492eacd346 95 Thread thread_irstuff(IRStuff);
cmulady 8:54dd4a3d0de9 96 threadptr_irstuff = &thread_irstuff;
cmulady 1:9ba884d85ac6 97
cmulady 1:9ba884d85ac6 98
mesdoram 20:a74fe4d43ec0 99 */
mesdoram 20:a74fe4d43ec0 100 /* while(1) {
cmulady 13:17fd813ef7c9 101
cmulady 12:9acca1dd0e8e 102 //Use main loop to set LCD framerate
cmulady 1:9ba884d85ac6 103 thread_updatelcd.signal_set(0x1);
cmulady 19:5a4be4519de5 104 thread_blinkalive.signal_set(0x1);
cmulady 1:9ba884d85ac6 105 Thread::wait(1000/FPS);
cmulady 1:9ba884d85ac6 106
cmulady 0:c8ddcaa575ba 107 }
cmulady 0:c8ddcaa575ba 108 }
cmulady 1:9ba884d85ac6 109
cmulady 1:9ba884d85ac6 110 void UpdateLCD(void const* arguments)
cmulady 1:9ba884d85ac6 111 {
cmulady 7:c9ff6b5c8507 112 while(true) {
cmulady 13:17fd813ef7c9 113
cmulady 12:9acca1dd0e8e 114 //Start flash LED
cmulady 13:17fd813ef7c9 115 led2 = 0.02;
cmulady 17:f92e4a384637 116 data_update_mutex.lock();
cmulady 17:f92e4a384637 117 char irdatbuff[4];
cmulady 17:f92e4a384637 118 for(int i=0; i<4; i++) irdatbuff[i] = irdatIN[i];
cmulady 17:f92e4a384637 119 data_update_mutex.unlock();
cmulady 17:f92e4a384637 120
cmulady 17:f92e4a384637 121 if(irdatbuff[0]!=0xA5 && irdatbuff[0]!=0x00) {
cmulady 17:f92e4a384637 122 lcd.locate(0,7);
cmulady 17:f92e4a384637 123 lcd.printf("Big Problem! 0x%02X",irdatbuff[0]);
cmulady 17:f92e4a384637 124 while(1);
cmulady 17:f92e4a384637 125 }
cmulady 17:f92e4a384637 126
cmulady 13:17fd813ef7c9 127
cmulady 12:9acca1dd0e8e 128 //Write debug text to screen
cmulady 1:9ba884d85ac6 129 lcd.locate(0,1);
cmulady 1:9ba884d85ac6 130 lcd.printf("Debug:");
cmulady 1:9ba884d85ac6 131 lcd.locate(0,3);
cmulady 1:9ba884d85ac6 132 time_t seconds = time(NULL);
cmulady 12:9acca1dd0e8e 133 strftime(text_buffer, 32, "%I:%M:%S %p\n", localtime(&seconds));
cmulady 12:9acca1dd0e8e 134 lcd.printf("%s", text_buffer);
cmulady 3:8e492eacd346 135 lcd.locate(0,4);
cmulady 6:5563f0026858 136 lcd.printf("IR_OUT=0x%02X,0x%02X", irdatOUT[0],irdatOUT[1]);
cmulady 3:8e492eacd346 137 lcd.locate(0,5);
cmulady 17:f92e4a384637 138 lcd.printf("IR_IN= 0x%02X,0x%02X", irdatbuff[0],irdatbuff[1]);
cmulady 6:5563f0026858 139 lcd.locate(0,6);
cmulady 6:5563f0026858 140 lcd.printf("Error= 0x%02X", error_code);
cmulady 3:8e492eacd346 141
cmulady 12:9acca1dd0e8e 142 //End - flash LED
cmulady 13:17fd813ef7c9 143 led2 = 0.0;
cmulady 1:9ba884d85ac6 144 //End - Sleep thread
cmulady 1:9ba884d85ac6 145 Thread::signal_wait(0x1);
cmulady 7:c9ff6b5c8507 146 }
cmulady 1:9ba884d85ac6 147 }
cmulady 1:9ba884d85ac6 148
cmulady 3:8e492eacd346 149 void IRStuff(void const* arguments)
cmulady 3:8e492eacd346 150 {
cmulady 3:8e492eacd346 151 while(true) {
cmulady 7:c9ff6b5c8507 152
cmulady 12:9acca1dd0e8e 153 //If data available - Print data directly to USB port (for debug)
cmulady 16:bc0e213ba52d 154
cmulady 16:bc0e213ba52d 155 char result;
cmulady 17:f92e4a384637 156 char temp_buff[4];
cmulady 17:f92e4a384637 157
cmulady 17:f92e4a384637 158 //buffer data into temp register
cmulady 17:f92e4a384637 159 result = ir_tx.ReadPacket(temp_buff,4);
cmulady 17:f92e4a384637 160
cmulady 16:bc0e213ba52d 161 if(result == 0x1) {
cmulady 19:5a4be4519de5 162 pc.printf("\n");
cmulady 17:f92e4a384637 163 //update data - mutex
cmulady 17:f92e4a384637 164 data_update_mutex.lock();
cmulady 17:f92e4a384637 165 for(int i=0; i<4; i++) {
cmulady 17:f92e4a384637 166 irdatIN[i] = temp_buff[i];
cmulady 17:f92e4a384637 167 }
cmulady 17:f92e4a384637 168 data_update_mutex.unlock();
cmulady 16:bc0e213ba52d 169 for(int i=0; i<4; i++) {
cmulady 19:5a4be4519de5 170 pc.printf("0x%02X.",irdatIN[i]);
cmulady 16:bc0e213ba52d 171 }
cmulady 16:bc0e213ba52d 172 }
cmulady 16:bc0e213ba52d 173
cmulady 15:21c512907cf6 174
cmulady 13:17fd813ef7c9 175
cmulady 12:9acca1dd0e8e 176 //Do not return until we have more data
cmulady 13:17fd813ef7c9 177 //Thread::signal_wait(0x1);
cmulady 16:bc0e213ba52d 178 Thread::wait(10);
cmulady 3:8e492eacd346 179 }
cmulady 4:8fdff78c13c8 180
cmulady 3:8e492eacd346 181 }
cmulady 3:8e492eacd346 182
cmulady 13:17fd813ef7c9 183
cmulady 9:3e4e9d6a8ad8 184
cmulady 13:17fd813ef7c9 185 void BlinkAlive(void const* arguments)
cmulady 13:17fd813ef7c9 186 {
cmulady 13:17fd813ef7c9 187 while(true) {
cmulady 13:17fd813ef7c9 188
cmulady 13:17fd813ef7c9 189 //Change LED1 state (debug)
cmulady 13:17fd813ef7c9 190 (led1==0.0)?led1=0.02:led1=0.0;
cmulady 13:17fd813ef7c9 191
cmulady 13:17fd813ef7c9 192 //Form a test packet and send it over IR transmitter
cmulady 13:17fd813ef7c9 193 irdatOUT[0] = 0xA5;
cmulady 13:17fd813ef7c9 194 irdatOUT[1] = ++irdata_out;
cmulady 13:17fd813ef7c9 195 irdatOUT[2] = ~(irdata_out*2);
cmulady 13:17fd813ef7c9 196 irdatOUT[3] = irdata_out*7+13;
cmulady 16:bc0e213ba52d 197 ir_tx.MakePacket(irdatOUT,4);
cmulady 13:17fd813ef7c9 198
cmulady 13:17fd813ef7c9 199 //Roughly use to set rate of data packets per second
cmulady 19:5a4be4519de5 200 //Thread::wait(100);
cmulady 19:5a4be4519de5 201 Thread::signal_wait(0x1);
cmulady 13:17fd813ef7c9 202 }
cmulady 13:17fd813ef7c9 203 }
cmulady 13:17fd813ef7c9 204
cmulady 13:17fd813ef7c9 205
cmulady 13:17fd813ef7c9 206
cmulady 13:17fd813ef7c9 207
cmulady 12:9acca1dd0e8e 208 //Handle Reception of RX data (mail it to appropriate thread)
cmulady 14:68f7cefd7359 209 void ISR_UARTRX()
cmulady 7:c9ff6b5c8507 210 {
cmulady 12:9acca1dd0e8e 211 //get RX data (and prevent ISR from looping forever
cmulady 7:c9ff6b5c8507 212 uint32_t RBR = LPC_UART1->RBR;
cmulady 18:98839f78fc01 213 ir_tx.isr_rx(RBR);
cmulady 8:54dd4a3d0de9 214
cmulady 7:c9ff6b5c8507 215 }
cmulady 7:c9ff6b5c8507 216
cmulady 18:98839f78fc01 217
mesdoram 20:a74fe4d43ec0 218 */