极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: shenhaiyu

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

[复制链接]
发表于 2014-9-4 00:39:48 | 显示全部楼层 |阅读模式
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 中写入如下代码:

  1. #include <SoftwareSerial.h>     // 软件串口

  2. // 软件串口设置
  3. SoftwareSerial WRSerial(3, 4); // 其他软件串口数据通讯TTL RX, TX
  4. SoftwareSerial GBSerial(5, 6); // GRBL数据通讯TTL RX, TX
  5. String WRComData = "";         // 串口字串缓存
  6. String GBComData = "";         // 串口字串缓存

  7. void setup() {
  8.   // 串口初始化
  9.   Serial.begin(9600);
  10.   GBSerial.begin(9600);
  11.   WRSerial.begin(9600);
  12. }

  13. void loop() {

  14.   // 其他软件串口数据处理
  15.   while(WRSerial.available()) {
  16.     WRComData += char(WRSerial.read()); // 将串口数据全部写入字串
  17.     delay(2);
  18.   }
  19.   if(WRComData.length() == 11) {
  20.    // 任意内容
  21.   }
  22.     WRComData = ""; // 清除缓存


  23.   // GRBL数据处理
  24.   while(Serial.available()) {
  25.     GBComData += char(Serial.read()); // 将串口数据全部写入字串
  26.     delay(2);
  27.   }
  28.   if(GBComData[0] == 'G') {
  29.      GBSerial.listen();
  30.      GBSerial.println(GBComData);
  31.      WRSerial.listen();
  32.   }
  33.     GBComData = ""; // 清除缓存

  34. }
复制代码


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

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

使用道具 举报

发表于 2015-4-8 16:44:31 | 显示全部楼层
请问楼主 Arduino如何装GRBL
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-21 10:41:50 | 显示全部楼层
本帖最后由 shenhaiyu 于 2015-4-21 10:45 编辑
evesky 发表于 2015-4-8 16:44
请问楼主 Arduino如何装GRBL


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

grbl源代码可以在这下:https://github.com/grbl/grbl
回复 支持 反对

使用道具 举报

发表于 2015-4-23 21:59:35 | 显示全部楼层
shenhaiyu 发表于 2015-4-21 10:41
http://blog.protoneer.co.nz/grbl-arduino-library/
这有一个简单的 Arduino IDE库,把 grbl 源代码复 ...

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

使用道具 举报

 楼主| 发表于 2015-5-4 21:58:47 | 显示全部楼层
evesky 发表于 2015-4-23 21:59
给Arduino安装好GRBL,Arduino就能识别Gcode代码 吗?   Arduino将G代码转换成什么了?进而来控制步进电机 ...

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

使用道具 举报

 楼主| 发表于 2015-5-4 21:59:06 | 显示全部楼层
evesky 发表于 2015-4-23 21:59
给Arduino安装好GRBL,Arduino就能识别Gcode代码 吗?   Arduino将G代码转换成什么了?进而来控制步进电机 ...

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

使用道具 举报

发表于 2015-5-6 09:42:31 | 显示全部楼层
想问一下这个GRBL-Arduino-Library编译出来的执行效率和AVR方式写的一样吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-5-7 14:07:39 | 显示全部楼层
公孙林 发表于 2015-5-6 09:42
想问一下这个GRBL-Arduino-Library编译出来的执行效率和AVR方式写的一样吗?

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

使用道具 举报

发表于 2015-6-4 11:09:40 | 显示全部楼层
请问可否用A把SD卡里的G代码发到B?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-6-4 13:00:00 | 显示全部楼层
貌似出错概率比较高
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-6-4 13:00:19 | 显示全部楼层
chengzi 发表于 2015-6-4 11:09
请问可否用A把SD卡里的G代码发到B?

当然可以了
回复 支持 反对

使用道具 举报

发表于 2015-6-7 13:58:13 | 显示全部楼层
shenhaiyu 发表于 2015-6-4 13:00
貌似出错概率比较高

???什么出错概率比较高
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-6-11 21:10:36 | 显示全部楼层
dbo 发表于 2015-6-7 13:58
???什么出错概率比较高

回复9楼的~~
回复 支持 反对

使用道具 举报

发表于 2018-4-7 17:12:04 | 显示全部楼层
请问用什么给A板发送G代码?发送的代码是类似于G01 Z100这样的吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-14 16:29:13 | 显示全部楼层
joyduino 发表于 2018-4-10 01:29
请教  如果一块ARDUINO刷了GRBL 后,怎么再复原到原来的ARDUINO 状态?就是还原成学习板

用ide重新写新的程序就可以了啊
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 13:30 , Processed in 0.047525 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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