在Arduino上测试RS485模块之通讯中接收数据的控制-Arduino中文社区 - Powered by Discuz! Archiver

1+1 发表于 2014-3-28 17:32

在Arduino上测试RS485模块之通讯中接收数据的控制

模块介绍:本实验的目的是在RS485模块通信的基础上实现接收端的控制,即接收端是否接收发送端的数据。

实验器材:
Arduino UNO 2块
RS485模块 2块双公头杜邦线 2根电路连接:将上图中左边的RS485模块上H2的485-A连接到右边RS485模块上H2的485-A上;将上图中左边的RS485模块上H2的485-B连接到右边RS485模块上H2的485-B上;将两个RS485模块三的P1都用短路帽连接到3.3V上;将作为接收端的RS485模块(上图中左边的模块)上的P2都用短路帽连接到TX_CTRL上;将作为发送端的RS485模块(上图中右边的模块)上的P2都用短路帽连接到D9_CTRL上;用短路帽将两块RS485模块的D2与TX短接,D3与RX短接。实验代码:接收代码:#include <SoftwareSerial.h>SoftwareSerial mySerial(3,2);
void setup() {
Serial.begin(9600);
mySerial.begin(9600);
pinMode(9,OUTPUT);
}

void loop() {
while(mySerial.available() > 0){
    char c = mySerial.read();
    Serial.write(c);
}
}
发送代码:
#include <SoftwareSerial.h>

SoftwareSerial mySerial(3,2);

bool a=0;

int b=0;

void setup() {

mySerial.begin (9600);

Serial.begin(9600);

pinMode(9,OUTPUT);

}

void loop() {

if(a==0)

{

digitalWrite(9,HIGH);

Serial.println ("pin9 is HIGH");

mySerial.println("pin9 is HIGH");

}

else

{

digitalWrite(9,LOW);

Serial.println ("pin9 is LOW");

mySerial.println("pin9 is LOW");

}

b++;

a=b%2;

delay(1000);

}
上面的代码是含义是接收端始终处于监听的状态,而发送端通过Arduino的D9控制RS485是否发送使能,D9为高电平RS485发送数据失能,在接收端看不到数据,D9为低电平RS485发送使能,可以在接收端看到数据。
实验结果与分析:

由于RS485是差分信号,所以当D9为高电平时无法满足差分的最小阈值,故数据无法发送,相反的,当D9为低电平时数据就可以发送了。本次试验是在《在Arduino上测试RS485模块之通讯测试》的基础上完成的,过程比较简单,希望大家喜欢。

小小东熙 发表于 2014-7-16 17:06

请教楼主:你用485控制过变频器没有????

beckhaxi 发表于 2015-6-25 22:38

楼主,我按照《在Arduino上测试RS485模块之通讯测试》的连接和code连接两个mega。试了很久就是没有反应。Serial.available永远是0。不知你有没有建议?

caoanwei 发表于 2017-7-17 14:09

这个485扩展板在哪里购买
页: [1]
查看完整版本: 在Arduino上测试RS485模块之通讯中接收数据的控制