
[英]Sending data from Android to Arduino with HC-06 Bluetooth module
[英]Arduino : HC-06 Module receiving wrong data?
我正在使用 HC-06 蓝牙模块来控制我的 Arduino Uno,我想实现一个可以打开和关闭 LED 的简单程序。
代码 -
char val;
void setup()
{
pinMode(13, OUTPUT);
Serial.begin(9600);
Serial.println("Ready");
}
void loop()
{
if(Serial.available()){
val = Serial.read();
Serial.println(val);
// digitalWrite(13,HIGH);
}
if (val=='1'){
digitalWrite(13,HIGH);
}
else if(val=='2'){
digitalWrite(13,LOW);
}
delay(100);
}
我使用不同的应用程序从我的手机向模块发送数据,但是当我发送 1 和 2 时,它们在串行监视器中显示为“ÿ”并且 LED 没有亮起可能是因为数据与 1 或 2 不匹配,我已尝试按照许多论坛和答案的建议更改波特率,但仍然没有运气。
尝试在读取数据后设置延迟,以便给 arduino 时间来处理信息(可能只有 10 毫秒):
void setup()
{
pinMode(13, OUTPUT);
Serial.begin(9600);
Serial.println("Ready");
}
void loop()
{
if(Serial.available()){
val = Serial.read();
Serial.println(val);
delay(10);
// digitalWrite(13,HIGH);
}
if (val=='1'){
digitalWrite(13,HIGH);
}
else if(val=='2'){
digitalWrite(13,LOW);
}
delay(100);
}
我认为主要问题是您在设置中打印Ready
。 因此, Serial.available()
函数已经有了一些价值。 在下面的代码中,我正在等待串行线上的输入。 只要串行有一些输入,while 循环就会中断,代码将继续。 从输入中获取第一个字符后,如果可用,我只是刷新任何不必要的内容。 如果这不能解决您的问题,请告诉我。
char val;
void setup() {
pinMode(13, OUTPUT);
Serial.begin(9600);
}
void loop() {
while(Serial.available() <= 0);
if(Serial.available()) {
val = Serial.read();
//Flush any excess input
while(Serial.available()) {
Serial.read();
}
Serial.println(val);
if (val=='1'){
digitalWrite(13,HIGH);
}
else if(val=='2'){
digitalWrite(13,LOW);
}
}
}
我通过将 BT 模块的波特率设置为 38400 解决了这个问题,这取决于您使用的模块类型,有些可能以不同的波特率工作。
BTSerial.begin(38400);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.