【问题标题】:trouble triggering relay with Bluetooth on an Arduini Mega在 Arduino Mega 上使用蓝牙触发继电器时出现问题
【发布时间】:2020-03-27 16:19:59
【问题描述】:

我打算制作一个蓝牙控制的继电器。但我一直在用我的蓝牙条目触发继电器时遇到问题。我在手机上写入的数据显示在串行监视器中,但我无法关闭或打开继电器。我使用的是单通道继电器模块和 HC -06 蓝牙模块。 有人可以告诉我问题是什么吗?这真让我抓狂。我的蓝牙模块分别连接到 TX 和 RX,我的继电器连接到我的 arduino mega 的引脚 13。

                                   Thank You in advance!
#include <SoftwareSerial.h>
SoftwareSerial bt(1,0);
int RelayStateOn =0;

void setup() {
bt.begin(9600);

pinMode(13,OUTPUT);
}

char val=bt.read();

void loop() {

if(bt.available())  {
  bt.println(val);
  }

if(val==1)  {
  digitalWrite(13,HIGH);
  }
else if(val==0) {
  digitalWrite(13,LOW);
  }
} 

【问题讨论】:

  • 你发送的是二进制数1吗?或者你发送ASCII字符'1'?尝试测试 '1' 和 '0' 而不是 1 和 0。注意它们上的单引号以告诉编译器这些是 ascii 代码。
  • @Delta_G 是的,我都试过了。我什至尝试使用字母而不是 1 和 0

标签: arduino bluetooth arduino-ide


【解决方案1】:

首先,您无需在任何地方调用从循环中的 bt 读取。您在全局范围内调用了 bt.read() ,因此 val 获取在任何内容准备好读取之前读取的值。所以它很可能得到-1。

在调用 print 之前,您还调用了avaialable,这意味着您不了解可用的用途。它告诉是否有更多可供阅读的内容。所以这应该在你要添加的循环中的行周围,它从 bt 读取,而不是打印到它的那个。

首先,在您拥有 bt.println(val) 的地方,将其更改为 val = bt.read()。

【讨论】:

  • 你的权利,我不知道可用功能是什么意思。但是,按照您的建议更改代码后,我的继电器仍然无法正常工作。
  • 我改变了我最初的 if 语句。它现在显示为: if(bt.available()) { val=bt.read(); }
  • 你试过用'0'和'1'代替0和1吗?
  • 你为什么要试试'a'?如果您的发件人发送 0 或 1?如果您通过串行监视器发送 0 和 1,那么您需要在程序中测试“0”和“1”。如果您要使用其他程序发送,请发布。编辑您的问题并添加新版本的代码。
  • 另一个重要的问题。为什么要在硬件串行引脚上使用 SoftwareSerial 实例?如果您想使用引脚 0 和 1,则只需使用串行,不要打扰 SoftwareSerial。仅这一点简单的事情可能就是为什么事情不适合你。你能确认你收到了吗?你有兆丰吗?您永远不需要使用 Mega 的 SoftwareSerial,它有多个串行端口。将 bt 移动到 Serial1 并使用 Serial 与串行监视器对话,然后打印您收到的内容以查看是否有任何内容。
猜你喜欢
  • 1970-01-01
  • 2021-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多