|
|
发表于 2014-9-4 00:20:55
|
显示全部楼层
本帖最后由 shenhaiyu 于 2014-9-4 00:31 编辑
dbo 发表于 2012-8-14 08:23 
谢谢各位 看了弘毅的东西 说明不能用另一个ARDUINO控制一个装有grbl的ARDUINO了 除非改grbl代码
最近我也遇到同样的问题了,想用一块Arduino接收硬件串口接收到的指令,处理后用软件串口发给另一块装了原版GRBL的Arduino。目前实验成功,方法如下:
首先我们将发送指令的Arduino称为A,装了GRBL的Ardunio称为B,我将A的端口5和6设为了软件串口,所以将A的 pin5 连接到B的 pin 1,再将A的 pin6 连接到B的 pin0,A和B的GND也要相连。然后在A中写入如下代码:
- #include <SoftwareSerial.h> // 软件串口
- // 软件串口设置
- SoftwareSerial WRSerial(3, 4); // 其他软件串口数据通讯TTL RX, TX
- SoftwareSerial GBSerial(5, 6); // GRBL数据通讯TTL RX, TX
- String WRComData = ""; // 串口字串缓存
- String GBComData = ""; // 串口字串缓存
- void setup() {
- // 串口初始化
- Serial.begin(9600);
- GBSerial.begin(9600);
- WRSerial.begin(9600);
- }
- void loop() {
- // 其他软件串口数据处理
- while(WRSerial.available()) {
- WRComData += char(WRSerial.read()); // 将串口数据全部写入字串
- delay(2);
- }
- if(WRComData.length() == 11) {
- // 任意内容
- }
- WRComData = ""; // 清除缓存
- // GRBL数据处理
- while(Serial.available()) {
- GBComData += char(Serial.read()); // 将串口数据全部写入字串
- delay(2);
- }
- if(GBComData[0] == 'G') {
- GBSerial.listen();
- GBSerial.println(GBComData);
- WRSerial.listen();
- }
- GBComData = ""; // 清除缓存
- }
复制代码
这段代码的功能是:如果A接收到从硬件串口(比如电脑)传来的G命令,则将该命令完整的发送给B,同时A还可以随时处理来自 pin3 pin4 串口的其他数据。 |
|