{"id":2090,"date":"2026-05-11T13:07:17","date_gmt":"2026-05-11T17:07:17","guid":{"rendered":"https:\/\/www.kornequipped.com\/blog\/?p=2090"},"modified":"2026-05-11T15:37:45","modified_gmt":"2026-05-11T19:37:45","slug":"langmuir-firecontrol-cnc-pendant","status":"publish","type":"post","link":"https:\/\/www.kornequipped.com\/blog\/?p=2090","title":{"rendered":"Langmuir FireControl CNC Pendant"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">I made this simple Pendant for FireControl. You can easily customize it for other platforms.<br><br>red, yellow, &amp; green buttons are stop, pause, &amp; start <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">black switches nudge \/ jog mode, and the blue buttons jog the torch<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">See below for the STL file and source code&#8230;<br>The plate fits a standard double gang box&#8230;<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"1024\" src=\"https:\/\/www.kornequipped.com\/blog\/wp-content\/uploads\/2026\/05\/IMG_3645-1-768x1024.jpeg\" alt=\"\" class=\"wp-image-2093\" srcset=\"https:\/\/www.kornequipped.com\/blog\/wp-content\/uploads\/2026\/05\/IMG_3645-1-768x1024.jpeg 768w, https:\/\/www.kornequipped.com\/blog\/wp-content\/uploads\/2026\/05\/IMG_3645-1-225x300.jpeg 225w, https:\/\/www.kornequipped.com\/blog\/wp-content\/uploads\/2026\/05\/IMG_3645-1.jpeg 1024w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>\n\/*\nJog X+: Right Arrow Key\nJog X-: Left Arrow Key\nJog Y+: Up Arrow Key\nJog Y-: Down Arrow Key\nJog Z+: Page Up Key\nJog Z-: Page Down Key\nToggle Nudge Jog: Tab Key\nStart Program: ALT + R\nPause Program: Space Bar\nStop Program: ALT + S\n*\/\n\n\n#include \"Keyboard.h\"\n#define LED_PIN     13\n\n#define BUTTON_PIN1 A0\n#define BUTTON_PIN2 A1\n#define BUTTON_PIN3 A2\n#define BUTTON_PIN4 A3\n#define BUTTON_PIN5 A4\n#define BUTTON_PIN6 A5\n#define BUTTON_PIN7 9\n#define BUTTON_PIN8 10\n#define BUTTON_PIN9 11\n#define BUTTON_PIN10 12\n\nvoid setup() {\n\n  Keyboard.begin();\n\n  pinMode(BUTTON_PIN1, INPUT);\n  pinMode(BUTTON_PIN2, INPUT);\n  pinMode(BUTTON_PIN3, INPUT);\n  pinMode(BUTTON_PIN4, INPUT);\n  pinMode(BUTTON_PIN5, INPUT);\n  pinMode(BUTTON_PIN6, INPUT);\n  pinMode(BUTTON_PIN7, INPUT);\n  pinMode(BUTTON_PIN8, INPUT);\n  pinMode(BUTTON_PIN9, INPUT);\n  pinMode(BUTTON_PIN10, INPUT);\n  \n  digitalWrite(LED_PIN, HIGH);\n \n  digitalWrite(BUTTON_PIN1, HIGH);\n  digitalWrite(BUTTON_PIN2, HIGH);\n  digitalWrite(BUTTON_PIN3, HIGH);\n  digitalWrite(BUTTON_PIN4, HIGH);\n  digitalWrite(BUTTON_PIN5, HIGH);\n  digitalWrite(BUTTON_PIN6, HIGH);\n  digitalWrite(BUTTON_PIN7, HIGH);\n  digitalWrite(BUTTON_PIN8, HIGH);\n  digitalWrite(BUTTON_PIN9, HIGH);\n  digitalWrite(BUTTON_PIN10, HIGH);\n\n}\n\nvoid loop() {\n  \n  digitalWrite(LED_PIN, !digitalRead(LED_PIN));\n\n  if (digitalRead(BUTTON_PIN1) == 0) {\n     Keyboard.press(KEY_UP_ARROW);\n     while (digitalRead(BUTTON_PIN1) == 0) {}\n     Keyboard.releaseAll();\n     delay(25);   \n   }\n\n  else if (digitalRead(BUTTON_PIN2) == 0) {\n     Keyboard.press(KEY_DOWN_ARROW);\n     while (digitalRead(BUTTON_PIN2) == 0) {}\n     Keyboard.releaseAll();\n     delay(25);   \n   }\n\n  else if (digitalRead(BUTTON_PIN3) == 0) {\n     Keyboard.press(KEY_LEFT_ARROW);\n     while (digitalRead(BUTTON_PIN3) == 0) {}\n     Keyboard.releaseAll();\n     delay(25);   \n   }\n\n  else if (digitalRead(BUTTON_PIN4) == 0) {\n     Keyboard.press(KEY_RIGHT_ARROW);\n     while (digitalRead(BUTTON_PIN4) == 0) {}\n     Keyboard.releaseAll();\n     delay(25);   \n   }\n\n  else if (digitalRead(BUTTON_PIN5) == 0) {\n     Keyboard.press(KEY_PAGE_UP);\n     while (digitalRead(BUTTON_PIN5) == 0) {}\n     Keyboard.releaseAll();\n     delay(25);   \n   }\n\n  else if (digitalRead(BUTTON_PIN6) == 0) {\n     Keyboard.press(KEY_PAGE_DOWN);\n     while (digitalRead(BUTTON_PIN6) == 0) {}\n     Keyboard.releaseAll();\n     delay(25);   \n   }\n\n  else if (digitalRead(BUTTON_PIN7) == 0) {\n     Keyboard.press(KEY_TAB);\n     while (digitalRead(BUTTON_PIN7) == 0) {}\n     Keyboard.releaseAll();\n     delay(25);   \n   }\n\n  else if (digitalRead(BUTTON_PIN8) == 0) {\n     Keyboard.press(KEY_LEFT_CTRL);\n     Keyboard.print(\"R\");\n     Keyboard.releaseAll();\n     while (digitalRead(BUTTON_PIN8) == 0) {}\n     delay(25);   \n   }\n\n  else if (digitalRead(BUTTON_PIN9) == 0) {\n     Keyboard.print(\" \");\n     while (digitalRead(BUTTON_PIN9) == 0) {}\n     delay(25);   \n   }\n\n  else if (digitalRead(BUTTON_PIN10) == 0) {\n     Keyboard.press(KEY_LEFT_CTRL);\n     Keyboard.print(\"S\");\n     Keyboard.releaseAll();\n     while (digitalRead(BUTTON_PIN10) == 0) {}\n     delay(25);   \n   }\n\n   delay(25);\n}\n\n<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"638\" src=\"https:\/\/www.kornequipped.com\/blog\/wp-content\/uploads\/2026\/05\/Screenshot-2026-05-11-at-11.25.45-AM-1-1024x638.png\" alt=\"\" class=\"wp-image-2095\" srcset=\"https:\/\/www.kornequipped.com\/blog\/wp-content\/uploads\/2026\/05\/Screenshot-2026-05-11-at-11.25.45-AM-1-1024x638.png 1024w, https:\/\/www.kornequipped.com\/blog\/wp-content\/uploads\/2026\/05\/Screenshot-2026-05-11-at-11.25.45-AM-1-300x187.png 300w, https:\/\/www.kornequipped.com\/blog\/wp-content\/uploads\/2026\/05\/Screenshot-2026-05-11-at-11.25.45-AM-1-768x479.png 768w, https:\/\/www.kornequipped.com\/blog\/wp-content\/uploads\/2026\/05\/Screenshot-2026-05-11-at-11.25.45-AM-1-1536x958.png 1536w, https:\/\/www.kornequipped.com\/blog\/wp-content\/uploads\/2026\/05\/Screenshot-2026-05-11-at-11.25.45-AM-1-2048x1277.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<div class=\"wp-block-file\"><a id=\"wp-block-file--media-d2236bd6-fd82-4479-a7eb-3360e75d9fff\" href=\"https:\/\/www.kornequipped.com\/blog\/wp-content\/uploads\/2026\/05\/mill_pendant.stl_.zip\">mill_pendant.stl<\/a><a href=\"https:\/\/www.kornequipped.com\/blog\/wp-content\/uploads\/2026\/05\/mill_pendant.stl_.zip\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-d2236bd6-fd82-4479-a7eb-3360e75d9fff\">Download<\/a><\/div>\n\n\n\n<div class=\"wp-block-file\"><a id=\"wp-block-file--media-9ce44025-b3cc-4d17-a433-0d9caf0a973b\" href=\"https:\/\/www.kornequipped.com\/blog\/wp-content\/uploads\/2026\/05\/langmuir.cpp_.zip\">langmuir.cpp<\/a><a href=\"https:\/\/www.kornequipped.com\/blog\/wp-content\/uploads\/2026\/05\/langmuir.cpp_.zip\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-9ce44025-b3cc-4d17-a433-0d9caf0a973b\">Download<\/a><\/div>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"272\" style=\"aspect-ratio: 480 \/ 272;\" width=\"480\" controls src=\"https:\/\/www.kornequipped.com\/blog\/wp-content\/uploads\/2026\/05\/Pendant.mp4\"><\/video><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>I made this simple Pendant for FireControl. You can easily customize it for other platforms. red, yellow, &amp; green buttons are stop, pause, &amp; start black switches nudge \/ jog mode, and the blue buttons jog the torch See below for the STL file and source code&#8230;The plate fits a standard double gang box&#8230;<\/p>\n","protected":false},"author":1,"featured_media":2091,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,6,9],"tags":[],"class_list":["post-2090","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-3d-printing","category-arduino","category-cnc"],"_links":{"self":[{"href":"https:\/\/www.kornequipped.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/2090","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kornequipped.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kornequipped.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kornequipped.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kornequipped.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2090"}],"version-history":[{"count":6,"href":"https:\/\/www.kornequipped.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/2090\/revisions"}],"predecessor-version":[{"id":2106,"href":"https:\/\/www.kornequipped.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/2090\/revisions\/2106"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.kornequipped.com\/blog\/index.php?rest_route=\/wp\/v2\/media\/2091"}],"wp:attachment":[{"href":"https:\/\/www.kornequipped.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2090"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kornequipped.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2090"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kornequipped.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2090"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}