HilbertZ 发表于 2012-9-8 15:28:38

【Android开源】发上我的Boxz Android Client求测试,不会Android的就拿去用吧

本帖最后由 幻生幻灭 于 2012-9-13 23:24 编辑

新手发帖请多指教。
以前不会写Android程序,直到我找到了这个:Amarino
http://www.amarino-toolkit.net/index.php/amarino-api.html
就用这个库写成了Android客户端,使用蓝牙通讯。当然这是写给和我一样不会写Android的人用的,高手就不用看了。
该客户端可以发送 上下左右方向指令、控制速度指令、两个动作指令,界面是6个按钮一个滑动条。
文件在这里:(一个Android源码,一个Android安装程序,还有一个Arduino端程序示范)
http://code.google.com/p/arduino-android-boxz/downloads/list
使用起来很简单,下载Android 的apk文件安装,打开后输入你的Arduino蓝牙模块的mac地址,确认,就开始控制了。
Arduino端的程序程序可以参考这个:(你只要把你的控制速度,转向,动作的命令在对应的地方加进去就行了)

/*
MarioBox (works with Amarino and the MarioBox app)

- based on the Amarino Multicolor Lamp tutorial
- receives events from Android.

author: Bert Zhang - August 2012
*/

#include <MeetAndroid.h>

// declare MeetAndroid so that you can call functions with it
MeetAndroid meetAndroid;

// set the speed of the motor
int speed = 0;
int action;

// currentstate reflects the current direction of the box
int currentstate = 1;
const int forwardstate = 1;
const int leftstate = 2;
const int rightstate = 3;
const int backstate = 9;

void setup()
{
// my bluetooth module is configured to this baud
Serial.begin(9600);

// register callback functions, which will be called when an associated event occurs.
meetAndroid.registerFunction(changespeed, 'p');
meetAndroid.registerFunction(goforward, 'w');
meetAndroid.registerFunction(turnleft, 'a');
meetAndroid.registerFunction(turnright, 'd');
meetAndroid.registerFunction(goback, 's');
meetAndroid.registerFunction(actionA, 'A');
meetAndroid.registerFunction(actionB, 'B');

// set led 13 as an indicator light
pinMode(13,OUTPUT);
}

void loop()
{
// you need to keep this in your loop() to receive events
meetAndroid.receive();
}

/*
* Whenever the MarioBox app changes the speed
* this function will be called
*/
void changespeed(byte flag, byte numOfValues)
{
//get speed value from Anriod
speed = meetAndroid.getInt();
//indicate
flash();
}

/*
* Whenever the MarioBox app changes the direction
* these functions will be called
*/
void goforward(byte flag, byte numOfValues)
{
action = meetAndroid.getInt();
switch(action){
    case 1:
    /*
         向前走的命令
    */
       break;
    case 0:
    /*
      停止命令
    */
       break;
    default:break;
}
currentstate = forwardstate;
//indicate
flash();
}

void turnleft(byte flag, byte numOfValues)
{
action = meetAndroid.getInt();
switch(action){
    case 1:
    /*
         向左拐的命令
    */
       break;
    case 0:
    /*
      停止命令
    */
       break;
    default:break;
}
//update state
currentstate = leftstate;
//indicate
flash();
}

void turnright(byte flag, byte numOfValues)
{
action = meetAndroid.getInt();
switch(action){
    case 1:
    /*
         向右转的命令
    */
       break;
    case 0:
    /*
      停止命令
    */
       break;
    default:break;
}
//update state
currentstate = rightstate;
//indicate
flash();
}

void goback(byte flag, byte numOfValues)
{
action = meetAndroid.getInt();
switch(action){
    case 1:
    /*
         向后退的命令
    */
       break;
    case 0:
    /*
      停止命令
    */
       break;
    default:break;
}
//update state
currentstate = backstate;
//indicate
flash();
}

void actionA(byte flag, byte numOfValues)
{
/*
动作1命令
*/
flash();
}

void actionB(byte flag, byte numOfValues)
{
/*
动作2命令
*/
flash();
}



//LED onboard flashes indicates event received
void flash()
{
digitalWrite(13,HIGH);
delay(100);
digitalWrite(13,LOW);
delay(100);
}

HilbertZ 发表于 2012-9-8 15:36:27

本帖最后由 幻生幻灭 于 2012-9-13 23:27 编辑

代码已经合并到楼上

预留更新

我做了简单的测试{:soso_e113:}
http://www.geek-workshop.com/forum.php?mod=redirect&goto=findpost&ptid=1845&pid=13197

HilbertZ 发表于 2012-9-8 15:39:46

后天开学正式上课了,没有时间完成我的Boxz了,大家有需要的拿去测试一下这个能不能用:D:D

幻生幻灭 发表于 2012-9-8 16:33:13

本帖最后由 幻生幻灭 于 2012-9-13 23:37 编辑

补充上传了MeetAndroid_4 Arduino库文件和修改后的Arduino程序

1. 蓝牙连接成功(印象里,用Amarino好像需要改波特率?难道默认的9600也可以了?)
2. 需要输入蓝牙ID比较郁闷。。不是自动搜索
3. 不知道你那个android上的Bar值范围是不是0-255? 电机速度范围是0-255,但是有效范围是150-255
4. 方向按键操作无响应,手臂一直在动作(动作A或者B执行),可能是我的Arduino代码没改好,呵呵


有机会的话,你可以用Arduino直接驱动几个LED来测试下效果。

水平有限,小做测试!
加油{:soso_e179:}

erjiang 发表于 2012-9-9 07:33:30

很好的分享,不错!

大连好人 发表于 2012-9-9 10:59:04

Amarino 是个好东西,楼主加油!

幻生幻灭 发表于 2012-9-13 23:38:04

Amarino 很强大。。。一直没学会哈{:soso_e134:}

HilbertZ 发表于 2012-9-18 16:59:49

幻生幻灭 发表于 2012-9-8 16:33 static/image/common/back.gif
补充上传了MeetAndroid_4 Arduino库文件和修改后的Arduino程序

1. 蓝牙连接成功(印象里,用Amarino好像 ...

对,我去改进改进……Bar值原来是0-255的,方向键是按住不放有效的。

幻生幻灭 发表于 2012-9-18 19:40:19

HilbertZ 发表于 2012-9-18 16:59 static/image/common/back.gif
对,我去改进改进……Bar值原来是0-255的,方向键是按住不放有效的。

额..好像我是点击的,呵呵

chengongp 发表于 2013-2-13 11:32:20

幻生幻灭 发表于 2012-9-18 19:40 static/image/common/back.gif
额..好像我是点击的,呵呵

您好 请问 Arduino蓝牙模块的mac地址?

幻生幻灭 发表于 2013-2-15 22:12:03

chengongp 发表于 2013-2-13 11:32 static/image/common/back.gif
您好 请问 Arduino蓝牙模块的mac地址?

自己搜一个 蓝牙显示MAC地址的软件吧
页: [1]
查看完整版本: 【Android开源】发上我的Boxz Android Client求测试,不会Android的就拿去用吧