TA的每日心情 | 衰 2013-12-4 00:00 |
---|
签到天数: 47 天 连续签到: 1 天 [LV.5]常住居民I
|
我是用蓝牙连接小车的时候发现这个问题的。 之前用蓝牙模块单独测试的时候还没感觉,手机通过蓝牙控制小车到时候感觉就明显了。 手机端是用 python 去操作的,python 发送一个字符,arduino 收到以后返回一个字符,python 收到字符以后统计时间,大概 1s 。 不大清楚是否单向通信一次需要 0.5s 。
本来也有怀疑是 python 在手机环境跑的性能问题。 找了几个现成的可以直接走蓝牙和 arduino 通信的 android app , 包括 ArduinoBluetooth 和 Amarino 虽然没有时间统计,但是能发现是有延时,感觉上大概半秒到一秒左右。
有没有也用蓝牙的朋友,可以用程序统计下通信时间?
[pre lang="arduino" line="1"]
//=== 控制电机相关
// left whell
int pinIN1=8; // IN1
int pinIN2=9; // IN2
int pinENA=11; // ENA(PWM调速)接口
int speedENA = 254; // 可以调速
// right whell
int pinIN3=6; // IN3
int pinIN4=7; // IN4
int pinENB=10; // ENB(PWM调速)接口
int speedENB = 254; // 可以调速
void setup()
{
Serial.begin(9600);
Serial.println("setup");
// left wheel
pinMode(pinIN1,OUTPUT);
pinMode(pinIN2,OUTPUT);
pinMode(pinENA,OUTPUT);
// right wheel
pinMode(pinIN3,OUTPUT);
pinMode(pinIN4,OUTPUT);
pinMode(pinENB,OUTPUT);
}
void loop()
{
if(Serial.available() )
{
char line[500] = "";
Serial.readBytesUntil('\0', line, 500);
Serial.print("arduino:");
if(0 == strcmp("go", line) || 0 == strcmp("g", line) )
{
go();
}
else if(0 == strcmp("back", line) || 0 == strcmp("b", line))
{
back();
}
else if(0 == strcmp("left", line) || 0 == strcmp("l", line))
{
left();
}
else if(0 == strcmp("right", line) || 0 == strcmp("r", line))
{
right();
}
else if(0 == strcmp("stop", line) || 0 == strcmp("s", line))
{
stop();
}
else
{
Serial.println(line);
}
}
}
// 前进
void go() {
Serial.println("----go");
// left wheel
// analogWrite(pinENA,speedENA); // 速度设定
// digitalWrite(pinIN1,LOW); // 下面俩个 使直流电机针转
// digitalWrite(pinIN2,HIGH);
//
// // right wheel
// analogWrite(pinENB,speedENB); // 速度设定
// digitalWrite(pinIN3,HIGH); // 转动: 注意按照我之前的接线,这里要跟前面的轮子的设定相反,方向才相同
// digitalWrite(pinIN4,LOW);
}
// 后退
void back() {
Serial.println("----back");
// left wheel
// analogWrite(pinENA,speedENA); // 速度设定
// digitalWrite(pinIN1,HIGH); // 下面俩个 使直流电机针转
// digitalWrite(pinIN2, LOW);
//
// // right wheel
// analogWrite(pinENB,speedENB); // 速度设定
// digitalWrite(pinIN3,LOW); // 转动: 注意按照我之前的接线,这里要跟前面的轮子的设定相反,方向才相同
// digitalWrite(pinIN4,HIGH);
}
// 停止
void stop() {
Serial.println("----stop");
// digitalWrite(pinIN1,HIGH); // 下面俩个 使直流电机针转
// digitalWrite(pinIN2, HIGH);
//
// // right wheel
// digitalWrite(pinIN3,HIGH); // 转动: 注意按照我之前的接线,这里要跟前面的轮子的设定相反,方向才相同
// digitalWrite(pinIN4,HIGH);
}
// 左转
void left() {
Serial.println("----left");
// left wheel
// analogWrite(pinENA,speedENA); // 速度设定
// digitalWrite(pinIN1,LOW); // 下面俩个 使直流电机针转
// digitalWrite(pinIN2,HIGH);
//
// // right wheel
// digitalWrite(pinIN3,HIGH); // 转动: 注意按照我之前的接线,这里要跟前面的轮子的设定相反,方向才相同
// digitalWrite(pinIN4,HIGH);
}
// 右转
void right() {
Serial.println("----right");
// left wheel
// digitalWrite(pinIN1,HIGH); // 下面俩个 使直流电机针转
// digitalWrite(pinIN2,HIGH);
//
// // right wheel
// analogWrite(pinENB,speedENB); // 速度设定
// digitalWrite(pinIN3,HIGH); // 转动: 注意按照我之前的接线,这里要跟前面的轮子的设定相反,方向才相同
// digitalWrite(pinIN4,LOW);
}
[/pre]
[pre lang="python" line="1"]import android
import sys
import time
droid=android.Android()
droid.bluetoothConnect('00001101-0000-1000-8000-00805F9B34FB')
# define the cmd list
cmd_listk = ["g", "b", "l", "r", "s", "x"]
cmd_listv = ["Go", "Back", "Left", "Right", "Stop", "Exit App"]
count = 4
while count > 0:
for i in cmd_listk:
time.sleep(1)
start = time.time()
droid.bluetoothWrite(i)
print " %s start %s" % (i, start)
while True:
strArduino = droid.bluetoothReadLine()
if len(strArduino) > 0:
cost = time.time() - start
print("android: %s, cost %s" % (strArduino[1], cost))
break
count = count - 1[/pre]
|
|