发现问题
经常用ARDUINO UNO的人,突然用ARDUINO MEAG2560会发现下载程序用的那个串口(代码定义为Serial),只能用于和电脑通讯数据用,不能外挂串口通讯的模块,当外挂上串口设备后,ARDUINO不能和串口设备交互,只能和PC交互。而ARDUINO UNO在这方面显然做的比ME2560要兼容性好很多。
分析问题
解决问题
-
一般我写的例程喜欢#define一个串口的名字,这样为了修改Serial方便。
比如我们来看下MC20的例程【其它的模块类同】中代码最上面的定义,使用UNO时候是这样定义的
#define GprsSerail Serial
SoftwareSerial DebugSerial(10, 11); // RX, TX
这里我们使用的是硬件串口Serial,去接的GPRS模块,UNO上硬件对应RX和TX。
虚拟串口UNO的10和11可以用USB-TTL模块去和电脑通讯打印调试信息。
为什么不反过来虚拟串口接GPRS模块,而硬件串口直接和UNO通讯呢。
因为:毕竟是虚拟的不稳定,特别是在接收大数据时候,所以一般虚拟串口能不用就不用,或者只用于发送数据。
- 当使用MEGA2560时候可以修改这里的定义为
#define DebugSerial Serial
#define GprsSerail Serial3 //使用mega2560板子可以用Serial3,不用SoftSerial调试,这样更稳定
这样定义我们就可以用下载程序的这个串口Serial去直接通过USB读取调试信息数据,
而Serial3【对应RX3,TX3】去接自己的GPRS模块设备。
当然你也可以定义Serial1或者Serial2,这是自己的自由。毕竟硬件串口多任性。
上面两段代码,一般我写程序为了移植方便都定义的有,只是注释掉了,需要用MEGA2560板子时候自己使能或者按照上面的代码定义就行了,当然不同代码的定义的名字可能不太一样,根据实际的代码中定义的去修改。这里只是给的一个方法,请举一反三。
|