命令通过蓝牙时不执行代码

Code not executing when command comes over bluetooth

我正在使用 HC-05 蓝牙设备和 Arduino Mega不是重点,但是我以为我会包括它)。

我想通过单击 processing 中的按钮打开和关闭 LED。我的 processing 代码是:

import processing.serial.*;

Serial myPort;

String state = "Turn On";

void setup() {
    size(600, 600);

    myPort = new Serial(this, Serial.list()[0], 9600);
}

void draw() {
  background(255);
  fill(0, 150, 150);
  rectMode(CENTER);
  rect(width/2, height/2, 200, 75, 50);

  textSize(32);
  fill(0);
  text(state , width/2 - textWidth(state) / 2, height/2 + 16);
}

void mousePressed() {

 if (mouseX < 400 && mouseX > 200 && mouseY < 333.5 && mouseY > 266.5) {

   if (state == "Turn On") {
     state = "Turn Off";
     myPort.write('1');
   } else {
     state = "Turn On"; 
     myPort.write('0');

   } 

  }

}

我的arduino代码是:

const int ledPin = 7;
char ledState;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, LOW);
}

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

  if (ledState == '0') {
    digitalWrite(ledPin, LOW);
    ledState = '3';
  }

  if (ledState == '1') {
    digitalWrite(ledPin, HIGH);
    ledState = '3';
  }

}

然而,led 始终不亮。我知道蓝牙信号通过了,因为 Arduino 上的 RX 灯闪烁,意味着它通过了,但灯从未亮起。

代码有什么问题?我怀疑我可能在 Arduino 程序中读取了错误的数据,除了几天前这种方法有效...

提前致谢,干杯!

您的 arduino 代码中有一个包含 0 或 1 的标志,您将其与字符“0”(相当于 48)进行比较。

if (ledState == "0") {

去掉 0 上的引号。这是一个整数。一个号码。不是字符串。

另请注意,在这两种情况下,您都将 ledState 设置为 0。我也有一种错误的感觉。

I figured it out (after 5 days - didn't ask question right away)!

如果Arduino连接到电脑,不要进行任何连接,因为数据已经通过电缆传输到Arduino,取代了RX和TX引脚,否则RX和TX引脚会产生负面影响你的结果。但是,如果您从外部供电,请连接 RX 和 TX 引脚(因为没有电缆)。该模块似乎有点挑剔,我可能有问题,但经过这么多天的调试,我怀疑它。我希望这有帮助!干杯!


编辑:它实际上与代码有关,代码中的问题使上述工作。问题是Serial.list()[0],这会找到列表顶部的东西。这实际上是 Arduino USB 电缆!因此,Processing 正在通过电缆与 Arduino 通信。所以这就是为什么它可以取出 RX 和 TX 引脚,它们没有被使用。我认为当 RX 和 TX 引脚插入时它不起作用的原因是我认为 Arduino 的 RX 和 TX 引脚优先于 USB 电缆,这意味着 Arduino 只有 有点听电缆,因此RX指示灯闪烁的原因。

所以继续前进,当我从计算机上拔下它时它起作用了,因为 Arduino COM 消失了,这意味着顶部的 COM 是蓝牙本身。所以它实际上与蓝牙模块通信,蓝牙模块将信息沿其 TX 引脚发送到 Arduino 的 RX 引脚,然后 Arduino 执行命令。

所以,总而言之,最好查看设备管理器并找出模块的 COM 并使用它而不是 Serial.list()[0],这可能会导致意外结果。所以,最后一次......干杯!


最终编辑:我最后的陈述已经通过我的测试得到证实,所以最后一次……干杯!