【问题标题】:Code not executing when command comes over bluetooth当命令通过蓝牙时代码未执行
【发布时间】:2019-06-29 16:03:04
【问题描述】:

我正在使用 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 程序中读取了错误的数据,除了这个方法在几天前有效......

提前致谢,干杯!

【问题讨论】:

    标签: bluetooth arduino processing


    【解决方案1】:

    我想通了(5 天后 - 没有立即提问)!

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


    EDIT:其实和代码有关系,代码中的问题使得上面的工作。问题是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],这可能会导致意外结果。所以,最后一次……干杯!


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

    【讨论】:

      【解决方案2】:

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

      if (ledState == "0") {
      

      那里的 0 上的引号丢失。这是一个整数。一个号码。不是字符串。

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

      【讨论】:

      • 不,这不是错误导致代码没有再次执行。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-12
      • 1970-01-01
      • 1970-01-01
      • 2014-07-12
      • 2016-05-08
      相关资源
      最近更新 更多