我是用蓝牙连接小车的时候发现这个问题的。 之前用蓝牙模块单独测试的时候还没感觉,开始大概就半秒到一秒左右
手机通过蓝牙控制小车到时候感觉就明显了。 手机端是用 python 去操作的,python 发送一个字符,arduino 收到以后返回一个字符,python 收到字符以后统计时间,大概 1s 。 不大清楚是否单向通信一次需要 0.5s 。
本来也有怀疑是 python 在手机环境跑的性能问题。 找了几个现成的可以直接走蓝牙和 arduino 通信的 android app , 包括 ArduinoBluetooth 和 Amarino 虽然没有时间统计,但是能发现是有延时,感觉上大概半秒到一秒左右。
有没有也用蓝牙的朋友,可以用程序统计下通信时间?
- //=== 控制电机相关
- // 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 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[/code] |