开源改变世界

通过 Arduino Mega 将 gcode 传递给 grbl #528

推推 grbl 2年前 (2022-10-28) 333次浏览 0个评论
打开
typ1 打开了这个问题 on 3 Nov 2014 · 10 条评论
打开

通过 Arduino Mega 将 gcode 传递给 grbl第528章

typ1 打开了这个问题 on 3 Nov 2014 · 10 条评论

注释

通过 Arduino Mega 将 gcode 传递给 grbl #528

我正在做一个以 3 轴 CNC 机床为核心的项目,我想用 grbl 控制它。我想用另一个 Arduino 控制核心功能之前和之后执行的其他功能。我只想使用一个 USB 连接。我正在尝试使用以下设置:

通过 Arduino Mega 将 gcode 传递给 grbl #528

我的想法是使用 Mega 来控制其他功能,并且在将 gcode 发送到 grbl 时,发送一个信号代码,该代码将启动到 Serial1 的传递。发送 gcode 后,需要停止传递另一个信号代码。我在其他地方看到了一些非常笼统的帖子,表明其他人已经尝试过类似的事情。

我马上就遇到了麻烦。我将 Arduino MultiSerialMega 页面中的示例草图(波特率更改为 115200)加载到 Mega 上,并在我的笔记本电脑上使用了串行监视器:

http://arduino.cc/en/Tutorial/MultiSerialMega

这应该将主串行端口上接收到的任何内容发送到 Serial1,并将 Serial1 上接收到的任何内容发送到主串行端口。如果我重置了 grbl 板,我成功地在笔记本电脑上收到了欢迎消息,但是当我尝试向 grbl 发送一些东西(即 $H 以启动归位序列)时,它不起作用。

有没有人有这样做的经验?对这个概念有什么想法,以及另一种安排是否更容易实现?

通过 Arduino Mega 将 gcode 传递给 grbl #528
贡献者

shapeoko 评论 2014 年 11 月 3 日

过去做过类似的事情,我知道你需要
在arduinos之间连接gnd。否则事情会变得很奇怪(技术
术语)。

否则,它应该像你说的那样工作。我的设置和你的设置之间的唯一区别
是我使用了相同的 arduino 模型,并通过在 缓冲区已满
时让 grbl arduino 的一个引脚变高来进行一些基本的握手。
在另一个 arduino 上,我正在读取该引脚状态以
确保另一个已准备好接受新命令。

-爱德华

2014 年 11 月 2 日星期日上午 10:40,typ1 notifications@github.com写道:

我正在做一个以 3 轴 CNC 机床为核心的项目,
我想用 grbl 控制它。
我想
用另一个 Arduino 控制核心功能之前和之后执行的其他功能。我只想使用一个 USB 连接。我正在
尝试使用以下设置:

[图片:无标题]
http://www.grbl.cc/wp-content/uploads/2022/10/9ed0f-4bfeb94c-62ad-11e4-80e2-2158012a911f.png

我的想法是使用 Mega 来控制其他功能,并且在将 gcode 发送到 grbl 时,发送一个信号代码,该代码将启动 到 Serial1 的
传递。
发送 gcode 后,需要
停止传递另一个信号代码。我在其他地方看到了一些非常笼统的帖子,
表明其他人已经尝试过类似的事情。

我马上就遇到了麻烦。
我将 Arduino MultiSerialMega 页面中的示例草图(波特率更改为 115200)加载到 Mega 上,并
在我的笔记本电脑上使用了串行监视器:

http://arduino.cc/en/Tutorial/MultiSerialMega

这应该将主串行端口上接收到的任何内容发送到 Serial1
,并将 Serial1 上接收到的任何内容发送到主串行端口。如果我重置了
grbl 板,我成功地在笔记本电脑上收到了欢迎消息,但是
当我尝试向 grbl 发送一些东西(即 $H 以启动归位序列)时,
它不起作用。

有没有人有这样做的经验?对这个
概念有什么想法,以及另一种安排是否更容易实现?


直接回复此电子邮件或在 GitHub
#528上查看。

通过 Arduino Mega 将 gcode 传递给 grbl #528

谢谢爱德华——

这确实是问题….一旦解决了这个问题,直通功能就可以完美运行。继续我的信号实现。很高兴知道其他人尝试过类似的东西,而我的设计实际上是可行的。

通过 Arduino Mega 将 gcode 传递给 grbl #528

你能分享你的代码吗?我用两个 uno 尝试基本相同的东西,但我不能。如何在 grbl 代码块之后编写接收代码,wiki 编译页面说不要添加循环或 void。

通过 Arduino Mega 将 gcode 传递给 grbl #528

这个项目做了类似的事情:https ://github.com/xpix/XLCD/wiki

通过 Arduino Mega 将 gcode 传递给 grbl #528

@designr47我还没有完全完成代码,但我只是测试了基本概念。这是我在 Mega 上加载的内容”

int ledPin = 13;    // LED connected to digital pin 13
int output=0;        //Used for switching output

void setup() {
  // initialize both serial ports:
  Serial.begin(115200);
  Serial1.begin(115200);
  pinMode(ledPin, OUTPUT); // sets the digital pin as output
}

void loop() {
  // read from port 0:
  if (Serial.available())
  {
    int inByte = Serial.read();
    if (inByte=='A')  //Start of gcode indicator filter
     {
       output=1;
     }
     if (inByte=='B')//End of gcode indicator filter
     {
       output=0;
     }
    else if (inByte=='C') //Blink LED indicator filter
     {
       for (int blink = 0; blink < 3; blink++) {
      digitalWrite(ledPin, HIGH);   // sets the LED on
      delay(500);                  // waits for a second
      digitalWrite(ledPin, LOW);    // sets the LED off
      delay(500);                  // waits for a second
       }
     }
    else  //Pass through functionality
     {
       if (output==1)
       {
         Serial1.write(inByte);
       }
       else
       {
       }      
     }
  }

  if (Serial1.available()) {
    int inByte = Serial1.read();
    Serial.write(inByte);
  }
}

您在 gcode 之前发送一个“A”,在 gcode 之后发送一个“B”。只要指标过滤器(A、B 和 C)不是 gcode 中使用的字符,它就可以工作。我仍然需要添加一些东西(流量控制等),所以它可能会有所改变,但这是基本思想。

通过 Arduino Mega 将 gcode 传递给 grbl #528

我还在考虑在第二个 arduino 上制作一个串行直通程序,放在 PC 和 GRBL 之间。
它会将任何串行数据从 PC 发送到 GRBL,反之亦然。
这样,第二个 arduino 可以做其他事情,比如对按钮按下/操纵杆移动做出反应,因此它可以输出相应的 g 代码。
或者它可以用作可以控制主轴速度的设备,因为它可以对设置速度的 gcode 做出反应。

通过 Arduino Mega 将 gcode 传递给 grbl #528

嗨 – 我正在尝试创建相同的设置。我创建了一个非常相似的代码@typ1‘s 并放置在我的巨型板上,并且能够操作 uno 来打开和关闭 pin13 LED。但是,当我将 Grbl 代码放在 uno 上时,我没有收到任何响应(grbl 欢迎消息)。我的想法不多了。 @designr47 @typ1 @shapeoko 你有没有遇到过类似的问题,你知道我应该尝试什么吗?谢谢!!

通过 Arduino Mega 将 gcode 传递给 grbl #528

当发送“C”时,代码应使 Mega 上的 LED 闪烁。当发送“A”时,Mega 开始将串行数据转发到 Uno。这一直持续到它看到“B”。启动转发后,尝试发送“$$”和“Enter”以查看 Grbl 是否响应设置列表。最后一段代码应该将 Grbl 发送到终端的任何内容转发出去。另外,正如我发现的那样,确保两块板都相互接地。

通过 Arduino Mega 将 gcode 传递给 grbl #528

您使用什么应用程序访问串行端口?

通过 Arduino Mega 将 gcode 传递给 grbl #528

我注意到这仍然是开放的(即使在 12 个月之后),并且对于我最近构建的这个设计有一个非常简单的解决方案。我也去搜索了,虽然有人在做这种事情,但没有人分享……嗯

你的 Fritzing 几乎是完美的,除了需要在两个单元之间建立一个 gnd 链接。

至于草图..开始,我使用了这段代码(它完全按照你的意愿工作)

void serialEvent() {
  while (Serial.available())
  {
    Serial1.write(Serial.read());
  }
}

void serialEvent1() {
  while (Serial1.available())
  {
    Serial.write(Serial1.read());
  }
}

这使用了 Mega2560 上的串行中断,它非常强大,正是您不希望在 gcode 中掉线的功能。

它根本不需要在 loop() 方法中运行任何东西就可以工作

然而,整个过程有一个问题,我试图以不同的结果来解决它。首先,启动顺序很重要,有时我必须重新启动两个单元几次,然后任何 Gcode 发送者才能看到 GRBL hello 消息。这听起来很糟糕,但一旦连接起来,只要它在运行,它似乎就坚如磐石。解决了这个问题,但是在 GRBL 板复位引脚上添加了一条数字线(保持高电平),然后等待 Mega 启动,然后在复位线上发出 LOW、delay()、HIGH,这会在 Mega 之后重新启动 GRBL 板开始了。这降低了他们不在线但并不完美的机会。

我比上面的代码更进一步,添加了 LCD 显示屏和压电蜂鸣器,如果设备进入警报状态,它会发出尖叫声。我还对 Blynk (blynk.cc) 进行了修改,以便在我的移动/平板设备上创建一个显示和慢跑工具(有点工作,但在我看来不太正确)。

如果需要,我当然可以提供 LCD 代码(带 i2c 背包的 16×2 行),但上面的代码将使您的项目通过 Mega 进行交流。

我希望这对您自己或其他也在寻找解决方案的人有所帮助。

通过 Arduino Mega 将 gcode 传递给 grbl #528
喜欢 (0)

您必须 登录 才能发表评论!