Racing robots
Dependencies: EthernetInterface SPI_TFT_ILI9341 Stopwatch TFT_fonts TextLCD mbed-rtos mbed
Fork of rtos_basic by
main.cpp@7:925f0328c938, 2015-04-08 (annotated)
- 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?
User | Revision | Line number | New 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 | } |