当命令通过蓝牙时,代码未执行

时间:2019-06-29 16:03:04

标签: bluetooth arduino processing

我正在使用 HC-05 蓝牙设备和 Arduino Mega 不是焦点,但我想我会把它包括在内 )。

我想通过单击in detect arg 0: -bar.foo=baz arg 1: 中的按钮来打开和关闭LED。我的processing代码是:

processing

我的arduino代码是:

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');

   } 

  }

}

但是,LED永远不会打开。我知道它通过了蓝牙信号,因为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'; } } 灯闪烁了,这意味着它可以通过,但是该灯永不亮。

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

预先感谢,加油!

2 个答案:

答案 0 :(得分:2)

  

我知道了(5天后-没马上问问题)!

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


编辑:它实际上与代码有关,而代码中的问题使上述工作得以实现。问题是Serial.list()[0],它在列表的顶部。这实际上是Arduino USB电缆!因此,Processing正在通过电缆与Arduino通信。这就是为什么不使用RX和TX引脚的原因。我认为当RX和TX引脚插入时它不起作用的原因是,我认为Arduino的RX和TX引脚优先于USB电缆,这意味着Arduino仅 种< / em> 收听电缆,以及为什么RX指示灯闪烁。

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

因此,最后得出的结论是,最好查看设备管理器并找出模块的COM,然后使用它代替Serial.list()[0],这可能导致意外结果。所以,最后一次...干杯!


最终编辑:我的测试已经确认了我的最后声明,所以最后一次,最后一次……干杯!

答案 1 :(得分:0)

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

if (ledState == "0") {

将引号放在0处。这是一个整数。一个号码。不是字符串。

还要注意,在两种情况下都将ledState设置为0。我也觉得这是一个错误。