我意识到我的方式错误,我不必要地设置了 Rx 和 Tx 引脚的 pinMode。这让我大吃一惊,因为我认为将 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);
}
}