hick 发表于 2013-9-12 17:48:00

有没有用蓝牙模块的,发现有一定延时,不知道是否正常

我是用蓝牙连接小车的时候发现这个问题的。 之前用蓝牙模块单独测试的时候还没感觉,开始大概就半秒到一秒左右

手机通过蓝牙控制小车到时候感觉就明显了。 手机端是用 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 = "";
      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);
    }






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, cost))
                break

    count = count - 1

greeham 发表于 2013-9-13 22:02:26

我用的,没有延时
页: [1]
查看完整版本: 有没有用蓝牙模块的,发现有一定延时,不知道是否正常