Android 修复通过HC-06向arduino发送命令的延迟

Android 修复通过HC-06向arduino发送命令的延迟,android,bluetooth,arduino,arduino-uno,Android,Bluetooth,Arduino,Arduino Uno,我和我的朋友正在arduino上做一个小项目。我们正在尝试使用Arduino和蓝牙模块制造一款遥控汽车。除了一个,一切都很顺利。当我们向arduino发出信号让汽车朝特定方向行驶时,它的行驶时间就晚了。大约8到10秒。有没有办法解决这个问题?我们已经用串口显示器检查了延迟。收到命令时延迟很长。代码如下所示。我们正在使用Arduino Uno,蓝牙模块是HC-06,Arduino IDE版本是1.6.7。我们正在使用android应用程序从手机发送命令 #define trigPin 7 #def

我和我的朋友正在arduino上做一个小项目。我们正在尝试使用Arduino和蓝牙模块制造一款遥控汽车。除了一个,一切都很顺利。当我们向arduino发出信号让汽车朝特定方向行驶时,它的行驶时间就晚了。大约8到10秒。有没有办法解决这个问题?我们已经用串口显示器检查了延迟。收到命令时延迟很长。代码如下所示。我们正在使用Arduino Uno,蓝牙模块是HC-06,Arduino IDE版本是1.6.7。我们正在使用android应用程序从手机发送命令

#define trigPin 7
#define echoPin 6
#define yellowLed 10
#define greenLed 9

int motor_left[] = {2, 3};
int motor_right[] = {4, 5};
int vSpeed=255;
long previousMillis = -1000*10;
char state = 'S';

void setup() {
  // put your setup code here, to run once:
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);

  pinMode(greenLed, OUTPUT);
  pinMode(yellowLed, OUTPUT);

  for(int i = 0; i < 2; i++){
    pinMode(motor_left[i], OUTPUT);
    pinMode(motor_right[i], OUTPUT);
  }
}

void loop() {
  // put your main code here, to run repeatedly:
  long duration, inches, cm;
  if(Serial.available() > 0){     
        state = Serial.read();
  }

  // The PING))) is triggered by a HIGH pulse of 2 or more microseconds.
  // Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
  digitalWrite (trigPin, LOW);
  delayMicroseconds (2);
  digitalWrite (trigPin, HIGH);
  delayMicroseconds (10);
  digitalWrite (trigPin, LOW);

  duration = pulseIn (echoPin, HIGH);

  inches = microsecondsToInches (duration);
  cm = microsecondsToCentimeters (duration);

  if (cm <= 10 || state == 'S') {
    motor_stop ();
  } else {
    motor_ready ();
  }

  delay(100);
}

void motor_stop(){
  Serial.print (state);
  Serial.println();
  digitalWrite(motor_left[0], LOW); 
  digitalWrite(motor_left[1], LOW); 

  digitalWrite(motor_right[0], LOW);
  digitalWrite(motor_right[1], LOW);

  digitalWrite (yellowLed, HIGH);
  digitalWrite (greenLed, LOW);
  delay(25);
}

void motor_ready () {
    Serial.print (state);
    Serial.println();

    if (state == '0') {
        vSpeed = 0;
    } else if (state == '1') {
        vSpeed = 75;
    } else if (state == '2') {
        vSpeed = 150;
    } else if (state == '3') {
        vSpeed = 200;
    } else if (state == '4') {
        vSpeed = 255;
    }

    if (state == 'F') {
        driveForward (); 
    } else if (state == 'G') {
        driveForwardLeft (); 
    } else if (state == 'I') {
        driveForwardRight (); 
    } else if (state == 'B') {
        driveBackward (); 
    } else if (state == 'H') {
        driveBackwardLeft (); 
    } else if (state == 'J') {
        driveBackwardRight (); 
    }

    digitalWrite (yellowLed, LOW);
    digitalWrite (greenLed, HIGH);
}

void driveForward () {
    analogWrite(motor_left [0], vSpeed); analogWrite(motor_left [1], 0);
    analogWrite(motor_right [0], vSpeed);      analogWrite(motor_right [1], 0);
}

void driveForwardLeft () {
    analogWrite(motor_left [0], 0); analogWrite(motor_left [1], 0);
    analogWrite(motor_right [0], vSpeed);      analogWrite(motor_right [1], 0);
}

void driveForwardRight () {
    analogWrite(motor_left [0], vSpeed); analogWrite(motor_left [1], 0);
    analogWrite(motor_right [0], 0);      analogWrite(motor_right [1], 0);
}

void driveBackward () {
    analogWrite(motor_left [0], 0); analogWrite(motor_left [1], vSpeed);
    analogWrite(motor_right [0], 0);      analogWrite(motor_right [1], vSpeed);
}

void driveBackwardLeft () {
    analogWrite(motor_left [0], 0); analogWrite(motor_left [1], 0);
    analogWrite(motor_right [0], 0);      analogWrite(motor_right [1], vSpeed);
}

void driveBackwardRight () {
    analogWrite(motor_left [0], 0); analogWrite(motor_left [1], vSpeed);
    analogWrite(motor_right [0], 0);      analogWrite(motor_right [1], 0);
}

long microsecondsToInches(long microseconds) {
  return microseconds / 74 / 2;
}

long microsecondsToCentimeters(long microseconds) {
  return microseconds / 29 / 2;
}
#定义trigPin 7
#定义echoPin 6
#定义黄色10
#定义绿色9
int motor_left[]={2,3};
int motor_right[]={4,5};
int-vSpeed=255;
long-previousMillis=-1000*10;
字符状态='S';
无效设置(){
//将安装代码放在此处,以便运行一次:
Serial.begin(9600);
引脚模式(trigPin,输出);
pinMode(echoPin,输入);
引脚模式(绿色LED,输出);
引脚模式(黄色LED,输出);
对于(int i=0;i<2;i++){
pinMode(电机左[i],输出);
pinMode(电机右[i],输出);
}
}
void循环(){
//将主代码放在此处,以便重复运行:
长持续时间,英寸,厘米;
如果(Serial.available()>0){
state=Serial.read();
}
//PING)由2微秒或更多微秒的高脉冲触发。
//事先发出一个短的低脉冲,以确保干净的高脉冲:
数字写入(trigPin,低电平);
延迟微秒(2);
数字写入(trigPin,高);
延迟微秒(10);
数字写入(trigPin,低电平);
持续时间=脉冲强度(echoPin,高);
英寸=微秒(持续时间);
cm=微秒秒(持续时间);

如果(cm显示您发送命令的Android代码。告诉更多关于您的命令的信息。是否每次都只有一个字节?抱歉,我没有源代码。我从应用商店下载了应用程序。换句话说,您不知道该应用程序是否正常工作。为什么不告诉应用程序的名称?抱歉,回复延迟。问题em现已修复。该应用程序是Bluetooth RC控制器。更改了流模式并获得了首选输出。感谢各位宝贵的时间。