Arduino SoftwareSerial Rx/Tx引脚顺序错误?
问题描述:
我正在编写运行在由Arduino作为ISP编程的ATtiny上运行的代码。 ATtiny将通过串行链路将AT命令发送到RN42蓝牙模块。Arduino SoftwareSerial Rx/Tx引脚顺序错误?
由于ATtiny没有UART,因此我在引脚0和1上使用SoftwareSerial。将Tx置于“数据输出”/ MISO引脚和Rx置于“Data In”/ MOSI引脚上似乎是合乎逻辑的。该文件说明声明如SoftwareSerial mySerial(Rx,Tx);但是我发现它只有在你像SoftwareSerial mySerial(Tx,Rx)那样声明时才有效;
我已经拍摄了我的代码和引脚的截图,我觉得我错过了一些东西,但是当我这样做时它可以工作,并使蓝牙模块进入命令模式。文档是否错误?
答
我意识到我的方式错误,我设置不必要的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);
}
}
+0
请注意,一段时间后,您将可以接受您自己的答案。 ;) –
入住[此帖]图(https://*.com/a/15552137/17034)。正如你所看到的,MOSI是从主机角度看的输出引脚。所以一个简单的解释是你找到的网页将它用作奴隶。很难判断这是否是预期的,当您也可以提供URL时,请不要使用屏幕截图来记录您的问题。 –
是的,我明白你的观点。尽管在进一步的思考中它应该用到什么样的引脚,SoftwareSerial有点突出,所以它们只是用作GPIO的? –