本周我们来制作一个蓝牙遥控小车,不得不说Bluno nano的蓝牙交互功能还是让人眼前一亮,毕竟是首款集成蓝牙4.0的arduino板。制作小车较为集成的方案是DF的Remeo BLE mini,虽然我没有,但可以用Bluno nano搭配电机驱动模块达到相同的效果。
为此,我们需要一个小车底盘,一块Bluno nano,一块电池和一个L9110电机驱动模块(操作方式跟Remeo BLE mini相似)。
首先上图:

(小车正面)

(背面)

(侧面)
因为时间仓促,就较为简易的做了一个架子,大家见谅。 接线方面,参考Remeo BLE mini的风火轮机器人代码(来源于DF社区) 分析代码,可以看出接线:


L9110 Bluno
A-1B----------D5
A-1A----------D3
B-1B----------D6
B-1A----------D9
完成接线后,我们便可以直接使用风火轮机器人的代码而不用修改,并且可以使用其中的库,非常方便。
之后*载下**代码:
-
//------2016.6.29 by LL
-
//------适用于Romeo BLE mini 控制器
-
//http://www.dfrobot.com.cn/goods-1182.html
-
#include "GoBLE.h"
-
#include <Romeo_m.h>
-
#define LED 13
-
int joystickX, joystickY;
-
int buttonState[7];
-
unsigned int led_count;
-
void setup() {
-
Romeo_m.Initialise();
-
Goble.begin();
-
pinMode(LED,OUTPUT);
-
}
-
void loop() {
-
if (Goble.available())
-
{
-
readGoBle();
-
motorContrl();
-
}
-
delayLedBlink();//delay 10ms and led blink
-
}
-
//读取GoBle所有按键摇杆值
-
void readGoBle()
-
{
-
// read joystick value when there’s valid command from bluetooth
-
joystickX = Goble.readJoystickX();
-
joystickY = Goble.readJoystickY();
-
// read button state when there’s valid command from bluetooth
-
buttonState[SWITCH_UP] = Goble.readSwitchUp();
-
buttonState[SWITCH_DOWN] = Goble.readSwitchDown();
-
buttonState[SWITCH_LEFT] = Goble.readSwitchLeft();
-
buttonState[SWITCH_RIGHT] = Goble.readSwitchRight();
-
buttonState[SWITCH_SELECT] = Goble.readSwitchSelect();
-
buttonState[SWITCH_START] = Goble.readSwitchStart();
-
}
-
//根据GoBle按键值进行小车运动控制
-
//摇杆左右为转大弯,按键左右为原地转弯
-
void motorContrl()
-
{
-
if ((buttonState[SWITCH_UP] == PRESSED)||((joystickX>128)&&(joystickY>=64)&&(joystickY<=192)))
-
{
-
Romeo_m.motorControl(Reverse,200,Forward,200);//前进
-
return;//结束子函数
-
}
-
if ((buttonState[SWITCH_DOWN] == PRESSED)||((joystickX<128)&&(joystickY>=64)&&(joystickY<=192)))
-
{
-
Romeo_m.motorControl(Forward,150,Reverse,150);//后退
-
return;//结束子函数
-
}
-
if(buttonState[SWITCH_LEFT] == PRESSED)
-
{
-
Romeo_m.motorControl(Forward,100,Forward,100);//左转
-
return;//结束子函数
-
}
-
if((joystickY<128 )&&(joystickX>=64 )&&( joystickX<=192) )
-
{
-
Romeo_m.motorControl_M1(Reverse,80);//左转大弯
-
Romeo_m.motorControl_M2(Forward,200);
-
return;//结束子函数
-
}
-
if( buttonState[SWITCH_RIGHT] == PRESSED)
-
{
-
Romeo_m.motorControl(Reverse,100,Reverse,100);//右转
-
return;//结束子函数
-
}
-
if((joystickY>128)&&(joystickX>=64)&&(joystickX<=192))
-
{
-
Romeo_m.motorControl_M2(Forward,80); //右转大弯
-
Romeo_m.motorControl_M1(Reverse,200);
-
return;//结束子函数
-
}
-
Romeo_m.motorStop();//没有按键按下则停止
-
}
-
//led blink函数,每次执行延时10ms,100次时执行一次电平反向
-
void delayLedBlink()
-
{
-
delay(10);
-
led_count++;
-
if(led_count>100)
-
{
-
digitalWrite(LED,!digitalRead(LED));
-
led_count=0;
-
}
-
}
*载下**到Bluno nano后,打开相应手机APP“走你”,便可完成对小车的控制(安卓版安装可参考走你),视屏就不上传了,想要的可以私聊我!