SmartWheels self-driving race car. Designed for NXP Cup. Uses FRDM-KL25Z, area-scan camera, and simple image processing to detect and navigate any NXP spec track.

Dependencies:   TSI USBDevice mbed-dev

Fork of SmartWheels by haofan Zheng

main.cpp

Committer:
hazheng
Date:
2017-02-08
Revision:
13:7dcb1642ef99
Parent:
11:676ea42afd56
Child:
14:88302da8bff0
Child:
16:66c7a09e71ee

File content as of revision 13:7dcb1642ef99:

#include "mbed.h"

#include "Motor.h"
#include "Servo.h"
#include "Core.h"
#include "SWUSBServer.h"
#include "Camera.h"

#include "PinAssignment.h"

//DigitalOut led(LED1, 1);

int main(void) {
   
    SW::Core core;
    
    Motor motor(core);
    Servo servo(core);
    Camera cam(core);
    
    unsigned int testCount = 0;
    unsigned int testCount2 = 0;
    char buf[5];
    bool isRegRead = false;
        
    while (1) 
    {
        //led = 0;
        core.Update(0.0f);
        motor.Update(0.0f);
        testCount++;
        if(testCount >= 200)
        {
            testCount2++;
            sprintf(buf, "%d", testCount2);
            servo.setAngle(SERVO_RT * SERVO_MAX_ANGLE);
            //core.GetUSBServer().PushUnreliableMsg('D', buf);
            testCount = 0;
        }
        
        if(!isRegRead && core.GetUSBServer().GetStatus() == SER_STAT_RUNNING)
        {
            cam.ReadRegisters();
            isRegRead = true;
        }
        
        wait(0.01);
    }
}

/*
PwmOut servo(PTE20);
 
int main() {
    servo.period(0.020);          // servo requires a 20ms period
    
    while (1) {
        for(float offset=0.0; offset<0.001; offset+=0.0001) {
            servo.pulsewidth(0.001 + offset); // servo position determined by a pulsewidth between 1-2ms
            wait(0.25);
        }
    }
    
}
*/

/*  //code for accelerometer sensor.
    const char regAddr = 0x0D;
    char readValue = 0;
    int result1 = m_sccbCtrl.write(0x1D<<1, &regAddr, 1, true);
    int result2 = m_sccbCtrl.read(0x1D<<1, &readValue, 1, false);
    char buf[20];
    sprintf(buf, "%#x-%#x-%d-%d", regAddr, readValue, result1, result2);
    m_core.GetUSBServer().PushUnreliableMsg('D', buf);
*/