我正在使用 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程序中读取了错误的数据,除了这种方法几天前就起作用了...
预先感谢,加油!
答案 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。我也觉得这是一个错误。