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:
Wed Apr 08 17:29:56 2015 +0000
Revision:
7:925f0328c938
Parent:
3:c92e21f305d8
Child:
8:0499c9bedfca
voor sven

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 7:925f0328c938 11 #include "Stopwatch.h"
mbed5_khbo 7:925f0328c938 12
emilmont 1:491820ee784d 13 DigitalOut led1(LED1);
emilmont 1:491820ee784d 14 DigitalOut led2(LED2);
mbed5_khbo 7:925f0328c938 15 DigitalOut led3(LED3);
mbed5_khbo 7:925f0328c938 16 DigitalOut led4(LED4);
mbed5_khbo 7:925f0328c938 17 DigitalOut rst1(p30);
mbed5_khbo 7:925f0328c938 18 DigitalIn sensorBasis(p12);
mbed5_khbo 7:925f0328c938 19 DigitalIn up(p15);
mbed5_khbo 7:925f0328c938 20 I2C i2c(p28, p27);
mbed5_khbo 7:925f0328c938 21 Serial xbee1(p9, p10);
mbed5_khbo 7:925f0328c938 22 const int addr = 0x90;
mbed5_khbo 7:925f0328c938 23 string rondeTijden[3];
mbed5_khbo 7:925f0328c938 24 int stukCircuit=0;
mbed5_khbo 7:925f0328c938 25 int tellerS=0,tellerM=0,data=125,status,i=3;
mbed5_khbo 7:925f0328c938 26 int start,i2cinfo1,i2cinfo2,i2cinfo3;
mbed5_khbo 7:925f0328c938 27 bool send;
mbed5_khbo 7:925f0328c938 28 char cmd[2];
mbed5_khbo 7:925f0328c938 29 Stopwatch klok;
mbed5_khbo 7:925f0328c938 30
mbed5_khbo 7:925f0328c938 31 LocalFileSystem local("local");
emilmont 1:491820ee784d 32
mbed5_khbo 7:925f0328c938 33 extern unsigned char p1[]; // the mbed logo graphic
mbed5_khbo 7:925f0328c938 34
mbed5_khbo 7:925f0328c938 35 // the display has a backlight switch on board
mbed5_khbo 7:925f0328c938 36 DigitalOut LCD_LED(p21);
mbed5_khbo 7:925f0328c938 37
mbed5_khbo 7:925f0328c938 38 // the TFT is connected to SPI pin 5-7
mbed5_khbo 7:925f0328c938 39 SPI_TFT_ILI9341 TFT(p5, p6, p7, p8, p15, p16,"TFT"); // mosi, miso, sclk, cs, reset, dc
mbed5_khbo 7:925f0328c938 40
mbed5_khbo 7:925f0328c938 41
mbed5_khbo 7:925f0328c938 42 void rondeTijden_thread(void const *args) {
emilmont 1:491820ee784d 43 while (true) {
mbed5_khbo 7:925f0328c938 44 if(sensorBasis == 1)
mbed5_khbo 7:925f0328c938 45 {
mbed5_khbo 7:925f0328c938 46 if(start == 0)
mbed5_khbo 7:925f0328c938 47 {
mbed5_khbo 7:925f0328c938 48 Thread::wait(500);
mbed5_khbo 7:925f0328c938 49 klok=Stopwatch();
mbed5_khbo 7:925f0328c938 50 klok.start();
mbed5_khbo 7:925f0328c938 51 start=1;
mbed5_khbo 7:925f0328c938 52 }
mbed5_khbo 7:925f0328c938 53 else
mbed5_khbo 7:925f0328c938 54 {
mbed5_khbo 7:925f0328c938 55 start=0;
mbed5_khbo 7:925f0328c938 56 send=true;
mbed5_khbo 7:925f0328c938 57 rondeTijden[2]=rondeTijden[1];
mbed5_khbo 7:925f0328c938 58 rondeTijden[1]=rondeTijden[0];
mbed5_khbo 7:925f0328c938 59 rondeTijden[0]=klok.getTime();
mbed5_khbo 7:925f0328c938 60 }
mbed5_khbo 7:925f0328c938 61 }
mbed5_khbo 7:925f0328c938 62 else
mbed5_khbo 7:925f0328c938 63 {
mbed5_khbo 7:925f0328c938 64 led4=0;
mbed5_khbo 7:925f0328c938 65 }
emilmont 1:491820ee784d 66 }
emilmont 1:491820ee784d 67 }
emilmont 1:491820ee784d 68
mbed5_khbo 7:925f0328c938 69
mbed5_khbo 7:925f0328c938 70 void meetStation_thread(void const *args) {
emilmont 1:491820ee784d 71 while (true) {
mbed5_khbo 7:925f0328c938 72 i2c.read(addr, cmd, 2);
mbed5_khbo 7:925f0328c938 73 switch(cmd[0])
mbed5_khbo 7:925f0328c938 74 {
mbed5_khbo 7:925f0328c938 75 case 0:
mbed5_khbo 7:925f0328c938 76 if(cmd[1]==1)
mbed5_khbo 7:925f0328c938 77 {
mbed5_khbo 7:925f0328c938 78 tellerS=1;
mbed5_khbo 7:925f0328c938 79 }
mbed5_khbo 7:925f0328c938 80 break;
mbed5_khbo 7:925f0328c938 81 case 1:
mbed5_khbo 7:925f0328c938 82 if(cmd[1]==1)
mbed5_khbo 7:925f0328c938 83 {
mbed5_khbo 7:925f0328c938 84 tellerS=2;
mbed5_khbo 7:925f0328c938 85 }
mbed5_khbo 7:925f0328c938 86 break;
mbed5_khbo 7:925f0328c938 87 case 2:
mbed5_khbo 7:925f0328c938 88 if(cmd[1]==1)
mbed5_khbo 7:925f0328c938 89 {
mbed5_khbo 7:925f0328c938 90 tellerS=3;
mbed5_khbo 7:925f0328c938 91 }
mbed5_khbo 7:925f0328c938 92 break;
mbed5_khbo 7:925f0328c938 93 }
emilmont 1:491820ee784d 94 }
emilmont 1:491820ee784d 95 }
mbed5_khbo 7:925f0328c938 96
mbed5_khbo 7:925f0328c938 97 void ethernet_receive_thread(void const *args) {
mbed5_khbo 7:925f0328c938 98 while(1)
mbed5_khbo 7:925f0328c938 99 {
mbed5_khbo 7:925f0328c938 100
mbed5_khbo 7:925f0328c938 101 EthernetInterface eth;
mbed5_khbo 7:925f0328c938 102 eth.init(); //Use DHCP
mbed5_khbo 7:925f0328c938 103 eth.connect();
mbed5_khbo 7:925f0328c938 104 //lcd.locate(0,10);
mbed5_khbo 7:925f0328c938 105 //lcd.printf("IP Address is %s\n", eth.getIPAddress());
mbed5_khbo 7:925f0328c938 106 TCPSocketConnection sock;
mbed5_khbo 7:925f0328c938 107 sock.connect("192.168.0.100", 8006);
mbed5_khbo 7:925f0328c938 108 char buffer[10];
mbed5_khbo 7:925f0328c938 109 int ret;
mbed5_khbo 7:925f0328c938 110 ret = sock.receive(buffer, sizeof(buffer)-1);
mbed5_khbo 7:925f0328c938 111 if(buffer[0]==1)
mbed5_khbo 7:925f0328c938 112 {
mbed5_khbo 7:925f0328c938 113 switch(buffer[1])
mbed5_khbo 7:925f0328c938 114 {
mbed5_khbo 7:925f0328c938 115 case 'G':
mbed5_khbo 7:925f0328c938 116 xbee1.putc(0x01);
mbed5_khbo 7:925f0328c938 117 break;
mbed5_khbo 7:925f0328c938 118 case 'S':
mbed5_khbo 7:925f0328c938 119 xbee1.putc(0x02);
mbed5_khbo 7:925f0328c938 120 break;
mbed5_khbo 7:925f0328c938 121 }
mbed5_khbo 7:925f0328c938 122 }
mbed5_khbo 7:925f0328c938 123
mbed5_khbo 7:925f0328c938 124 }
mbed5_khbo 7:925f0328c938 125 }
mbed5_khbo 7:925f0328c938 126
mbed5_khbo 7:925f0328c938 127
mbed5_khbo 7:925f0328c938 128
mbed5_khbo 7:925f0328c938 129 void ethernet_transmit_thread(void const *args) {
mbed5_khbo 7:925f0328c938 130 while(1)
mbed5_khbo 7:925f0328c938 131 {
mbed5_khbo 7:925f0328c938 132
mbed5_khbo 7:925f0328c938 133 EthernetInterface eth;
mbed5_khbo 7:925f0328c938 134 eth.init(); //Use DHCP
mbed5_khbo 7:925f0328c938 135 eth.connect();
mbed5_khbo 7:925f0328c938 136 //lcd.locate(0,10);
mbed5_khbo 7:925f0328c938 137 //lcd.printf("IP Address is %s\n", eth.getIPAddress());
mbed5_khbo 7:925f0328c938 138 TCPSocketConnection sock;
mbed5_khbo 7:925f0328c938 139 sock.connect("192.168.0.100", 8005);
mbed5_khbo 7:925f0328c938 140 if(send)
mbed5_khbo 7:925f0328c938 141 {
mbed5_khbo 7:925f0328c938 142 char http_cmd[] = "12.56";
mbed5_khbo 7:925f0328c938 143 sock.send_all(http_cmd, sizeof(http_cmd)-1);
mbed5_khbo 7:925f0328c938 144 send=false;
mbed5_khbo 7:925f0328c938 145 }
mbed5_khbo 7:925f0328c938 146
mbed5_khbo 7:925f0328c938 147 }
mbed5_khbo 7:925f0328c938 148 }
mbed5_khbo 7:925f0328c938 149
mbed5_khbo 7:925f0328c938 150
mbed5_khbo 7:925f0328c938 151 int main() {
mbed5_khbo 7:925f0328c938 152
mbed5_khbo 7:925f0328c938 153 xbee1.baud(115200);
mbed5_khbo 7:925f0328c938 154 Thread thread1(rondeTijden_thread);
mbed5_khbo 7:925f0328c938 155 Thread thread2(meetStation_thread);
mbed5_khbo 7:925f0328c938 156 rst1 = 0;
mbed5_khbo 7:925f0328c938 157 wait_ms(1);
mbed5_khbo 7:925f0328c938 158 rst1 = 1;
mbed5_khbo 7:925f0328c938 159 wait_ms(1);
mbed5_khbo 7:925f0328c938 160
mbed5_khbo 7:925f0328c938 161
mbed5_khbo 7:925f0328c938 162
mbed5_khbo 7:925f0328c938 163
mbed5_khbo 7:925f0328c938 164 LCD_LED = 1; // backlite on
mbed5_khbo 7:925f0328c938 165 TFT.claim(stdout); // send stdout to the TFT display
mbed5_khbo 7:925f0328c938 166 TFT.set_orientation(1);
mbed5_khbo 7:925f0328c938 167 TFT.background(White); // set background to black
mbed5_khbo 7:925f0328c938 168 TFT.foreground(Black); // set chars to white
mbed5_khbo 7:925f0328c938 169 TFT.cls(); // clear the screen
mbed5_khbo 7:925f0328c938 170 TFT.set_font((unsigned char*) Neu42x35);
mbed5_khbo 7:925f0328c938 171 TFT.locate(5,5);
mbed5_khbo 7:925f0328c938 172 TFT.printf("Racing robot");
mbed5_khbo 7:925f0328c938 173
mbed5_khbo 7:925f0328c938 174 TFT.line(0,50,320,50,White);
mbed5_khbo 7:925f0328c938 175 TFT.set_font((unsigned char*) Arial24x23);
mbed5_khbo 7:925f0328c938 176 TFT.locate(5,55);
mbed5_khbo 7:925f0328c938 177 TFT.printf("LAPTIJDEN:");
mbed5_khbo 7:925f0328c938 178 xbee1.baud(115200);
mbed5_khbo 7:925f0328c938 179
mbed5_khbo 7:925f0328c938 180 //thread3=new Thread(ethernet_receive_thread);
mbed5_khbo 7:925f0328c938 181 //thread4=new Thread(ethernet_transmit_thread);
mbed5_khbo 7:925f0328c938 182 while(1)
mbed5_khbo 7:925f0328c938 183 {
mbed5_khbo 7:925f0328c938 184 TFT.set_font((unsigned char*) Arial28x28);
mbed5_khbo 7:925f0328c938 185 TFT.locate(30,90);
mbed5_khbo 7:925f0328c938 186 TFT.printf(klok.getTime());
mbed5_khbo 7:925f0328c938 187 TFT.set_font((unsigned char*) Arial12x12);
mbed5_khbo 7:925f0328c938 188 TFT.rect(10,170,110,210,Black);
mbed5_khbo 7:925f0328c938 189 TFT.fillrect(11,171,109,209,Green);
mbed5_khbo 7:925f0328c938 190 TFT.rect(110,170,210,210,Black);
mbed5_khbo 7:925f0328c938 191 TFT.fillrect(111,171,209,209,Red);
mbed5_khbo 7:925f0328c938 192 TFT.rect(210,170,310,210,Black);
mbed5_khbo 7:925f0328c938 193 TFT.fillrect(211,171,309,209,Red);
mbed5_khbo 7:925f0328c938 194 wait_ms(100);
mbed5_khbo 7:925f0328c938 195 }
mbed5_khbo 7:925f0328c938 196 }