Racing robots
Dependencies: EthernetInterface SPI_TFT_ILI9341 Stopwatch TFT_fonts TextLCD mbed-rtos mbed
Fork of rtos_basic by
Diff: main.cpp
- Revision:
- 7:925f0328c938
- Parent:
- 3:c92e21f305d8
- Child:
- 8:0499c9bedfca
--- a/main.cpp Tue Jun 04 16:01:32 2013 +0100 +++ b/main.cpp Wed Apr 08 17:29:56 2015 +0000 @@ -1,21 +1,196 @@ #include "mbed.h" #include "rtos.h" - +#include "EthernetInterface.h" +#include "stdio.h" +#include "SPI_TFT_ILI9341.h" +#include "string" +#include "Arial12x12.h" +#include "Arial24x23.h" +#include "Arial28x28.h" +#include "font_big.h" +#include "Stopwatch.h" + DigitalOut led1(LED1); DigitalOut led2(LED2); +DigitalOut led3(LED3); +DigitalOut led4(LED4); +DigitalOut rst1(p30); +DigitalIn sensorBasis(p12); +DigitalIn up(p15); +I2C i2c(p28, p27); +Serial xbee1(p9, p10); +const int addr = 0x90; +string rondeTijden[3]; +int stukCircuit=0; +int tellerS=0,tellerM=0,data=125,status,i=3; +int start,i2cinfo1,i2cinfo2,i2cinfo3; +bool send; +char cmd[2]; +Stopwatch klok; + +LocalFileSystem local("local"); -void led2_thread(void const *args) { +extern unsigned char p1[]; // the mbed logo graphic + +// the display has a backlight switch on board +DigitalOut LCD_LED(p21); + +// the TFT is connected to SPI pin 5-7 +SPI_TFT_ILI9341 TFT(p5, p6, p7, p8, p15, p16,"TFT"); // mosi, miso, sclk, cs, reset, dc + + +void rondeTijden_thread(void const *args) { while (true) { - led2 = !led2; - Thread::wait(1000); + if(sensorBasis == 1) + { + if(start == 0) + { + Thread::wait(500); + klok=Stopwatch(); + klok.start(); + start=1; + } + else + { + start=0; + send=true; + rondeTijden[2]=rondeTijden[1]; + rondeTijden[1]=rondeTijden[0]; + rondeTijden[0]=klok.getTime(); + } + } + else + { + led4=0; + } } } -int main() { - Thread thread(led2_thread); - + +void meetStation_thread(void const *args) { while (true) { - led1 = !led1; - Thread::wait(500); + i2c.read(addr, cmd, 2); + switch(cmd[0]) + { + case 0: + if(cmd[1]==1) + { + tellerS=1; + } + break; + case 1: + if(cmd[1]==1) + { + tellerS=2; + } + break; + case 2: + if(cmd[1]==1) + { + tellerS=3; + } + break; + } } } + +void ethernet_receive_thread(void const *args) { + while(1) + { + + EthernetInterface eth; + eth.init(); //Use DHCP + eth.connect(); + //lcd.locate(0,10); + //lcd.printf("IP Address is %s\n", eth.getIPAddress()); + TCPSocketConnection sock; + sock.connect("192.168.0.100", 8006); + char buffer[10]; + int ret; + ret = sock.receive(buffer, sizeof(buffer)-1); + if(buffer[0]==1) + { + switch(buffer[1]) + { + case 'G': + xbee1.putc(0x01); + break; + case 'S': + xbee1.putc(0x02); + break; + } + } + + } + } + + + + void ethernet_transmit_thread(void const *args) { + while(1) + { + + EthernetInterface eth; + eth.init(); //Use DHCP + eth.connect(); + //lcd.locate(0,10); + //lcd.printf("IP Address is %s\n", eth.getIPAddress()); + TCPSocketConnection sock; + sock.connect("192.168.0.100", 8005); + if(send) + { + char http_cmd[] = "12.56"; + sock.send_all(http_cmd, sizeof(http_cmd)-1); + send=false; + } + + } + } + + +int main() { + + xbee1.baud(115200); + Thread thread1(rondeTijden_thread); + Thread thread2(meetStation_thread); + rst1 = 0; + wait_ms(1); + rst1 = 1; + wait_ms(1); + + + + + LCD_LED = 1; // backlite on + TFT.claim(stdout); // send stdout to the TFT display + TFT.set_orientation(1); + TFT.background(White); // set background to black + TFT.foreground(Black); // set chars to white + TFT.cls(); // clear the screen + TFT.set_font((unsigned char*) Neu42x35); + TFT.locate(5,5); + TFT.printf("Racing robot"); + + TFT.line(0,50,320,50,White); + TFT.set_font((unsigned char*) Arial24x23); + TFT.locate(5,55); + TFT.printf("LAPTIJDEN:"); + xbee1.baud(115200); + + //thread3=new Thread(ethernet_receive_thread); + //thread4=new Thread(ethernet_transmit_thread); + while(1) + { + TFT.set_font((unsigned char*) Arial28x28); + TFT.locate(30,90); + TFT.printf(klok.getTime()); + TFT.set_font((unsigned char*) Arial12x12); + TFT.rect(10,170,110,210,Black); + TFT.fillrect(11,171,109,209,Green); + TFT.rect(110,170,210,210,Black); + TFT.fillrect(111,171,209,209,Red); + TFT.rect(210,170,310,210,Black); + TFT.fillrect(211,171,309,209,Red); + wait_ms(100); + } +}