shenhaiyu 发表于 2014-9-4 00:39:48

通过一块Arduino控制另一块装有GRBL的Arduino的简单办法

RT,最近要做一个小玩意,需要一块 Arduino 与电脑通讯,根据电脑发来的指令控制另一块装有 GRBL 的 Arduino,与电脑通讯的 Arduino 还要同时处理别的设备发来的串口数据,于是折腾了一番,终于解决了,记录如下,供需要的筒子们参考:

简单的说,就是想用一块 Arduino 同时接收硬件串口和软件串口发来的不同指令,处理后用软件串口将 G 代码发给另一块装了原版 GRBL 的 Arduino。方法如下:

首先我们将处理指令的 Arduino 称为 A,装了 GRBL 的 Ardunio 称为 B,将 A 的 pin 5 和 pin 6 设为了软件串口的 RX 和 TX,然后将 A 的 pin 5(RX) 连接到 B 的 pin 1(TX),再将 A 的 pin 6(TX) 连接到 B 的 pin 0(RX),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 == 'G') {
   GBSerial.listen();
   GBSerial.println(GBComData);
   WRSerial.listen();
}
    GBComData = ""; // 清除缓存

}


运行后,如果 A 接收到从硬件串口(比如电脑)传来的 G 代码,则将该代码完整的发送给 B,同时 A 还可以随时接收来自 pin 3(RX) 和 pin 4(TX) 串口的数据,进行其他处理。

如果大家有更好的办法,欢迎探讨

evesky 发表于 2015-4-8 16:44:31

请问楼主 Arduino如何装GRBL

shenhaiyu 发表于 2015-4-21 10:41:50

本帖最后由 shenhaiyu 于 2015-4-21 10:45 编辑

evesky 发表于 2015-4-8 16:44 static/image/common/back.gif
请问楼主 Arduino如何装GRBL

http://blog.protoneer.co.nz/grbl-arduino-library/
这有一个简单的 Arduino IDE库,把 grbl 源代码复制到这个库里直接就可以用 IDE 写 grbl了

grbl源代码可以在这下:https://github.com/grbl/grbl

evesky 发表于 2015-4-23 21:59:35

shenhaiyu 发表于 2015-4-21 10:41 static/image/common/back.gif
http://blog.protoneer.co.nz/grbl-arduino-library/
这有一个简单的 Arduino IDE库,把 grbl 源代码复 ...

给Arduino安装好GRBL,Arduino就能识别Gcode代码 吗?   Arduino将G代码转换成什么了?进而来控制步进电机?

shenhaiyu 发表于 2015-5-4 21:58:47

evesky 发表于 2015-4-23 21:59 static/image/common/back.gif
给Arduino安装好GRBL,Arduino就能识别Gcode代码 吗?   Arduino将G代码转换成什么了?进而来控制步进电机 ...

对啊,用串口给Arduino发送G代码,Arduino将G代码转换成舵机驱动器支持的脉冲啊

shenhaiyu 发表于 2015-5-4 21:59:06

evesky 发表于 2015-4-23 21:59 static/image/common/back.gif
给Arduino安装好GRBL,Arduino就能识别Gcode代码 吗?   Arduino将G代码转换成什么了?进而来控制步进电机 ...

对啊,用串口给Arduino发送G代码,Arduino将G代码转换成舵机驱动器支持的脉冲啊

公孙林 发表于 2015-5-6 09:42:31

想问一下这个GRBL-Arduino-Library编译出来的执行效率和AVR方式写的一样吗?

shenhaiyu 发表于 2015-5-7 14:07:39

公孙林 发表于 2015-5-6 09:42 static/image/common/back.gif
想问一下这个GRBL-Arduino-Library编译出来的执行效率和AVR方式写的一样吗?

效率当然一样了,这个库只是提供了一个编译的接口,主要程序还是原先的GRBL

chengzi 发表于 2015-6-4 11:09:40

请问可否用A把SD卡里的G代码发到B?

shenhaiyu 发表于 2015-6-4 13:00:00

貌似出错概率比较高

shenhaiyu 发表于 2015-6-4 13:00:19

chengzi 发表于 2015-6-4 11:09 static/image/common/back.gif
请问可否用A把SD卡里的G代码发到B?

当然可以了

dbo 发表于 2015-6-7 13:58:13

shenhaiyu 发表于 2015-6-4 13:00 static/image/common/back.gif
貌似出错概率比较高

???什么出错概率比较高

shenhaiyu 发表于 2015-6-11 21:10:36

dbo 发表于 2015-6-7 13:58 static/image/common/back.gif
???什么出错概率比较高

回复9楼的~~

dsfas 发表于 2018-4-7 17:12:04

请问用什么给A板发送G代码?发送的代码是类似于G01 Z100这样的吗?

shenhaiyu 发表于 2018-8-14 16:29:13

joyduino 发表于 2018-4-10 01:29
请教如果一块ARDUINO刷了GRBL 后,怎么再复原到原来的ARDUINO 状态?就是还原成学习板

用ide重新写新的程序就可以了啊
页: [1]
查看完整版本: 通过一块Arduino控制另一块装有GRBL的Arduino的简单办法