battle bot

Dependencies:   BLE_API mbed nRF51822

main.cpp

Committer:
tridung141196
Date:
2017-08-19
Revision:
0:40ade1a5d2b4

File content as of revision 0:40ade1a5d2b4:

 /* mbed Microcontroller Library
 * Copyright (c) 2006-2013 ARM Limited
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include "mbed.h"
#include "ble/BLE.h"
#include "ble/services/UARTService.h"

DigitalOut  led1(p7);
DigitalOut  motorleft_A(p28); //Motor left
PwmOut  motorleft_B(p25); //
PwmOut  motorright_A(p24); //Motor right
DigitalOut  motorright_B(p23); //
DigitalOut  Relay_3A(p22); //Motor skill Q (may bao)
DigitalOut  Relay_3B(p21); //
DigitalOut  kichdien(p9);  //relay ac inverter 12DC -220AC
DigitalOut  kichdienB(p16); //
//DigitalOut  kichdien(p17);  //
//DigitalOut  Relay_2(p18);  //
//DigitalOut  Relay_3(p19);  //
//DigitalOut  Relay_4(p20);  //

Serial      pc(p10, p11);
BLEDevice   ble;
UARTService *uartServicePtr;

//// Other
#define     ON          0
#define     OFF         1
uint8_t g_cmd;
uint8_t chieu_maybao=0; //xac dinh chieu may bao
uint8_t status_maybao=1;
uint8_t reversion=0;  //state of robot( reverse or not reverse)
////////////////////////////////////////////////////////////////////
void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
{
    ble.startAdvertising();  //gửi gói tin quảng bá
    pc.printf("\n\r# disconnected\n\r");
    led1 = 0;  //led off when disconnected
    ////xoay tron va bat vu khi khi mat ket noi
//    motorleft_A = 1;  //Motor left go up
//    motorleft_B = 0;  //
//    motorright_A = 0;  //Motor right go down
//    motorright_B = 1;  //
//    Relay_3A = 0;
//    Relay_3B = 1;
    
}

void connectionCallback( const Gap::ConnectionCallbackParams_t *params ) {
    pc.printf("\n\r# connected\n\r");
    led1 = 1;  //led on when connected
}
void onDataWritten(const GattWriteCallbackParams *params)
{
    if ((uartServicePtr != NULL) && (params->handle == uartServicePtr->getTXCharacteristicHandle())) {
        uint16_t bytesRead = params->len;
        g_cmd = params->data[0];
        ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(), params->data, bytesRead);  //update status to server
    }
}

/////////////////////////////////////////////////////////////////////
void periodicCallback(void)
{
   // led1 = !led1;
}
//////////////////////////////////////////////////////////////////////
void up(void)       //su dung motor 1 & 2
{
    motorleft_A = 0; //motor left go down
    motorleft_B.write (0.7); //
    motorright_A.write(0); //motor right do down
    motorright_B = 1; //
    pc.printf("\n\r# go up\n\r");
}
void down(void)     //su dung motor 1 & 2
{
    motorleft_A = 1; //motor left go up
    motorleft_B.write(0.3); //
    motorright_A.write(1); //motor right go up
    motorright_B = 0; //
    pc.printf("\n\r# go down\n\r");
}
void left(void)     //su dung motor 1 & 2
{
    motorleft_A = 1;  //Motor left go down
    motorleft_B = 0;  //
    motorright_A = 0;  //Motor right go up
    motorright_B = 1;  //
    pc.printf("\n\r# turn left\n\r");
}
void right(void)    //su dung motor 1 & 2
{
    motorleft_A = 0;  //Motor left go up
    motorleft_B = 1;  //
    motorright_A = 1;  //Motor right go down
    motorright_B = 0;  //
    pc.printf("\n\r# turn right\n\r");
}
void stop(void)    //su dung motor 1 & 2
{
    motorleft_A = 1;
    motorleft_B = 1;
    motorright_A = 1;
    motorright_B = 1;
    pc.printf("\n\r# stop\n\r");
}
/////////////////////////////////////////
void skillQ(void)  //turn round down
{
    status_maybao = !status_maybao;  //dao trang thai may bao
    if(status_maybao == 0)    //may bao on
    {
         if(chieu_maybao == 1)
         {
            Relay_3A = 0;  //turn round down maybao
            Relay_3B = 1;
            pc.printf("\n\r# turn round down maybao\n\r");
         }  
         else if(chieu_maybao == 0)
         {
            Relay_3A = 1;  //turn round down maybao
            Relay_3B = 0;
            pc.printf("\n\r# turn round up maybao\n\r");
         }
    }
    else if(status_maybao == 1)  //may bao off
    {
        Relay_3A = 1;  //turn round down maybao
        Relay_3B = 1;
        pc.printf("\n\r# turn off maybao\n\r");
    }
}
void skillE(void)   //quay tron+turn on may bao
{
    motorleft_A = 1;  //Motor left go up
    motorleft_B = 0;  //
    motorright_A = 0;  //Motor right go down
    motorright_B = 1;  //
    Relay_3A = 0;  //turn round down maybao
    Relay_3B = 1;  
    pc.printf("\n\r# turn on skill E\n\r");
}
void offskillE(void)
{
    motorleft_A = 1;  //Motor left go up
    motorleft_B = 1;  //
    motorright_A = 1;  //Motor right go down
    motorright_B = 1;  //
    Relay_3A = 1;  //turn round down maybao
    Relay_3B = 1;  
    pc.printf("\n\r turn off skill E\n\r");
}
void skillR(void)
{
   pc.printf("\n\r#turn on skill R\n\r"); 
   motorleft_A = 0;
    motorleft_B = 1;
    motorright_A = 1;
    motorright_B = 0;
    wait(0.9);
    motorleft_A = 1;
    motorleft_B = 0;
    motorright_A = 1;
    motorright_B = 0;
    wait(1.2);
    motorleft_A = 1;
    motorleft_B = 1;
    motorright_A = 1;
    motorright_B = 1;
    wait(0.1);
    motorleft_A = 0;
    motorleft_B = 1;
    motorright_A = 0;
    motorright_B = 1;
}
void offskillR(void)
{
    pc.printf("\n\r#turn off skill R\n\r");
    
}

//////////////////////////////////////////////////////////////////////
int main(void)
{
    //Init hardware
    led1 = 0;
    motorleft_A = 1;
    motorleft_B.period(0.01);
    motorright_A.period(0.01);
    motorleft_B.write(1);
    motorright_A.write(1);
    motorright_B = 1;
    Relay_3A = 1;
    Relay_3B = 1;
    kichdien = 1;
    kichdienB = 1;
    //Init UART
    pc.baud(115200);
    pc.printf("\n\r# BOT_BATTLE\n\r");
    //Init timer
    Ticker ticker;
    ticker.attach(periodicCallback, 0.1); //sec
    //Init BLE
    ble.init();  //start ble driver
    ble.onConnection(connectionCallback);   //callback when connected
    ble.onDisconnection(disconnectionCallback);   //callback when disconnected
    ble.onDataWritten(onDataWritten);   //callback when receive data
    /* setup advertising */
    ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);     //chế độ hoạt động BLE (only le peripheral)
    ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);      // có khả năng kêt nối vô hướng
    ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME,                      //tên thiết bị ble peripheral 
                                     (const uint8_t *)"GAREN", sizeof("TAO LA DUNG") - 1);      //
    ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS,
                                     (const uint8_t *)UARTServiceUUID_reversed, sizeof(UARTServiceUUID_reversed)); //UUID service
    ble.setAdvertisingInterval(200); /* 1000ms; in multiples of 0.625ms. */
    ble.startAdvertising();
    UARTService uartService(ble);
    uartServicePtr = &uartService;

while (true) {
        ble.waitForEvent();
////////////////motion////////////////////////
        if     (g_cmd == 1) {
            if(reversion == 0)  //if bot isn't reversed
                up();           
            else down();      }  //go down when bot is reversed
        else if(g_cmd == 2) {
            if(reversion == 0)
                left();
            else right();    }
        else if(g_cmd == 3) {
            if(reversion == 0)
                down();
            else up();    }
        else if(g_cmd == 4) {
            if(reversion == 0)
                right();
            else left();   }
        else if(g_cmd == 5) {stop();    }
        
/////////////////SKILL Q///////////////////


        else if(g_cmd == 6) {chieu_maybao = !chieu_maybao;  }  //thiet lap chieu may bao
        else if(g_cmd == 7) {skillQ(); }  // on/off skill Q
        
////////////////SKILL W///////////////////
        else if(g_cmd == 9) {kichdien = !kichdien;
        if(kichdien == 0 ) pc.printf("\n\r# turn on kich dien\n\r");
        else pc.printf("\n\r# turn off kich dien\n\r");
         }  //on skill W    
//        else if(g_cmd ==11) {kichdien = 1; pc.printf("\n\r# turn off kich dien \n\r");}  //off skill W
        
////////////////SKILL E///////////////////

        else if(g_cmd == 12) {skillE();    }  //on skill E
       // else if(g_cmd == 13) {offskillE(); }  //off skill E
        
/////////////////SKILL R///////////////////
        else if(g_cmd == 16) {skillR();    }  //on skill R
 //       else if(g_cmd == 17) {offskillR(); }
 ///////////Check! are bot reversed? //////////////////////
        else if(g_cmd == 18) {reversion = !reversion; }  

        g_cmd = 0;
}
}