Arduino SoftwareSerial Rx/Tx引脚顺序错误?

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)那样声明时才有效;

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

Code and Pinout

+0

入住[此帖]图(https://*.com/a/15552137/17034)。正如你所看到的,MOSI是从主机角度看的输出引脚。所以一个简单的解释是你找到的网页将它用作奴隶。很难判断这是否是预期的,当您也可以提供URL时,请不要使用屏幕截图来记录您的问题。 –

+0

是的,我明白你的观点。尽管在进一步的思考中它应该用到什么样的引脚,SoftwareSerial有点突出,所以它们只是用作GPIO的? –

我意识到我的方式错误,我设置不必要的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

请注意,一段时间后,您将可以接受您自己的答案。 ;) –