|
本帖最后由 Yuri-Chen 于 2017-8-3 14:24 编辑
2017.8.3更新代码,之前通信工作不稳定!!!
2017.8.3更新代码,之前通信工作不稳定!!!
2017.8.3更新代码,之前通信工作不稳定!!!
本人学习Arduino也快一个月了,最近想利用RS485模块实现串口通信,于是买了两块MAX485模块。如下图:
这种模块唯一好处是便宜,但是用起来并不太方便,这个后面叙述。
我的实验是利用两块MAX485给两个Arduino UNO实现软串口通信,用硬串口观察各自收发情况,目前已调试成功,下面上电路图:
1.接线方法:
1.将Arduino上的数字引脚10、11设置为软串口RX和TX与MAX485模块上的RO和DI连接;
2.MAX485模块上的RE和DE连接在一起用一个引脚2控制MAX485收发状态切换;
2.代码:
[mw_shl_code=c,true]/* Master */
#include <SoftwareSerial.h>
SoftwareSerial Master(10, 11);
char val;
int DE_RE=2;
void setup() {
Serial.begin(38400);
Serial.println("Master is ready!");
Master.begin(38400);
pinMode(DE_RE,OUTPUT);
digitalWrite(DE_RE,LOW);
}
void loop() {
while (Serial.available()) {
digitalWrite(DE_RE,HIGH);
val = Serial.read();
Master.write(val);
}
digitalWrite(DE_RE,LOW);
while(Master.available()) {
val = Master.read();
Serial.write(val);
}
}[/mw_shl_code]
[mw_shl_code=c,true]/* Slave */
#include <SoftwareSerial.h>
SoftwareSerial Slave(10, 11);
char val;
int DE_RE=2;
void setup() {
Serial.begin(38400);
Serial.println("Slave is ready!");
Slave.begin(38400);
pinMode(DE_RE,OUTPUT);
digitalWrite(DE_RE,LOW);
}
void loop() {
while (Serial.available()) {
digitalWrite(DE_RE,HIGH);
val = Serial.read();
Slave.write(val);
}
digitalWrite(DE_RE,LOW);
while(Slave.available()) {
val = Slave.read();
Serial.write(val);
}
}[/mw_shl_code]
由于这个RS485模块是半双功,所以代码里要切换MAX485的收发状态以保证不会总线冲突,以上程序可以实现主从机既可以接收又可以发送。
3.实验结果:
在Master里发送"Hello",Slaver可以收到;在Slaver里发送"OK",Master也可以收到。
PS:虽说这款模块调试通了,但是个人觉得还是下面这款比较好用
因为你可以不用理会何时接收何时发送,从而避免总线冲突,你就可以把它当作全双工的串口增强驱动器使用!
|
|