安卓手机蓝牙手柄程序
本帖最后由 watersblue 于 2016-1-14 15:31 编辑本人新手,刚刚开始接触 arduino 准备弄个乐高小车玩玩,刚开始弄就遇到了麻烦。
昨天幸得msold5兄分享资料,才能把arduino端的接收程序弄好。
作小车的计划才能开始走第一步。
之前在论坛里找了找,找到一些手机端蓝牙控制小车的程序,
但发现都是点了向前进的按钮以后,小车会一直向前走。想停下还要
再点一下停止键。
可我想要按住向前键小车就一直向前走。松开就停下。并发送摇杆的力度来控制小车的速度,支持斜上等其它动作。
另外想要手游那种。虚拟遥杆。所以自己开发了一个。
现还有很多不完美的地方。但本人水平有限,能凑和用就凑和用吧。
发上来,兄弟们看看谁有能力改就再完善它。
安卓的手柄控制APK在附件中
以下是arduino代码。多谢msold5兄
//灯
int led13 = 13;
int led12 = 12;
// 摇杆全局变量
static int lx = 0;
static int ly=0;
static int rx=0;
static int ry=0;
static int kg13 =1;
static int kg12=0;
static int totjs =0;
void setup() {
pinMode(led13, OUTPUT);//定义灯接口为输出接口
pinMode(led12, OUTPUT);
Serial.begin(9600);
totjs =0;
}
void loop() {
while (Serial.available() <= 0){
totjs =totjs +1;
delay(1);
if( (totjs % 100) == 0 ){
doit();
}
}
String comdata = "";
while (Serial.available() > 0)
{
char temp = char(Serial.read());
if(temp == '&'){
checkstring(comdata);
comdata = "";
}else{
if(comdata!= ""){
comdata+=temp;
}else{
if(temp == '$'){
comdata+=temp;
}
}
}
delay(2);
}
}
static void checkstring (String val){
if((val.length() ==11 || val.length() ==36) && val.indexOf("$")>-1){
String fls = val.substring(2,4);
if(fls=="kg") setKg(val);
if(fls == "yg") setJoy(val);
}
}
static void setJoy(String msg){
lx = msg.substring(8,8+4).toInt();
ly = msg.substring(16,16+4).toInt();
rx = msg.substring(24,24+4).toInt();
ry = msg.substring(32,32+4).toInt();
}
static void setKg(String msg){
String kgnum = msg.substring(5,7);
if(kgnum == "13"){
if(msg.substring(8,11)=="opn") kg13=1;
if(msg.substring(8,11)=="cls") kg13=0;
}
if(kgnum == "12"){
if(msg.substring(8,11)=="opn") kg12=1;
if(msg.substring(8,11)=="cls") kg12=0;
}
if(kg13 ==1) digitalWrite(led13, HIGH);
if(kg13 ==0) digitalWrite(led13, LOW);
}
static void doit(){
// 动作
}
小車程序應該不用動,搖桿控制端分成按下跟放開兩個動作 本帖最后由 watersblue 于 2016-1-14 15:33 编辑
Be1ieve 发表于 2016-1-14 15:09 static/image/common/back.gif
小車程序應該不用動,搖桿控制端分成按下跟放開兩個動作
手指在操作杆上按下以后。可以滑动。 随着位置的改变。手机端不停的向小车发送位置信息。每秒10次。我想做的小车前轮是和真车一样的。 左满轮至右满轮1/10秒可能做不完这个动作,所以小车端应该做一个目标变量。 小车不停的把自身状态向目标变量执行。
另外如果用BUTTON,事件是松开和按下的话。无法控制车的速度。所以用虚拟摇杆的话。可以控制车速。就像PS4或XBOX的类比摇杆 我也刚接触,在学做小车。学习学习 现实世界中有惯性与阻力存在,不会瞬间达到你要的速度
简单小车的车轮马达的输出功率只要一直跟随摇杆数值就好,车速是逐步变化的
平衡小车就会有你说的目标变量,需要靠速度与加速度传感器,PID变化
类比摇杆会自动回正,因此下一个讯号很自然会输出000
虚拟摇杆需要靠感应手放开的动作模拟摇杆回弹
Be1ieve 发表于 2016-1-15 09:14 static/image/common/back.gif
现实世界中有惯性与阻力存在,不会瞬间达到你要的速度
简单小车的车轮马达的输出功率只要一直跟随摇杆数值 ...
虚拟摇杆做的没问题了。
小车,目前接收到指令,解析后赋值给变量。 这个频率是大约每秒10次。
然后LOOP中弄了个类似timer的东西。 定时执行。
这么弄主要还是考虑执行的频率。
比如前轮用舵机的话。 让舵机转 X度。 它是要时间的。。。
页:
[1]