Racing robots

Dependencies:   EthernetInterface SPI_TFT_ILI9341 Stopwatch TFT_fonts TextLCD mbed-rtos mbed

Fork of rtos_basic by mbed official

main.cpp

Committer:
mbed5_khbo
Date:
2015-05-11
Revision:
8:0499c9bedfca
Parent:
7:925f0328c938

File content as of revision 8:0499c9bedfca:

#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"


Timer t;
DigitalOut led1(p25);
DigitalOut led2(LED2);
DigitalOut led3(LED3);
DigitalOut led4(LED4);
DigitalOut rst1(p30);
DigitalOut buzzer(p17);
DigitalOut startl(p21);
DigitalIn  sensorBasis(p12);
DigitalIn  test(p23);
DigitalIn starta(p12);
I2C i2c(p28, p27);
Serial xbee1(p9, p10);
const int addr = 0x90;
int rondeTijden[3];
int rondeTijdenMilli[3];
int rondeTijdenM[3];
int stukCircuit=0;
int lapcounter;
int overzicht;
int circuit;
int tijds,tijdmilli,tijdm;
int tellerS=0,tellerM=0,data=125,status,i=3;
int start,i2cinfo1,i2cinfo2,i2cinfo3;
bool send;
char cmd[2];

LocalFileSystem local("local");
 
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) {
      if(sensorBasis == 1)
      {
         send=false;
         if(start == 0)
         {
            buzzer=1;
            if(lapcounter < 99)
            { 
                lapcounter++;
            }
            else{
                lapcounter=0;
            }
            t.reset();
            t.start();
            tijdm=0;
            Thread::wait(500);
            buzzer=0;
            start=1;
         }
         else
         {
            start=0;
            buzzer=0;
            send=true;
            rondeTijden[2]=rondeTijden[1];
            rondeTijden[1]=rondeTijden[0];
            rondeTijden[0]=tijds;
            rondeTijdenMilli[2]=rondeTijdenMilli[1];
            rondeTijdenMilli[1]=rondeTijdenMilli[0];
            int tijd=t.read();
            rondeTijdenMilli[0]=tijdmilli;
            rondeTijdenM[2]=rondeTijdenM[1];
            rondeTijdenM[1]=rondeTijdenM[0];
            rondeTijdenM[0]=tijdm;
            t.stop();
        }
      }
      else
      {
          led4=0;
      }       
    }
}
 

void meetStation_thread(void const *args) {
    while(1)
    {
    //startl=0;
    //Thread::wait(500);
    if(starta==1)
    {
    led1=0;
    for(int i=0 ; i<5; i++)
    {
    Thread::wait(500);
    startl=0;
    Thread::wait(500);
    startl=1;
    
    }
    Thread::wait(500);
    startl=0;
    Thread::wait(500);
    startl=1;
    led1=1;
    }
    led1=1;
    //for(int i=0 ; i<5; i++)
    //{
    //startl=1;
    //Thread::wait(0.1);
    //startl=0;
    //Thread::wait(0.1);
    //}
    
    }
}

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];
    string ret;
    ret = sock.receive(buffer, sizeof(buffer)-1);
    TFT.locate(30,85);
    TFT.set_font((unsigned char*) Arial12x12);
    TFT.printf("%s",ret);
    
    }
 }
 
 
 
 void ethernet_transmit_thread(void const *args) {
    EthernetInterface eth;
    eth.init(); //Use DHCP
    eth.connect();
    
    UDPSocket sock;
    sock.init();
    
    Endpoint nist;
    nist.set_address("192.168.0.100", 8005);
    while(1)
    {
        if(send)
        {
            //string buffer=snprintf("2%3d", lapcounter);
            //string buffer2=snprintf("3%3d.%3d", rondeTijden[0],rondeTijdenM[0]);
            
            //char out_buffer[] = {snprintf("1: %3d:%3d", rondeTijden[0],rondeTijdenM[0])}; // Does not matter
            //sock.sendTo(nist, out_buffer, sizeof(out_buffer));
            send=false;
        }
    }
 }
 
 
int main() {
    
    xbee1.baud(115200);
    Thread thread1(rondeTijden_thread);
    Thread thread2(meetStation_thread);
    //Thread thread3(ethernet_receive_thread);
    //Thread thread4(ethernet_transmit_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.locate(30,150);
    TFT.set_font((unsigned char*) Arial12x12);
    TFT.printf("Overzicht Circuit:");
    TFT.locate(250,95);
    TFT.printf("Ronde:");
    TFT.locate(10,215);
    TFT.printf("© Ei:Joriek Rogge, Arne DeBergh");
    TFT.locate(10,227);
    TFT.printf("© Eo:Sven Priker, Alexander De Geeter");
    TFT.line(0,50,320,50,White);
    xbee1.baud(115200);
    
    while(1)
    {
    TFT.locate(20,40);
    tijds = (t.read()-(tijdm*60));
    tijdmilli = ((t.read()*100)-(tijds*100)-(tijdm*6000));
    //tijdm = tijds/60;
    if(tijds>=60)
    {
        tijdm++;
        tijds=0;
    }
    TFT.set_font((unsigned char*) Neu42x35);
    TFT.printf("%-2d:%-2d:%-2d ",tijdm, tijds,tijdmilli);
    TFT.locate(240,110);
    TFT.printf("%-2d", lapcounter);
    //TFT.locate(30,85);
    //TFT.set_font((unsigned char*) Arial28x28);
    //TFT.printf("1: %-2d:%-2d:%-2d ",rondeTijdenM[0],rondeTijden[0],rondeTijdenMilli[0]);
    //TFT.locate(30,115);
    //TFT.printf("2: %-2d:%-2d:%-2d ",rondeTijdenM[1],rondeTijden[1],rondeTijdenMilli[1]);
    TFT.set_font((unsigned char*) Arial12x12);
    TFT.circle(275,65,15,Black);
    if(tijdmilli<80)
    {
        TFT.fillcircle(275,65,14,Black);
    }
    else
    {
        TFT.fillcircle(275,65,14,Red);
    }
    TFT.rect(10,170,110,210,Black);
    TFT.rect(110,170,210,210,Black);
    TFT.rect(210,170,310,210,Black);
    switch(circuit)
    {
        case 0:
        TFT.fillrect(11,171,109,209,Red);
        TFT.fillrect(111,171,209,209,Red);
        TFT.fillrect(211,171,309,209,Red);
        break;
        case 1:
        TFT.fillrect(11,171,109,209,Green);
        TFT.fillrect(111,171,209,209,Red);
        TFT.fillrect(211,171,309,209,Red);
        break;
        case 2:
        TFT.fillrect(11,171,109,209,Green);
        TFT.fillrect(111,171,209,209,Green);
        TFT.fillrect(211,171,309,209,Red);
        break;
        case 3:
        TFT.fillrect(11,171,109,209,Green);
        TFT.fillrect(111,171,209,209,Green);
        TFT.fillrect(211,171,309,209,Green);
        break;
     }   
    //wait_ms(20);
     }
}