Racing robots

Dependencies:   EthernetInterface SPI_TFT_ILI9341 Stopwatch TFT_fonts TextLCD mbed-rtos mbed

Fork of rtos_basic by mbed official

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "rtos.h"
00003 #include "EthernetInterface.h"
00004 #include "stdio.h"
00005 #include "SPI_TFT_ILI9341.h"
00006 #include "string"
00007 #include "Arial12x12.h"
00008 #include "Arial24x23.h"
00009 #include "Arial28x28.h"
00010 #include "font_big.h"
00011 
00012 
00013 Timer t;
00014 DigitalOut led1(p25);
00015 DigitalOut led2(LED2);
00016 DigitalOut led3(LED3);
00017 DigitalOut led4(LED4);
00018 DigitalOut rst1(p30);
00019 DigitalOut buzzer(p17);
00020 DigitalOut startl(p21);
00021 DigitalIn  sensorBasis(p12);
00022 DigitalIn  test(p23);
00023 DigitalIn starta(p12);
00024 I2C i2c(p28, p27);
00025 Serial xbee1(p9, p10);
00026 const int addr = 0x90;
00027 int rondeTijden[3];
00028 int rondeTijdenMilli[3];
00029 int rondeTijdenM[3];
00030 int stukCircuit=0;
00031 int lapcounter;
00032 int overzicht;
00033 int circuit;
00034 int tijds,tijdmilli,tijdm;
00035 int tellerS=0,tellerM=0,data=125,status,i=3;
00036 int start,i2cinfo1,i2cinfo2,i2cinfo3;
00037 bool send;
00038 char cmd[2];
00039 
00040 LocalFileSystem local("local");
00041  
00042 extern unsigned char p1[];  // the mbed logo graphic
00043  
00044 // the display has a backlight switch on board 
00045 DigitalOut LCD_LED(p21);       
00046  
00047 // the TFT is connected to SPI pin 5-7
00048 SPI_TFT_ILI9341 TFT(p5, p6, p7, p8, p15, p16,"TFT"); // mosi, miso, sclk, cs, reset, dc
00049   
00050 
00051 void rondeTijden_thread(void const *args) {
00052     while (true) {
00053       if(sensorBasis == 1)
00054       {
00055          send=false;
00056          if(start == 0)
00057          {
00058             buzzer=1;
00059             if(lapcounter < 99)
00060             { 
00061                 lapcounter++;
00062             }
00063             else{
00064                 lapcounter=0;
00065             }
00066             t.reset();
00067             t.start();
00068             tijdm=0;
00069             Thread::wait(500);
00070             buzzer=0;
00071             start=1;
00072          }
00073          else
00074          {
00075             start=0;
00076             buzzer=0;
00077             send=true;
00078             rondeTijden[2]=rondeTijden[1];
00079             rondeTijden[1]=rondeTijden[0];
00080             rondeTijden[0]=tijds;
00081             rondeTijdenMilli[2]=rondeTijdenMilli[1];
00082             rondeTijdenMilli[1]=rondeTijdenMilli[0];
00083             int tijd=t.read();
00084             rondeTijdenMilli[0]=tijdmilli;
00085             rondeTijdenM[2]=rondeTijdenM[1];
00086             rondeTijdenM[1]=rondeTijdenM[0];
00087             rondeTijdenM[0]=tijdm;
00088             t.stop();
00089         }
00090       }
00091       else
00092       {
00093           led4=0;
00094       }       
00095     }
00096 }
00097  
00098 
00099 void meetStation_thread(void const *args) {
00100     while(1)
00101     {
00102     //startl=0;
00103     //Thread::wait(500);
00104     if(starta==1)
00105     {
00106     led1=0;
00107     for(int i=0 ; i<5; i++)
00108     {
00109     Thread::wait(500);
00110     startl=0;
00111     Thread::wait(500);
00112     startl=1;
00113     
00114     }
00115     Thread::wait(500);
00116     startl=0;
00117     Thread::wait(500);
00118     startl=1;
00119     led1=1;
00120     }
00121     led1=1;
00122     //for(int i=0 ; i<5; i++)
00123     //{
00124     //startl=1;
00125     //Thread::wait(0.1);
00126     //startl=0;
00127     //Thread::wait(0.1);
00128     //}
00129     
00130     }
00131 }
00132 
00133 void ethernet_receive_thread(void const *args) {
00134     while(1)
00135     {
00136     
00137     EthernetInterface eth;
00138     eth.init(); //Use DHCP
00139     eth.connect();
00140     //lcd.locate(0,10);
00141     //lcd.printf("IP Address is %s\n", eth.getIPAddress());
00142     TCPSocketConnection sock;
00143     sock.connect("192.168.0.100", 8006);
00144     char buffer[10];
00145     string ret;
00146     ret = sock.receive(buffer, sizeof(buffer)-1);
00147     TFT.locate(30,85);
00148     TFT.set_font((unsigned char*) Arial12x12);
00149     TFT.printf("%s",ret);
00150     
00151     }
00152  }
00153  
00154  
00155  
00156  void ethernet_transmit_thread(void const *args) {
00157     EthernetInterface eth;
00158     eth.init(); //Use DHCP
00159     eth.connect();
00160     
00161     UDPSocket sock;
00162     sock.init();
00163     
00164     Endpoint nist;
00165     nist.set_address("192.168.0.100", 8005);
00166     while(1)
00167     {
00168         if(send)
00169         {
00170             //string buffer=snprintf("2%3d", lapcounter);
00171             //string buffer2=snprintf("3%3d.%3d", rondeTijden[0],rondeTijdenM[0]);
00172             
00173             //char out_buffer[] = {snprintf("1: %3d:%3d", rondeTijden[0],rondeTijdenM[0])}; // Does not matter
00174             //sock.sendTo(nist, out_buffer, sizeof(out_buffer));
00175             send=false;
00176         }
00177     }
00178  }
00179  
00180  
00181 int main() {
00182     
00183     xbee1.baud(115200);
00184     Thread thread1(rondeTijden_thread);
00185     Thread thread2(meetStation_thread);
00186     //Thread thread3(ethernet_receive_thread);
00187     //Thread thread4(ethernet_transmit_thread);
00188     rst1 = 0;
00189     wait_ms(1);
00190     rst1 = 1;
00191     wait_ms(1);
00192         
00193        
00194             
00195             
00196     LCD_LED = 1;            // backlite on
00197     TFT.claim(stdout);        // send stdout to the TFT display
00198         TFT.set_orientation(1);
00199         TFT.background(White);    // set background to black
00200         TFT.foreground(Black);    // set chars to white
00201         TFT.cls();                // clear the screen
00202     TFT.set_font((unsigned char*) Neu42x35);
00203     TFT.locate(5,5);
00204     TFT.printf("Racing robot");
00205     TFT.locate(30,150);
00206     TFT.set_font((unsigned char*) Arial12x12);
00207     TFT.printf("Overzicht Circuit:");
00208     TFT.locate(250,95);
00209     TFT.printf("Ronde:");
00210     TFT.locate(10,215);
00211     TFT.printf("© Ei:Joriek Rogge, Arne DeBergh");
00212     TFT.locate(10,227);
00213     TFT.printf("© Eo:Sven Priker, Alexander De Geeter");
00214     TFT.line(0,50,320,50,White);
00215     xbee1.baud(115200);
00216     
00217     while(1)
00218     {
00219     TFT.locate(20,40);
00220     tijds = (t.read()-(tijdm*60));
00221     tijdmilli = ((t.read()*100)-(tijds*100)-(tijdm*6000));
00222     //tijdm = tijds/60;
00223     if(tijds>=60)
00224     {
00225         tijdm++;
00226         tijds=0;
00227     }
00228     TFT.set_font((unsigned char*) Neu42x35);
00229     TFT.printf("%-2d:%-2d:%-2d ",tijdm, tijds,tijdmilli);
00230     TFT.locate(240,110);
00231     TFT.printf("%-2d", lapcounter);
00232     //TFT.locate(30,85);
00233     //TFT.set_font((unsigned char*) Arial28x28);
00234     //TFT.printf("1: %-2d:%-2d:%-2d ",rondeTijdenM[0],rondeTijden[0],rondeTijdenMilli[0]);
00235     //TFT.locate(30,115);
00236     //TFT.printf("2: %-2d:%-2d:%-2d ",rondeTijdenM[1],rondeTijden[1],rondeTijdenMilli[1]);
00237     TFT.set_font((unsigned char*) Arial12x12);
00238     TFT.circle(275,65,15,Black);
00239     if(tijdmilli<80)
00240     {
00241         TFT.fillcircle(275,65,14,Black);
00242     }
00243     else
00244     {
00245         TFT.fillcircle(275,65,14,Red);
00246     }
00247     TFT.rect(10,170,110,210,Black);
00248     TFT.rect(110,170,210,210,Black);
00249     TFT.rect(210,170,310,210,Black);
00250     switch(circuit)
00251     {
00252         case 0:
00253         TFT.fillrect(11,171,109,209,Red);
00254         TFT.fillrect(111,171,209,209,Red);
00255         TFT.fillrect(211,171,309,209,Red);
00256         break;
00257         case 1:
00258         TFT.fillrect(11,171,109,209,Green);
00259         TFT.fillrect(111,171,209,209,Red);
00260         TFT.fillrect(211,171,309,209,Red);
00261         break;
00262         case 2:
00263         TFT.fillrect(11,171,109,209,Green);
00264         TFT.fillrect(111,171,209,209,Green);
00265         TFT.fillrect(211,171,309,209,Red);
00266         break;
00267         case 3:
00268         TFT.fillrect(11,171,109,209,Green);
00269         TFT.fillrect(111,171,209,209,Green);
00270         TFT.fillrect(211,171,309,209,Green);
00271         break;
00272      }   
00273     //wait_ms(20);
00274      }
00275 }