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

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 29768|回复: 3

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

[复制链接]
发表于 2014-3-28 17:32 | 显示全部楼层 |阅读模式
模块介绍:本实验的目的是在RS485模块通信的基础上实现接收端的控制,即接收端是否接收发送端的数据。
RS485%E6%A8%A1%E5%9D%972.jpg
实验器材:
Arduino UNO 2
RS485模块 2块
双公头杜邦线 2根
电路连接:
%E7%94%B5%E8%B7%AF%E8%BF%9E%E6%8E%A5%E5%9B%BE2.jpg 将上图中左边的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);

}
上面的代码是含义是接收端始终处于监听的状态,而发送端通过ArduinoD9控制RS485是否发送使能,D9为高电平RS485发送数据失能,在接收端看不到数据,D9为低电平RS485发送使能,可以在接收端看到数据。
实验结果与分析:
%E5%AE%9E%E9%AA%8C%E7%BB%93%E6%9E%9C2.jpg
由于RS485是差分信号,所以当D9为高电平时无法满足差分的最小阈值,故数据无法发送,相反的,当D9为低电平时数据就可以发送了。
本次试验是在《在Arduino上测试RS485模块之通讯测试》的基础上完成的,过程比较简单,希望大家喜欢。


发表于 2014-7-16 17:06 | 显示全部楼层
请教楼主:你用485控制过变频器没有????
发表于 2015-6-25 22:38 | 显示全部楼层
楼主,我按照《在Arduino上测试RS485模块之通讯测试》的连接和code连接两个mega。试了很久就是没有反应。Serial.available永远是0。不知你有没有建议?
发表于 2017-7-17 14:09 | 显示全部楼层
这个485扩展板在哪里购买
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-30 23:47 , Processed in 0.113155 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表