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-04-08
Revision:
7:925f0328c938
Parent:
3:c92e21f305d8
Child:
8:0499c9bedfca

File content as of revision 7:925f0328c938:

#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");
 
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)
      {
         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;
      }       
    }
}
 

void meetStation_thread(void const *args) {
    while (true) {
        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);
     }
}