work fine.

Dependencies:   mbed

main.cpp

Committer:
lixianyu
Date:
2016-06-02
Revision:
0:362c1482232c

File content as of revision 0:362c1482232c:

#include "mbed.h"
//#include "rtos.h"
#include "MicroduinoPinNames.h"
#include "userDef.h"
#include "Protocol.h"
#include "Microduino_Motor.h"

Timer g_cubeTimer;
Timeout g_cubeTimeout;
#if 1
Motor MotorLeft(motor_pin0A, motor_pin0B);
Motor MotorRight(motor_pin1A, motor_pin1B);
///////////////////////////////////////////////////////////
#define CHANNEL_NUM 8
uint16_t channalData[CHANNEL_NUM]; //8通道数据
bool mode = 0; //nrf或者ble模式
int16_t throttle = 0; //油门
int16_t steering = 0; //转向
int safe_ms = 0;
DigitalOut myled(D13);
InterruptIn wkp(D0);
InterruptIn wkp1(D1);
static long map(long x, long in_min, long in_max, long out_min, long out_max)
{
    return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

static void wake_up(void)
{
    //myled = 0;
}

int main()
{
#if 1// To test wake up from deepsleep(), failed....but wake up from sleep() work. sleep() will reduce 2mA.
    wkp.fall(wake_up);
    wkp.rise(&wake_up);
    wkp1.fall(&wake_up);
    wkp1.rise(&wake_up);
#endif
    //myled = 1;
    g_cubeTimer.start();

    mode = protocolSetup();  //遥控接收器初始化

    MotorLeft.Fix(motor_fixL);
    MotorRight.Fix(motor_fixR);
    //mypc.baud(115200);
    while (1) {
        if (protocolRead(channalData, mode)) { //判断是否接收到遥控信号
            throttle = map(channalData[CHANNEL_THROTTLE], 1000, 2000, -MAX_THROTTLE, MAX_THROTTLE);
            steering = map(channalData[CHANNEL_STEERING], 1000, 2000, -MAX_STEERING, MAX_STEERING);

            MotorLeft.Driver(MotorLeft.GetData(throttle, steering, CHAN_LEFT));
            MotorRight.Driver(MotorRight.GetData(throttle, steering, CHAN_RIGHT));

#ifdef _DEBUG
            Serial.print("DATA OK :[");
            for (int a = 0; a < CHANNEL_NUM; a++) {
                Serial.print(channalData[a]);
                Serial.print(" ");
            }
            Serial.print("],throttle:");
            Serial.print(throttle);
            Serial.print(",steering:");
            Serial.println(steering);
#endif
            safe_ms = g_cubeTimer.read_ms();
        }

        if (safe_ms > g_cubeTimer.read_ms()) {
            safe_ms = g_cubeTimer.read_ms();
        }
        if (g_cubeTimer.read_ms() - safe_ms > SAFE_TIME_OUT) {
            MotorLeft.Free();
            MotorRight.Free();
            sleep();//待机待机电流可减少4mA左右
            //deepsleep();
        }
    } // while
}
#else
DigitalOut myled(D13);
PwmOut PWM_A(motor_pin0A);
PwmOut PWM_B(motor_pin0B);
int pv = 0;
int main()
{
    myled.write(1);
    PWM_A.period_us(255);
    PWM_B.period_us(255);

    PWM_A.pulsewidth_us(200);
    PWM_B.pulsewidth_us(0);
    while (1) {
#if 0
        PWM_B.pulsewidth_us(pv);
        pv++;
#endif
        wait(0.5);
        myled = !myled;
        if (pv >= 255) {
            pv = 0;
        }
    }
}
#endif