Arduino 软件串行 Rx/Tx 引脚顺序错误?



我正在编写代码,以便在由Arduino编程为ISP的ATtiny 上运行。ATtiny 是通过串行链路将 AT 命令发送到 RN42 蓝牙模块.

由于ATtiny没有UART,我在引脚0和1上使用SoftwareSerial。将Tx放在"Data Out"/MISO引脚上,将Rx放在"Data In"/MOSI引脚上似乎是合乎逻辑的。文档说要像SoftwareSerial mySerial(Rx,Tx(一样声明它;但我发现它只有在你像软件串行 mySerial(Tx, Rx( 一样以相反的方式声明它时才有效;

我已经截取了我的代码和引脚排列的屏幕截图, 我觉得我错过了一些东西,但是当我这样做时,它可以工作并使蓝牙模块进入命令模式.文档是否错误?

代码和引脚排列

我意识到我的方式错误,我不必要地设置了 Rx 和 Tx 引脚的引脚模式。这让我很失望,因为我认为将 Rx 引脚设置为 OUTPUT 不起作用,而实际上它确实有效,所以我在我的 Rx 行上输出数据并在 Tx 行上接收它!答案是不分配方向,只是让SoftwareSerial处理引脚。按顺序传递参数(Rx、Tx(。

这是我的更干净的代码,它工作得更好:

#include <SoftwareSerial.h>
const int Rx = 0;                           // pin 5 on ATtiny - DI/MOSI
const int Tx = 1;                           // pin 6 on ATtiny - DO/MISO
const int ButtonIn = 2;
const int OK_LED = 4;
int buttonState = 0;
SoftwareSerial serialBT(Rx, Tx);
void setup() 
{
pinMode(ButtonIn, INPUT);
pinMode(OK_LED, OUTPUT);
serialBT.begin(9600);
}
void loop() 
{
buttonState = digitalRead(ButtonIn);
if (buttonState == 0)
{  
serialBT.print("$");                    // $$$ enters RN42 command mode
serialBT.print("$");
serialBT.print("$");
delay(3000);
serialBT.println("R,1");
digitalWrite(OK_LED, HIGH);
delay(5000);
digitalWrite(OK_LED, LOW);
}
}

最新更新