VNG bot battle

Dependencies:   BLE_API mbed nRF51822

Revision:
0:122d7bf3bbf0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.log	Mon Sep 05 19:55:23 2016 +0000
@@ -0,0 +1,218 @@
+/*
+ * main.cpp
+ *
+ *  Created on: Aug 23, 2016
+ *      Author: tanpt
+ */
+
+#include "common.h"
+#include "MotorController.h"
+
+//#include "ble/BLE.h"
+//#include "ble/services/iBeacon.h"
+//#include "ble/services/UARTService.h"
+
+MotorController motorController;
+
+//// Sensor
+#define NOISE 5
+//#define DEBUG
+
+#ifdef DEBUG
+Serial      pc(p10, p11);
+#endif
+Ticker      ticker;
+AnalogIn    analog_ir(p1);
+DigitalIn   SEN_UP_R(p2);
+DigitalIn   SEN_UP_L(p3);
+DigitalIn   SEN_DOWN(p4);
+DigitalIn   SEN_IR(p6);
+
+#define ON      0
+#define OFF     1
+#define VREF    3300.0  //mV
+
+uint16_t    g_time_led = 0;
+
+//////////////////////////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////
+//////////////////////////////////////////////////
+/*
+* @param    none.
+* @return   Distance (cm), 1-80 cm.
+*/
+uint16_t sensor_ir(void)
+{
+    uint16_t    adc;
+    uint16_t    cm;
+    uint16_t    sensor = 0, i;
+
+    for(i=0; i<NOISE; i++) {
+        adc = analog_ir.read_u16();
+        adc = 750-adc;
+        if      (adc > 60000) cm = 1;
+        else if (adc > 600) cm = 0;
+        else if (adc > 550) cm = adc/8;
+        else if (adc > 500) cm = adc/10;
+        else if (adc > 450) cm = adc/12;
+        else if (adc > 400) cm = adc/14;
+        else if (adc > 350) cm = adc/16;
+        else if (adc > 300) cm = adc/18;
+        else if (adc > 200) cm = adc/16;
+        else if (adc > 200) cm = adc/14;
+        else if (adc > 150) cm = adc/12;
+        else if (adc > 100) cm = adc/10;
+        else if (adc >  60) cm = adc/9;
+        else if (adc >  30) cm = adc/8;
+        else if (adc >   0) cm = adc/7;
+
+        wait(0.001);
+        sensor = sensor + cm;
+        if(cm == 0) break;
+        cm = sensor/NOISE;
+    }
+
+#ifdef DEBUG
+    pc.printf("\r\n %d adc, %d cm", adc, cm);
+#endif
+    return cm;
+}
+
+//////////////////////////////////////////////////
+/*
+* @param    none.
+* @return   ON or OFF.
+*/
+uint8_t sensor_ir2(void)
+{
+    uint16_t i, sensor = 0;
+
+    for(i=0; i<NOISE; i++) {
+        wait(0.001);
+        sensor = sensor + SEN_IR;
+    }
+    if(sensor > NOISE/2)   return OFF;
+    else                   return ON;
+}
+
+//////////////////////////////////////////////////
+/*
+* @param    none.
+* @return   ON or OFF.
+*/
+uint8_t sensor_up_left(void)
+{
+    uint16_t i, sensor = 0;
+
+    for(i=0; i<NOISE; i++) {
+        wait(0.001);
+        sensor = sensor + SEN_UP_L;
+    }
+    if(sensor > NOISE/2)   return OFF;
+    else                   return ON;
+}
+//////////////////////////////////////////////////
+/*
+* @param    none.
+* @return   ON or OFF.
+*/
+uint8_t sensor_up_right(void)
+{
+    uint16_t i, sensor = 0;
+
+    for(i=0; i<NOISE; i++) {
+        wait(0.001);
+        sensor = sensor + SEN_UP_R;
+    }
+    if(sensor > NOISE/2)   return OFF;
+    else                   return ON;
+}
+//////////////////////////////////////////////////
+/*
+* @param    none.
+* @return   ON or OFF.
+*/
+uint8_t sensor_down(void)
+{
+    uint16_t i, sensor = 0;
+
+    for(i=0; i<NOISE; i++) {
+        wait(0.001);
+        sensor = sensor + SEN_DOWN;
+    }
+    if(sensor > NOISE/2)   return OFF;
+    else                   return ON;
+}
+//////////////////////////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////////////////////////
+void periodicCallback(void)
+{
+
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////////////////////////
+
+int main(void)
+{
+    wait(0.1);
+//Init Hardware
+    SEN_UP_L.mode(PullUp);
+    SEN_UP_R.mode(PullUp);
+    SEN_DOWN.mode(PullUp);
+    SEN_IR.mode(PullUp);
+//Init interupt Timer
+    ticker.attach(periodicCallback, 0.00015);
+    wait(0.5);
+    while (true) {
+        //rotator_right(20);
+        uint8_t sen_in = sensor_ir();
+        if( (sen_in > 0) && (sen_in < 50) )
+        {
+            motorController.moveForward(1000);
+            while( (sensor_up_left() == OFF) && (sensor_up_right() == OFF) ){
+                motorController.moveBackward(1000);
+            }
+        } else {
+            motorController.turnRight(1000);
+        }
+    }
+}
+
+/*
+int main(void)
+{
+    wait(0.1);
+//Init Hardware
+    SEN_UP_L.mode(PullUp);
+    SEN_UP_R.mode(PullUp);
+    SEN_DOWN.mode(PullUp);
+    SEN_IR.mode(PullUp);
+
+//Init interupt Timer
+    ticker.attach(periodicCallback, 0.00015);
+    wait(0.5);
+    while (true) {
+        //rotator_right(20);
+        uint8_t sen_in = sensor_ir();
+        if( (sen_in > 0) && (sen_in < 50) )
+        {
+            move_up(100, 100);
+            while( (sensor_up_left() == OFF) && (sensor_up_right() == OFF) ){
+                move_down(40,40);
+            }
+        } else {
+            rotator_right(100);
+        }
+    }
+}
+*/
+
+
+
+