亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

基于 Arduino HID 的 CNC 挂件

组件和用品

Arduino Leonardo
× 1
可以添加瞬时按钮、点亮和标签!
× 1

关于这个项目

上一篇文章更新:

2018-07-31:添加CAD文件

2018-07-24:增加原理图和编程部分

为什么选择这个项目?

你可以为你的 CNC 机器买一个吊坠,但我建造了我的木制 CNC 机器,所以为什么不做我自己的吊坠?

除此之外,我的控制器板的普通挂件要花费 100 欧元,而且只有 2 个按钮和一个手轮。

我的挂件有 23 个按钮,每个按钮最多 6 个功能和一个手轮。

一种评论可能是,“它又大又重!”但在实践中,意外地证明,有一个挂件,转动手轮时保持不动……

这是如何工作的?

Arduino 之美 带有 32u4 芯片 (并非所有型号都有这个芯片)是模拟键盘和/或鼠标的能力。当您将 Leonardo 连接到 PC 时,它会“看到”一个键盘。太棒了!

因此,当您对 Arduino 进行编程时,为其添加一些开关并将其连接到 PC 或 Mac,您可以通过按下按钮将(多个)按键/鼠标移动发送到计算机 bij。正如我提到的,23 个按钮/每个按钮 6 个功能 =很多选项..

这一切都取决于为 Arduino 草图使用正确的库!经过数小时的搜索,我终于找到了一个很棒的库,并将其包含在此页面中:Clickbutton。

使用此库,您可以为每个(瞬间!)按钮获得这些可能性:

  • 单击
  • 双击
  • 三连击
  • 单击并按住
  • 双击并按住
  • 点击三次并按住

您还可以获得去抖动功能 在重要的 Clickbutton 库中。

您可以调整每个按钮的时间,但标准时间为>=250 毫秒以识别点击和>=1000 毫秒以识别按钮保持。

只是从我的草图中摘录的 3 个功能 X 轴按钮 (键 13):

if (button[13].clicks !=0)
{
switch (button[13].clicks)
{
case 1://单击
// X 上的手轮
shortcut_HANDWHEEL_X();
break;
case 2:// 双击
// 零X
shortcut_ZERO_X( );
break;
case 3:// 三次点击
break;
case -1:// 单击并按住
// USER MACRO 18:X -axis:goto work zero position G0 X0.0000
press_ESC();
goto_MAIN_MENU();
user_MACRO_18();
break;
case -2:/ / 双击并按住
break;
case -3:// 三击并按住
break;
}
}

外壳

我选择使用桃花心木制作吊坠外壳。我喜欢用木头工作,外观和感觉都很棒。此外,通过这种方式,我可以制作一个真正定制的箱子,而现成的 ABS 类型箱子并不总是可行的,您可以花 20-50 欧元购买。

绘图是使用 Vectric Cut2D 软件制作的。我很高兴我投资了这个软件包,因为它使 CNC 学习曲线变得不那么陡峭,而且更有趣。它还可以帮助您非常轻松地设计双面作业。

稍微打磨后,木头上有很多层清漆。

此视频中的进给率:

2400mm/min (~ 94"/min) 40mm/sec. (~ 1.57") 切割 3mm (1/8") 时

开关

开关很棒。它们是瞬时类型,除了我用来打开/关闭 LED 的开关。您可以在透明顶盖后面贴上标签,如果需要,您可以使用内置 LED 点亮开关。

我在每个开关上使用了一个 1KΩ 的电阻器,在 5 伏时使用了 2mA。

这是一个带有荷兰语音频的视频,只是为了让您听到开关发出的声音。我的意见并不重要。我确实说过开关有点响,但至少你知道什么时候按下它们;)

使用这些开关的一个缺点是它们需要相当高或“厚”的外壳。顶部和底部的木材厚度为 21 毫米(0.82 英寸或 53/64 英寸)。加工后,吊坠的总厚度为 36.5 毫米(14.37 或 14 3/8 英寸)

连接开关是如此简单......我使用 Arduino 内置上拉电阻,所以你所要做的就是将所有开关的一侧连接到地,另一侧连接到 Arduino 输入。

开关标签

为了给开关贴标签,我在彩色激光打印机上使用了高质量的聚乙烯贴纸。 (也可用于喷墨打印机)。无法在普通纸上打印,因为在点亮时您确实会看到纸张的结构非常好。

然后我取下开关上的透明帽,将标签贴在下面的塑料片上。

图标 与购买硬件时随附的 Eding CNC 软件中使用的相同。我只是从软件目录中复制了 JPEG 图标,并在图形程序中更改了一些以根据我的需要自定义它们。

手轮

嗯,这是一个标准的 60 毫米 100PPR 6 终端电子数控手轮

所以每转 100 个脉冲,在大多数 CNC 软件中你可以编辑这个值。

电子产品

作为 HID(人机接口设备),我使用了 Arduino Leonardo 微控制器。

该微控制器板已停产,但我可以在几家网上商店购买。作为替代,您可以使用使用相同 32u4 芯片的 Arduino Micro。

通过这种方式,我可以模仿键盘敲击并控制 CNC 加工软件的许多功能,就我而言是 Eding CNC。

Arduino Leonardo 有 23 个输入引脚,足够了。如上所述,您可以为每个按钮分配 6 个功能。

按键 LED 点亮时总功耗为 150mA。

对 Arduino 微控制器进行编程

要对 Arduino 进行编程,您需要将挂件连接到 CNC 电源并使用 Arduino IDE 软件上传新草图。 (见下面的注释)所以你当然使用同一个用于模拟键盘的USB插头。

如果您想使用另一台电脑(笔记本电脑)进行编程,只需将 USB 插头插入另一台电脑并对 Arduino 进行编程,再次让挂件连接并为 CNC 电源供电

玩得开心制作自己的吊坠!

代码

  • CNC 挂件代码
CNC 挂件代码Arduino
/* 此草图将使用 Leanardo 作为 HID,在这种情况下是 Eding CNC 吊坠 使用 Leonardo 的美妙之处在于您是如此灵活!我的 Pendant 上有 20 个按键,但每个按键可以使用 6 个不同的功能。太多了,但我确实使用了一些键 3 功能。非常方便,易于使用和管理。*/#include "ClickButton.h"#include "Keyboard.h"long int aux1_delay =0;// Nr.数组中的按钮数const int buttons =20;// Button// buttonPin0 是一个虚拟的,因为我想从'1' 开始而不是'0'const int buttonPin0 =0;// 这些实际上是使用const int buttonPin1 =0;const int buttonPin2 =1;const int buttonPin3 =2;const int buttonPin4 =3;const int buttonPin5 =4;const int buttonPin6 =5;const int buttonPin7 =6;const int buttonPin8 =7;const int buttonPin9 =8;const int buttonPin10 =9;const int buttonPin11 =10;const int buttonPin12 =11;const int buttonPin13 =12;const int buttonPin14 =13;const int buttonPin15 =A0;const int buttonPin16 =A1;const int buttonPin17 =A2P =A3;const int buttonPin19 =A4;const int buttonPin20 =A5;// 实例化一个数组中的 ClickButton 对象ClickButton button[21] ={ // dummy ClickButton (buttonPin0, LOW, CLICKBTN_PULLUP), // ClickButton ClickButton (buttonPin1) 的使用实例, LOW, CLICKBTN_PULLUP), ClickButton (buttonPin2, LOW, CLICKBTN_PULLUP), ClickButton (buttonPin3, LOW, CLICKBTN_ PULLUP), ClickButton (buttonPin4, LOW, CLICKBTN_PULLUP), ClickButton (buttonPin5, LOW, CLICKBTN_PULLUP), ClickButton (buttonPin6, LOW, CLICKBTN_PULLUP), ClickButton (buttonPin7, LOW, CLICKBTN_PULLUPin8, ClickButton), ClickButton (buttonPin6, LOW, CLICKBTN_PULLUP), ClickButton buttonPin9, LOW, CLICKBTN_PULLUP), ClickButton (buttonPin10, LOW, CLICKBTN_PULLUP), ClickButton (buttonPin11, LOW, CLICKBTN_PULLUP), ClickButton (buttonPin12, LOW, CLICKBTN_PULLUP), ClickButton (buttonPin13, CLICKBTN_PULLUP) ClickButton (buttonPin13,CLICKBTN_PULLUP) ), ClickButton (buttonPin15, LOW, CLICKBTN_PULLUP), ClickButton (buttonPin16, LOW, CLICKBTN_PULLUP), ClickButton (buttonPin17, LOW, CLICKBTN_PULLUP), ClickButton (buttonPin18, LOW, CLICKBTN_PULLUPinButton), ClickButton(ButtonPin17, LOW, CLICKBTN_PULLUP), ClickButton 2 , LOW, CLICKBTN_PULLUP),};void setup(){ // 设置按钮计时器(均以毫秒/毫秒为单位) for (int i =1;我 <=按钮; i++) { button[i].debounceTime =20; // 以毫秒为单位的去抖动计时器 button[i].multiclickTime =250; // 多次点击的时间限制 button[i].longClickTime =1000; // 长按注册之前的时间 }}void loop(){ // 更新数组中所有按钮的状态 // 注意:不是从 '0' 开始而是从 '1' 开始 for (int i =1; i <=buttons); i++) { // 更新所有按钮的状态 button[i].Update(); } // 执行按钮按下 if (button[1].clicks !=0) { switch (button[1].clicks) { case 1:// 单击 // 按下 RESET 按钮 (F1) press_RESET();休息; case 2:// 双击press_ESC();休息; case 3:// 三击中断; case -1:// 单击并按住 // 关闭驱动器 press_ESC(); // 退出手轮模式 goto_MACHINE_IO_MENU();按_F2(); goto_MAIN_MENU();休息; case -2:// 双击并按住 break; case -3:// 三次点击并按住 break; } } if (button[2].clicks !=0) { switch (button[2].clicks) { case 1:// 单击 // 转到主菜单 press_ESC(); // 退出手轮模式 goto_MAIN_MENU();休息; case 2:// 双击中断; case 3:// 三击中断; case -1:// 单击并按住 break; case -2:// 双击并按住 break; case -3:// 三次点击并按住 break; } } if (button[3].clicks !=0) { switch (button[3].clicks) { case 1:// 单击中断; case 2:// 双击中断; case 3:// 三击中断; case -1:// 单击并按住 // HOME 所有轴 press_ESC(); // 退出手轮模式 goto_MAIN_MENU(); Shortcut_HOME_ALL();休息; case -2:// 双击并按住 break; case -3:// 三次点击并按住 break; } } if (button[4].clicks !=0) { switch (button[4].clicks) { case 1:// 单击 // TOGGLE MDIshortcut_TOGGLE_MDI();休息; case 2:// 双击中断; case 3:// 三击中断; case -1:// 单击并按住 break; case -2:// 双击并按住 break; case -3:// 三次点击并按住 break; } } if (button[5].clicks !=0) { switch (button[5].clicks) { case 1:// 单击 // USER MACRO 1:SET Z HEIGHT press_ESC(); // 退出手轮模式 goto_AUTO_MENU(); user_MACRO_1(); // 设置 Z 高度中断; case 2:// 双击中断; case 3:// 三击中断; case -1:// 单击并按住 break; case -2:// 双击并按住 break; case -3:// 三次点击并按住 break; } } if (button[6].clicks !=0) { switch (button[6].clicks) { case 1:// 单击 // 转到自动菜单 press_ESC(); // 退出手轮模式 goto_AUTO_MENU();休息; case 2:// 双击中断; case 3:// 三击中断; case -1:// 单击并按住 break; case -2:// 双击并按住 break; case -3:// 三次点击并按住 break; } } if (button[7].clicks !=0) { switch (button[7].clicks) { case 1:// 单击 // REDRAW GRAPHICS SCREEN press_ESC(); // 退出手轮模式 goto_AUTO_MENU();按_F3(); // 重绘中断; case 2:// 双击中断; case 3:// 三击中断; case -1:// 单击并按住 break; case -2:// 双击并按住 break; case -3:// 三次点击并按住 break; } } if (button[8].clicks !=0) { switch (button[8].clicks) { case 1:// 单击 // LOAD FILE press_ESC(); // 退出手轮模式 goto_AUTO_MENU();按_F2(); // 加载文件 break; case 2:// 双击中断; case 3:// 三击中断; case -1:// 单击并按住 break; case -2:// 双击并按住 break; case -3:// 三次点击并按住 break; } } if (button[9].clicks !=0) { switch (button[9].clicks) { case 1:// 单击 // AUX1 TOGGLE (VACUUM CLEANER) // 防止切换到很快,所以只有在 / / 延迟 1000 毫秒 if ( millis() - aux1_delay> 1000 ) { // 打开或关闭 AUX1 Shortcut_TOGGLE_AUX1(); // 启动延迟计时器 aux1 aux1_delay =millis(); } 休息; case 2:// 双击中断; case 3:// 三击中断; case -1:// 单击并按住 break; case -2:// 双击并按住 break; case -3:// 三次点击并按住 break; } } if (button[10].clicks !=0) { switch (button[10].clicks) { case 1:// 单击 // MIST TOGGLE (light)shortcut_TOGGLE_MIST();休息; case 2:// 双击中断; case 3:// 三击中断; case -1:// 单击并按住 break; case -2:// 双击并按住 break; case -3:// 三次点击并按住 break; } } if (button[11].clicks !=0) { switch (button[11].clicks) { case 1:// 单击 // Goto P1 (g28) - USER MENU OPTIE 16 press_ESC(); user_MACRO_16();休息; case 2:// 双击中断; case 3:// 三击中断; case -1:// 单击并按住 break; case -2:// 双击并按住 break; case -3:// 三次点击并按住 break; } } if (button[12].clicks !=0) { switch (button[12].clicks) { case 1:// 单击 // Goto P2 (g30) - USER MENU OPTIE 17 press_ESC(); user_MACRO_17();休息; case 2:// 双击中断; case 3:// 三击中断; case -1:// 单击并按住 break; case -2:// 双击并按住 break; case -3:// 三次点击并按住 break; } } if (button[13].clicks !=0) { switch (button[13].clicks) { case 1:// 单击 // X 上的手轮shortcut_HANDWHEEL_X();休息; case 2:// 双击 // 零 Xshortcut_ZERO_X();休息; case 3:// 三击中断; case -1:// 单击并按住 // USER MACRO 18:X-axis:goto work zero position G0 X0.0000 press_ESC(); goto_MAIN_MENU(); user_MACRO_18();休息; case -2:// 双击并按住 break; case -3:// 三次点击并按住 break; } } if (button[14].clicks !=0) { switch (button[14].clicks) { case 1:// 单击 // Y 上的手轮shortcut_HANDWHEEL_Y();休息; case 2:// 双击 // 零 Yshortcut_ZERO_Y();休息; case 3:// 三击中断; case -1:// 单击并按住 // USER MACRO 19:Y-axis:goto work zero position G0 Y0.0000 press_ESC(); goto_MAIN_MENU(); user_MACRO_19();休息; case -2:// 双击并按住 break; case -3:// 三次点击并按住 break; } } if (button[15].clicks !=0) { switch (button[15].clicks) { case 1:// 单击 // Z 上的手轮shortcut_HANDWHEEL_Z();休息; case 2:// 双击 // 零 Z 快捷方式_ZERO_Z();休息; case 3:// 三击中断; case -1:// 单击并按住 // USER MACRO 20:Z-axis-goto MACHINE up position G53 G0 Z29.0000 press_ESC(); goto_MAIN_MENU(); user_MACRO_20();休息; case -2:// 双击并按住 break; case -3:// 三次点击并按住 break; } } // 一个轴 if (button[16].clicks !=0) { switch (button[16].clicks) { case 1:// 单击 break; case 2:// 双击中断; case 3:// 三击中断; case -1:// 单击并按住 break; case -2:// 双击并按住 break; case -3:// 三次点击并按住 break; } } if (button[17].clicks !=0) { switch (button[17].clicks) { case 1:// 单击 // 手轮速度 1xshortcut_HANDWHEEL_X1();休息; case 2:// 双击中断; case 3:// 三击中断; case -1:// 单击并按住 break; case -2:// 双击并按住 break; case -3:// 三次点击并按住 break; } } if (button[18].clicks !=0) { switch (button[18].clicks) { case 1:// 单击 // 手轮速度 10 倍快捷方式_HANDWHEEL_X10();休息; case 2:// 双击中断; case 3:// 三击中断; case -1:// 单击并按住 break; case -2:// 双击并按住 break; case -3:// 三次点击并按住 break; } } if (button[19].clicks !=0) { switch (button[19].clicks) { case 1:// 单击 // 手轮速度 100 倍快捷方式_HANDWHEEL_X100();休息; case 2:// 双击中断; case 3:// 三击中断; case -1:// 单击并按住 break; case -2:// 双击并按住 break; case -3:// 三次点击并按住 break; } } if (button[20].clicks !=0) { switch (button[20].clicks) { case 1:// 单击快捷方式_TOGGLE_MACHINE_COORDINATES();休息; case 2:// 双击中断; case 3:// 三击中断; case -1:// 单击并按住 break; case -2:// 双击并按住 break; case -3:// 三次点击并按住 break; } }}/* Aduino 网站关于使用 Leonardo 作为 HID 的说明:键盘功能使 Leonardo、Micro 或 Due 能够将击键发送到连接的计算机。注意:并非所有可能的 ASCII 字符,尤其是非打印字符,都可以与键盘库一起发送。该库支持使用修饰键。同时按下时,修饰键会更改另一个键的行为。有关支持的密钥及其使用的更多信息,请参见此处。 Keyboard.begin() Keyboard.end() Keyboard.press() Keyboard.print() Keyboard.println() Keyboard.release() Keyboard.releaseAll() Keyboard.write() 参考语言 |图书馆 |比较 |更改键盘修饰符 Keyboard.write() 和 Keyboard.press() 以及 Keyboard.release() 命令不适用于所有可能的 ASCII 字符,仅适用于与键盘上的键对应的字符。例如,退格键有效,但许多其他不可打印的字符会产生不可预测的结果。对于大写字母(和其他键),发送的是 shift 加字符(即相当于同时按下键盘上的这两个键)。修饰键是计算机键盘上的一个特殊键,当两者同时按下时,它会修改另一个键的正常动作。有关 ASCII 值及其代表的字符或函数的更多信息,请参阅 asciitable.com 对于多个按键,使用 Keyboard.press() Leonardo 对修饰键的定义如下所列: Key 十六进制值 十进制值 KEY_LEFT_CTRL 0x80 128 KEY_LEFT_SHIFT 0x81 129 KEY0x882ALT 130 KEY_LEFT_GUI 0×83 131 KEY_RIGHT_CTRL的0x84 132 KEY_RIGHT_SHIFT 0x85 133 KEY_RIGHT_ALT 0x86可以134 KEY_RIGHT_GUI 87H的135 KEY_UP_ARROW 0xDA 218 KEY_DOWN_ARROW 0xD9 217 KEY_LEFT_ARROW 0xD8 216 KEY_RIGHT_ARROW 0xD7 215 KEY_BACKSPACE 0xB2 178 KEY_TAB 0xB3 179 KEY_RETURN 0XB0 176 KEY_ESC 0xB1 177 KEY_INSERT 0xD1 209 KEY_DELETE 0xD4 212 KEY_PAGE_UP 0xD3 211 KEY_PAGE_DOWN 0xD6 214 KEY_HOME 0xD2 210 KEY_END 0xD5 213 KEY_CAPS_LOCK 0xC1 193 KEY_F1为0xC2 194 KEY_F2 0xC3 195 KEY_F3 0xC4 196 KEY_F4 0xC5 197 KEY_F5 0xC6 198 KEY_F6 0xC7 199 KEY_F7 0xC8 200 KEY_F8 0xC9 201 KEY_F9 0xCA 202 KEY_F10 0xCB 203 KEY_F11的0xCC 204 KEY_F12 0XCD 205 * /空press_RESET(){ Keyboard.begin();键盘。按下(KEY_F1);延迟(100); Keyboard.releaseAll();}void press_ESC(){ Keyboard.begin();键盘。按下(KEY_ESC);延迟(100); Keyboard.releaseAll();}void press_F2(){ Keyboard.begin();键盘。按下(KEY_F2);延迟(100); Keyboard.releaseAll();}void press_F3(){ Keyboard.begin();键盘。按下(KEY_F3);延迟(100); Keyboard.releaseAll();}void press_F4(){ Keyboard.begin();键盘。按下(KEY_F4);延迟(100); Keyboard.releaseAll();}void press_F5(){ Keyboard.begin();键盘。按下(KEY_F5);延迟(100); Keyboard.releaseAll();}void press_F6(){ Keyboard.begin();键盘。按下(KEY_F6);延迟(100); Keyboard.releaseAll();}void press_F7(){ Keyboard.begin();键盘。按下(KEY_F7);延迟(100); Keyboard.releaseAll();}void press_F8(){ Keyboard.begin();键盘。按下(KEY_F8);延迟(100); Keyboard.releaseAll();}void press_F9(){ Keyboard.begin();键盘。按下(KEY_F9);延迟(100); Keyboard.releaseAll();}void press_F10(){ Keyboard.begin();键盘。按下(KEY_F10);延迟(100); Keyboard.releaseAll();}void press_F11(){ Keyboard.begin();键盘。按下(KEY_F11);延迟(100); Keyboard.releaseAll();}void press_F12(){ Keyboard.begin();键盘。按下(KEY_F12);延迟(100); Keyboard.releaseAll();}void goto_MAIN_MENU(){ Keyboard.begin();键盘。按下(KEY_LEFT_ALT);键盘。按下(KEY_F1);延迟(100); Keyboard.releaseAll();}void goto_HOME_MENU(){ Keyboard.begin();键盘。按下(KEY_LEFT_ALT);键盘。按下(KEY_F2);延迟(100); Keyboard.releaseAll();}void goto_ZERO_MENU(){ Keyboard.begin();键盘。按下(KEY_LEFT_ALT);键盘。按下(KEY_F3);延迟(100); Keyboard.releaseAll();}void goto_AUTO_MENU(){ Keyboard.begin();键盘。按下(KEY_LEFT_ALT);键盘。按下(KEY_F4);延迟(100); Keyboard.releaseAll();}void goto_MACHINE_IO_MENU(){ Keyboard.begin();键盘。按下(KEY_LEFT_ALT);键盘。按下(KEY_F7);延迟(100); Keyboard.releaseAll();}void goto_GRAPHICS_MENU(){ Keyboard.begin();键盘。按下(KEY_LEFT_ALT);键盘。按下(KEY_F8);延迟(100); Keyboard.releaseAll();}void goto_JOG_MENU(){ Keyboard.begin();键盘。按下(KEY_LEFT_ALT);键盘。按下(KEY_F9);延迟(100); Keyboard.releaseAll();}void goto_JOG_PAD(){ Keyboard.begin();键盘。按下(KEY_LEFT_ALT);键盘。按下(KEY_F10);延迟(100); Keyboard.releaseAll();}void goto_USER1_MENU(){ Keyboard.begin();键盘。按下(KEY_LEFT_ALT);键盘。按下(KEY_F11);延迟(100); Keyboard.releaseAll();}void goto_USER2_MENU(){ Keyboard.begin();键盘。按下(KEY_LEFT_ALT);键盘。按下(KEY_F12);延迟(100); Keyboard.releaseAll();}void shortcut_HOME_ALL(){ Keyboard.begin();键盘。按下(KEY_LEFT_CTRL);键盘.press('h');延迟(100); Keyboard.releaseAll();}void shortcut_ZERO_X(){ Keyboard.begin();键盘。按下(KEY_LEFT_CTRL);键盘.press('1');延迟(100); Keyboard.releaseAll();}void shortcut_ZERO_Y(){ Keyboard.begin();键盘。按下(KEY_LEFT_CTRL);键盘.press('2');延迟(100); Keyboard.releaseAll();}void shortcut_ZERO_Z(){ Keyboard.begin();键盘。按下(KEY_LEFT_CTRL);键盘.press('3');延迟(100); Keyboard.releaseAll();}void shortcut_HANDWHEEL_X(){ Keyboard.begin();键盘。按下(KEY_LEFT_CTRL);键盘。按下(KEY_LEFT_SHIFT);键盘.press('x');延迟(100); Keyboard.releaseAll();}void shortcut_HANDWHEEL_Y(){ Keyboard.begin();键盘。按下(KEY_LEFT_CTRL);键盘。按下(KEY_LEFT_SHIFT); Keyboard.press('y');延迟(100); Keyboard.releaseAll();}void shortcut_HANDWHEEL_Z(){ Keyboard.begin();键盘。按下(KEY_LEFT_CTRL);键盘。按下(KEY_LEFT_SHIFT);键盘.press('z');延迟(100); Keyboard.releaseAll();}void shortcut_HANDWHEEL_X1(){ Keyboard.begin();键盘。按下(KEY_LEFT_CTRL);键盘.press('n');延迟(100); Keyboard.releaseAll();}voidshortcut_HANDWHEEL_X10(){Keyboard.begin();键盘。按下(KEY_LEFT_CTRL);键盘.press('o');延迟(100); Keyboard.releaseAll();}voidshortcut_HANDWHEEL_X100(){Keyboard.begin();键盘。按下(KEY_LEFT_CTRL);键盘.press('p');延迟(100); Keyboard.releaseAll();}void shortcut_TOGGLE_MDI(){ Keyboard.begin();键盘。按下(KEY_LEFT_CTRL);键盘。按下(KEY_F6);延迟(100); Keyboard.releaseAll();}void shortcut_TOGGLE_MACHINE_COORDINATES(){ Keyboard.begin(); // 切换机器/工作坐标 Keyboard.press(KEY_LEFT_CTRL);键盘.press('w');延迟(100); Keyboard.releaseAll();}void shortcut_TOGGLE_AUX1(){ Keyboard.begin();键盘。按下(KEY_LEFT_CTRL);键盘.press('m');延迟(100); Keyboard.releaseAll();}void shortcut_TOGGLE_MIST(){ Keyboard.begin();键盘。按下(KEY_LEFT_CTRL);键盘.press('l');延迟(100); Keyboard.releaseAll();}void shortcut_TOGGLE_FLOOD(){ Keyboard.begin();键盘。按下(KEY_LEFT_CTRL);键盘.press('k');延迟(100); Keyboard.releaseAll();}void user_MACRO_1(){ Keyboard.begin();键盘。按下(KEY_LEFT_ALT);键盘.press('1');延迟(100); Keyboard.releaseAll();}void user_MACRO_2(){ Keyboard.begin();键盘。按下(KEY_LEFT_ALT);键盘.press('2');延迟(100); Keyboard.releaseAll();}void user_MACRO_3(){ Keyboard.begin();键盘。按下(KEY_LEFT_ALT);键盘.press('3');延迟(100); Keyboard.releaseAll();}void user_MACRO_4(){ Keyboard.begin();键盘。按下(KEY_LEFT_ALT);键盘.press('4');延迟(100); Keyboard.releaseAll();}void user_MACRO_5(){ Keyboard.begin();键盘。按下(KEY_LEFT_ALT);键盘.press('5');延迟(100); Keyboard.releaseAll();...此文件已被截断,请下载以查看其完整内容。

定制零件和外壳

这是获得每个按钮最多功能所需的最重要的库 clickbutton_hq5qeT4toX.zip cnc_pendant_SenmxC8UCj.zip

示意图

一个不太好的原理图,但它可以完成工作......

制造工艺

  1. 按钮
  2. 使用按钮通过 PWM 调光灯光
  3. Arduino Spybot
  4. FlickMote
  5. 自制电视 B-Gone
  6. 主时钟
  7. 找到我
  8. 如何制作可自定义的打孔键盘按钮
  9. Arduino Power
  10. Tech-TicTacToe
  11. 无线吊装连接到 CNC 系统
  12. CNC 操作面板上的 RESET 按钮是什么