Racing robots

Dependencies:   EthernetInterface SPI_TFT_ILI9341 Stopwatch TFT_fonts TextLCD mbed-rtos mbed

Fork of rtos_basic by mbed official

Committer:
mbed5_khbo
Date:
Mon May 11 20:19:49 2015 +0000
Revision:
8:0499c9bedfca
Parent:
7:925f0328c938
Programma voorlopig zonder ethernet en I?C

Who changed what in which revision?

UserRevisionLine numberNew contents of line
emilmont 1:491820ee784d 1 #include "mbed.h"
emilmont 1:491820ee784d 2 #include "rtos.h"
mbed5_khbo 7:925f0328c938 3 #include "EthernetInterface.h"
mbed5_khbo 7:925f0328c938 4 #include "stdio.h"
mbed5_khbo 7:925f0328c938 5 #include "SPI_TFT_ILI9341.h"
mbed5_khbo 7:925f0328c938 6 #include "string"
mbed5_khbo 7:925f0328c938 7 #include "Arial12x12.h"
mbed5_khbo 7:925f0328c938 8 #include "Arial24x23.h"
mbed5_khbo 7:925f0328c938 9 #include "Arial28x28.h"
mbed5_khbo 7:925f0328c938 10 #include "font_big.h"
mbed5_khbo 8:0499c9bedfca 11
mbed5_khbo 7:925f0328c938 12
mbed5_khbo 8:0499c9bedfca 13 Timer t;
mbed5_khbo 8:0499c9bedfca 14 DigitalOut led1(p25);
emilmont 1:491820ee784d 15 DigitalOut led2(LED2);
mbed5_khbo 7:925f0328c938 16 DigitalOut led3(LED3);
mbed5_khbo 7:925f0328c938 17 DigitalOut led4(LED4);
mbed5_khbo 7:925f0328c938 18 DigitalOut rst1(p30);
mbed5_khbo 8:0499c9bedfca 19 DigitalOut buzzer(p17);
mbed5_khbo 8:0499c9bedfca 20 DigitalOut startl(p21);
mbed5_khbo 7:925f0328c938 21 DigitalIn sensorBasis(p12);
mbed5_khbo 8:0499c9bedfca 22 DigitalIn test(p23);
mbed5_khbo 8:0499c9bedfca 23 DigitalIn starta(p12);
mbed5_khbo 7:925f0328c938 24 I2C i2c(p28, p27);
mbed5_khbo 7:925f0328c938 25 Serial xbee1(p9, p10);
mbed5_khbo 7:925f0328c938 26 const int addr = 0x90;
mbed5_khbo 8:0499c9bedfca 27 int rondeTijden[3];
mbed5_khbo 8:0499c9bedfca 28 int rondeTijdenMilli[3];
mbed5_khbo 8:0499c9bedfca 29 int rondeTijdenM[3];
mbed5_khbo 7:925f0328c938 30 int stukCircuit=0;
mbed5_khbo 8:0499c9bedfca 31 int lapcounter;
mbed5_khbo 8:0499c9bedfca 32 int overzicht;
mbed5_khbo 8:0499c9bedfca 33 int circuit;
mbed5_khbo 8:0499c9bedfca 34 int tijds,tijdmilli,tijdm;
mbed5_khbo 7:925f0328c938 35 int tellerS=0,tellerM=0,data=125,status,i=3;
mbed5_khbo 7:925f0328c938 36 int start,i2cinfo1,i2cinfo2,i2cinfo3;
mbed5_khbo 7:925f0328c938 37 bool send;
mbed5_khbo 7:925f0328c938 38 char cmd[2];
mbed5_khbo 7:925f0328c938 39
mbed5_khbo 7:925f0328c938 40 LocalFileSystem local("local");
emilmont 1:491820ee784d 41
mbed5_khbo 7:925f0328c938 42 extern unsigned char p1[]; // the mbed logo graphic
mbed5_khbo 7:925f0328c938 43
mbed5_khbo 7:925f0328c938 44 // the display has a backlight switch on board
mbed5_khbo 7:925f0328c938 45 DigitalOut LCD_LED(p21);
mbed5_khbo 7:925f0328c938 46
mbed5_khbo 7:925f0328c938 47 // the TFT is connected to SPI pin 5-7
mbed5_khbo 7:925f0328c938 48 SPI_TFT_ILI9341 TFT(p5, p6, p7, p8, p15, p16,"TFT"); // mosi, miso, sclk, cs, reset, dc
mbed5_khbo 7:925f0328c938 49
mbed5_khbo 7:925f0328c938 50
mbed5_khbo 7:925f0328c938 51 void rondeTijden_thread(void const *args) {
emilmont 1:491820ee784d 52 while (true) {
mbed5_khbo 7:925f0328c938 53 if(sensorBasis == 1)
mbed5_khbo 7:925f0328c938 54 {
mbed5_khbo 8:0499c9bedfca 55 send=false;
mbed5_khbo 7:925f0328c938 56 if(start == 0)
mbed5_khbo 7:925f0328c938 57 {
mbed5_khbo 8:0499c9bedfca 58 buzzer=1;
mbed5_khbo 8:0499c9bedfca 59 if(lapcounter < 99)
mbed5_khbo 8:0499c9bedfca 60 {
mbed5_khbo 8:0499c9bedfca 61 lapcounter++;
mbed5_khbo 8:0499c9bedfca 62 }
mbed5_khbo 8:0499c9bedfca 63 else{
mbed5_khbo 8:0499c9bedfca 64 lapcounter=0;
mbed5_khbo 8:0499c9bedfca 65 }
mbed5_khbo 8:0499c9bedfca 66 t.reset();
mbed5_khbo 8:0499c9bedfca 67 t.start();
mbed5_khbo 8:0499c9bedfca 68 tijdm=0;
mbed5_khbo 7:925f0328c938 69 Thread::wait(500);
mbed5_khbo 8:0499c9bedfca 70 buzzer=0;
mbed5_khbo 7:925f0328c938 71 start=1;
mbed5_khbo 7:925f0328c938 72 }
mbed5_khbo 7:925f0328c938 73 else
mbed5_khbo 7:925f0328c938 74 {
mbed5_khbo 7:925f0328c938 75 start=0;
mbed5_khbo 8:0499c9bedfca 76 buzzer=0;
mbed5_khbo 7:925f0328c938 77 send=true;
mbed5_khbo 7:925f0328c938 78 rondeTijden[2]=rondeTijden[1];
mbed5_khbo 7:925f0328c938 79 rondeTijden[1]=rondeTijden[0];
mbed5_khbo 8:0499c9bedfca 80 rondeTijden[0]=tijds;
mbed5_khbo 8:0499c9bedfca 81 rondeTijdenMilli[2]=rondeTijdenMilli[1];
mbed5_khbo 8:0499c9bedfca 82 rondeTijdenMilli[1]=rondeTijdenMilli[0];
mbed5_khbo 8:0499c9bedfca 83 int tijd=t.read();
mbed5_khbo 8:0499c9bedfca 84 rondeTijdenMilli[0]=tijdmilli;
mbed5_khbo 8:0499c9bedfca 85 rondeTijdenM[2]=rondeTijdenM[1];
mbed5_khbo 8:0499c9bedfca 86 rondeTijdenM[1]=rondeTijdenM[0];
mbed5_khbo 8:0499c9bedfca 87 rondeTijdenM[0]=tijdm;
mbed5_khbo 8:0499c9bedfca 88 t.stop();
mbed5_khbo 7:925f0328c938 89 }
mbed5_khbo 7:925f0328c938 90 }
mbed5_khbo 7:925f0328c938 91 else
mbed5_khbo 7:925f0328c938 92 {
mbed5_khbo 7:925f0328c938 93 led4=0;
mbed5_khbo 7:925f0328c938 94 }
emilmont 1:491820ee784d 95 }
emilmont 1:491820ee784d 96 }
emilmont 1:491820ee784d 97
mbed5_khbo 7:925f0328c938 98
mbed5_khbo 7:925f0328c938 99 void meetStation_thread(void const *args) {
mbed5_khbo 8:0499c9bedfca 100 while(1)
mbed5_khbo 8:0499c9bedfca 101 {
mbed5_khbo 8:0499c9bedfca 102 //startl=0;
mbed5_khbo 8:0499c9bedfca 103 //Thread::wait(500);
mbed5_khbo 8:0499c9bedfca 104 if(starta==1)
mbed5_khbo 8:0499c9bedfca 105 {
mbed5_khbo 8:0499c9bedfca 106 led1=0;
mbed5_khbo 8:0499c9bedfca 107 for(int i=0 ; i<5; i++)
mbed5_khbo 8:0499c9bedfca 108 {
mbed5_khbo 8:0499c9bedfca 109 Thread::wait(500);
mbed5_khbo 8:0499c9bedfca 110 startl=0;
mbed5_khbo 8:0499c9bedfca 111 Thread::wait(500);
mbed5_khbo 8:0499c9bedfca 112 startl=1;
mbed5_khbo 8:0499c9bedfca 113
mbed5_khbo 8:0499c9bedfca 114 }
mbed5_khbo 8:0499c9bedfca 115 Thread::wait(500);
mbed5_khbo 8:0499c9bedfca 116 startl=0;
mbed5_khbo 8:0499c9bedfca 117 Thread::wait(500);
mbed5_khbo 8:0499c9bedfca 118 startl=1;
mbed5_khbo 8:0499c9bedfca 119 led1=1;
mbed5_khbo 8:0499c9bedfca 120 }
mbed5_khbo 8:0499c9bedfca 121 led1=1;
mbed5_khbo 8:0499c9bedfca 122 //for(int i=0 ; i<5; i++)
mbed5_khbo 8:0499c9bedfca 123 //{
mbed5_khbo 8:0499c9bedfca 124 //startl=1;
mbed5_khbo 8:0499c9bedfca 125 //Thread::wait(0.1);
mbed5_khbo 8:0499c9bedfca 126 //startl=0;
mbed5_khbo 8:0499c9bedfca 127 //Thread::wait(0.1);
mbed5_khbo 8:0499c9bedfca 128 //}
mbed5_khbo 8:0499c9bedfca 129
emilmont 1:491820ee784d 130 }
emilmont 1:491820ee784d 131 }
mbed5_khbo 7:925f0328c938 132
mbed5_khbo 7:925f0328c938 133 void ethernet_receive_thread(void const *args) {
mbed5_khbo 7:925f0328c938 134 while(1)
mbed5_khbo 7:925f0328c938 135 {
mbed5_khbo 7:925f0328c938 136
mbed5_khbo 7:925f0328c938 137 EthernetInterface eth;
mbed5_khbo 7:925f0328c938 138 eth.init(); //Use DHCP
mbed5_khbo 7:925f0328c938 139 eth.connect();
mbed5_khbo 7:925f0328c938 140 //lcd.locate(0,10);
mbed5_khbo 7:925f0328c938 141 //lcd.printf("IP Address is %s\n", eth.getIPAddress());
mbed5_khbo 7:925f0328c938 142 TCPSocketConnection sock;
mbed5_khbo 7:925f0328c938 143 sock.connect("192.168.0.100", 8006);
mbed5_khbo 7:925f0328c938 144 char buffer[10];
mbed5_khbo 8:0499c9bedfca 145 string ret;
mbed5_khbo 7:925f0328c938 146 ret = sock.receive(buffer, sizeof(buffer)-1);
mbed5_khbo 8:0499c9bedfca 147 TFT.locate(30,85);
mbed5_khbo 8:0499c9bedfca 148 TFT.set_font((unsigned char*) Arial12x12);
mbed5_khbo 8:0499c9bedfca 149 TFT.printf("%s",ret);
mbed5_khbo 7:925f0328c938 150
mbed5_khbo 7:925f0328c938 151 }
mbed5_khbo 7:925f0328c938 152 }
mbed5_khbo 7:925f0328c938 153
mbed5_khbo 7:925f0328c938 154
mbed5_khbo 7:925f0328c938 155
mbed5_khbo 7:925f0328c938 156 void ethernet_transmit_thread(void const *args) {
mbed5_khbo 7:925f0328c938 157 EthernetInterface eth;
mbed5_khbo 7:925f0328c938 158 eth.init(); //Use DHCP
mbed5_khbo 7:925f0328c938 159 eth.connect();
mbed5_khbo 8:0499c9bedfca 160
mbed5_khbo 8:0499c9bedfca 161 UDPSocket sock;
mbed5_khbo 8:0499c9bedfca 162 sock.init();
mbed5_khbo 8:0499c9bedfca 163
mbed5_khbo 8:0499c9bedfca 164 Endpoint nist;
mbed5_khbo 8:0499c9bedfca 165 nist.set_address("192.168.0.100", 8005);
mbed5_khbo 8:0499c9bedfca 166 while(1)
mbed5_khbo 7:925f0328c938 167 {
mbed5_khbo 8:0499c9bedfca 168 if(send)
mbed5_khbo 8:0499c9bedfca 169 {
mbed5_khbo 8:0499c9bedfca 170 //string buffer=snprintf("2%3d", lapcounter);
mbed5_khbo 8:0499c9bedfca 171 //string buffer2=snprintf("3%3d.%3d", rondeTijden[0],rondeTijdenM[0]);
mbed5_khbo 8:0499c9bedfca 172
mbed5_khbo 8:0499c9bedfca 173 //char out_buffer[] = {snprintf("1: %3d:%3d", rondeTijden[0],rondeTijdenM[0])}; // Does not matter
mbed5_khbo 8:0499c9bedfca 174 //sock.sendTo(nist, out_buffer, sizeof(out_buffer));
mbed5_khbo 8:0499c9bedfca 175 send=false;
mbed5_khbo 8:0499c9bedfca 176 }
mbed5_khbo 7:925f0328c938 177 }
mbed5_khbo 7:925f0328c938 178 }
mbed5_khbo 7:925f0328c938 179
mbed5_khbo 7:925f0328c938 180
mbed5_khbo 7:925f0328c938 181 int main() {
mbed5_khbo 7:925f0328c938 182
mbed5_khbo 7:925f0328c938 183 xbee1.baud(115200);
mbed5_khbo 7:925f0328c938 184 Thread thread1(rondeTijden_thread);
mbed5_khbo 7:925f0328c938 185 Thread thread2(meetStation_thread);
mbed5_khbo 8:0499c9bedfca 186 //Thread thread3(ethernet_receive_thread);
mbed5_khbo 8:0499c9bedfca 187 //Thread thread4(ethernet_transmit_thread);
mbed5_khbo 7:925f0328c938 188 rst1 = 0;
mbed5_khbo 7:925f0328c938 189 wait_ms(1);
mbed5_khbo 7:925f0328c938 190 rst1 = 1;
mbed5_khbo 7:925f0328c938 191 wait_ms(1);
mbed5_khbo 7:925f0328c938 192
mbed5_khbo 7:925f0328c938 193
mbed5_khbo 7:925f0328c938 194
mbed5_khbo 7:925f0328c938 195
mbed5_khbo 7:925f0328c938 196 LCD_LED = 1; // backlite on
mbed5_khbo 7:925f0328c938 197 TFT.claim(stdout); // send stdout to the TFT display
mbed5_khbo 7:925f0328c938 198 TFT.set_orientation(1);
mbed5_khbo 7:925f0328c938 199 TFT.background(White); // set background to black
mbed5_khbo 7:925f0328c938 200 TFT.foreground(Black); // set chars to white
mbed5_khbo 7:925f0328c938 201 TFT.cls(); // clear the screen
mbed5_khbo 7:925f0328c938 202 TFT.set_font((unsigned char*) Neu42x35);
mbed5_khbo 7:925f0328c938 203 TFT.locate(5,5);
mbed5_khbo 7:925f0328c938 204 TFT.printf("Racing robot");
mbed5_khbo 8:0499c9bedfca 205 TFT.locate(30,150);
mbed5_khbo 8:0499c9bedfca 206 TFT.set_font((unsigned char*) Arial12x12);
mbed5_khbo 8:0499c9bedfca 207 TFT.printf("Overzicht Circuit:");
mbed5_khbo 8:0499c9bedfca 208 TFT.locate(250,95);
mbed5_khbo 8:0499c9bedfca 209 TFT.printf("Ronde:");
mbed5_khbo 8:0499c9bedfca 210 TFT.locate(10,215);
mbed5_khbo 8:0499c9bedfca 211 TFT.printf("© Ei:Joriek Rogge, Arne DeBergh");
mbed5_khbo 8:0499c9bedfca 212 TFT.locate(10,227);
mbed5_khbo 8:0499c9bedfca 213 TFT.printf("© Eo:Sven Priker, Alexander De Geeter");
mbed5_khbo 7:925f0328c938 214 TFT.line(0,50,320,50,White);
mbed5_khbo 7:925f0328c938 215 xbee1.baud(115200);
mbed5_khbo 7:925f0328c938 216
mbed5_khbo 7:925f0328c938 217 while(1)
mbed5_khbo 7:925f0328c938 218 {
mbed5_khbo 8:0499c9bedfca 219 TFT.locate(20,40);
mbed5_khbo 8:0499c9bedfca 220 tijds = (t.read()-(tijdm*60));
mbed5_khbo 8:0499c9bedfca 221 tijdmilli = ((t.read()*100)-(tijds*100)-(tijdm*6000));
mbed5_khbo 8:0499c9bedfca 222 //tijdm = tijds/60;
mbed5_khbo 8:0499c9bedfca 223 if(tijds>=60)
mbed5_khbo 8:0499c9bedfca 224 {
mbed5_khbo 8:0499c9bedfca 225 tijdm++;
mbed5_khbo 8:0499c9bedfca 226 tijds=0;
mbed5_khbo 8:0499c9bedfca 227 }
mbed5_khbo 8:0499c9bedfca 228 TFT.set_font((unsigned char*) Neu42x35);
mbed5_khbo 8:0499c9bedfca 229 TFT.printf("%-2d:%-2d:%-2d ",tijdm, tijds,tijdmilli);
mbed5_khbo 8:0499c9bedfca 230 TFT.locate(240,110);
mbed5_khbo 8:0499c9bedfca 231 TFT.printf("%-2d", lapcounter);
mbed5_khbo 8:0499c9bedfca 232 //TFT.locate(30,85);
mbed5_khbo 8:0499c9bedfca 233 //TFT.set_font((unsigned char*) Arial28x28);
mbed5_khbo 8:0499c9bedfca 234 //TFT.printf("1: %-2d:%-2d:%-2d ",rondeTijdenM[0],rondeTijden[0],rondeTijdenMilli[0]);
mbed5_khbo 8:0499c9bedfca 235 //TFT.locate(30,115);
mbed5_khbo 8:0499c9bedfca 236 //TFT.printf("2: %-2d:%-2d:%-2d ",rondeTijdenM[1],rondeTijden[1],rondeTijdenMilli[1]);
mbed5_khbo 7:925f0328c938 237 TFT.set_font((unsigned char*) Arial12x12);
mbed5_khbo 8:0499c9bedfca 238 TFT.circle(275,65,15,Black);
mbed5_khbo 8:0499c9bedfca 239 if(tijdmilli<80)
mbed5_khbo 8:0499c9bedfca 240 {
mbed5_khbo 8:0499c9bedfca 241 TFT.fillcircle(275,65,14,Black);
mbed5_khbo 8:0499c9bedfca 242 }
mbed5_khbo 8:0499c9bedfca 243 else
mbed5_khbo 8:0499c9bedfca 244 {
mbed5_khbo 8:0499c9bedfca 245 TFT.fillcircle(275,65,14,Red);
mbed5_khbo 8:0499c9bedfca 246 }
mbed5_khbo 7:925f0328c938 247 TFT.rect(10,170,110,210,Black);
mbed5_khbo 7:925f0328c938 248 TFT.rect(110,170,210,210,Black);
mbed5_khbo 7:925f0328c938 249 TFT.rect(210,170,310,210,Black);
mbed5_khbo 8:0499c9bedfca 250 switch(circuit)
mbed5_khbo 8:0499c9bedfca 251 {
mbed5_khbo 8:0499c9bedfca 252 case 0:
mbed5_khbo 8:0499c9bedfca 253 TFT.fillrect(11,171,109,209,Red);
mbed5_khbo 8:0499c9bedfca 254 TFT.fillrect(111,171,209,209,Red);
mbed5_khbo 8:0499c9bedfca 255 TFT.fillrect(211,171,309,209,Red);
mbed5_khbo 8:0499c9bedfca 256 break;
mbed5_khbo 8:0499c9bedfca 257 case 1:
mbed5_khbo 8:0499c9bedfca 258 TFT.fillrect(11,171,109,209,Green);
mbed5_khbo 8:0499c9bedfca 259 TFT.fillrect(111,171,209,209,Red);
mbed5_khbo 8:0499c9bedfca 260 TFT.fillrect(211,171,309,209,Red);
mbed5_khbo 8:0499c9bedfca 261 break;
mbed5_khbo 8:0499c9bedfca 262 case 2:
mbed5_khbo 8:0499c9bedfca 263 TFT.fillrect(11,171,109,209,Green);
mbed5_khbo 8:0499c9bedfca 264 TFT.fillrect(111,171,209,209,Green);
mbed5_khbo 8:0499c9bedfca 265 TFT.fillrect(211,171,309,209,Red);
mbed5_khbo 8:0499c9bedfca 266 break;
mbed5_khbo 8:0499c9bedfca 267 case 3:
mbed5_khbo 8:0499c9bedfca 268 TFT.fillrect(11,171,109,209,Green);
mbed5_khbo 8:0499c9bedfca 269 TFT.fillrect(111,171,209,209,Green);
mbed5_khbo 8:0499c9bedfca 270 TFT.fillrect(211,171,309,209,Green);
mbed5_khbo 8:0499c9bedfca 271 break;
mbed5_khbo 8:0499c9bedfca 272 }
mbed5_khbo 8:0499c9bedfca 273 //wait_ms(20);
mbed5_khbo 7:925f0328c938 274 }
mbed5_khbo 7:925f0328c938 275 }