산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

Arduino HID 기반 CNC 펜던트

구성품 및 소모품

Arduino Leonardo
× 1
잠시 푸시버튼, 조명 및 레이블을 추가할 수 있습니다!
× 1

이 프로젝트 정보

최근 기사 업데이트:

2018-07-31:CAD 파일 추가

2018-07-24:회로도 및 프로그래밍 섹션 추가

왜 이 프로젝트를 합니까?

CNC 기계용 펜던트는 구입할 수 있지만 CNC 기계는 제가 직접 만들었습니다. 펜던트를 직접 만들어 보는 건 어떨까요?

그 외에도 제 컨트롤러 보드용 일반 펜던트는 100유로이며 버튼 2개와 핸드휠만 있습니다.

내 펜던트에는 버튼당 최대 6개의 기능이 있는 23개의 버튼과 핸드휠이 있습니다.

하나의 의견은 "크고 무겁습니다!"일 수 있습니다. 그러나 실제로는 핸드휠을 돌릴 때 고정된 펜던트가 있으면 예기치 않게 매우 편리한 것으로 판명되었습니다...

어떻게 작동합니까?

Arduino 32u4 칩의 아름다움 (모든 모델에 이 칩이 있는 것은 아님) 키보드 및/또는 마우스를 에뮬레이트하는 기능입니다. Leonardo를 PC에 연결하면 키보드가 '인식'됩니다. 훌륭합니다!

따라서 Arduino를 프로그래밍할 때 여기에 몇 가지 스위치를 추가하고 PC 또는 Mac에 연결하면 버튼을 눌러 컴퓨터에 (여러 번의) 키 입력/마우스 움직임을 보낼 수 있습니다. 내가 언급했듯이 23개의 버튼/버튼당 6개의 기능 =많은 옵션..

그것은 모두 Arduino 스케치에 적합한 라이브러리를 사용하는 것에 달려 있습니다! 몇 시간 동안 검색한 후 마침내 이 페이지에 포함된 훌륭한 라이브러리를 찾았습니다. Clickbutton.

이 라이브러리를 사용하면 각 (순간!) 버튼에 대해 다음과 같은 가능성을 얻을 수 있습니다.

<울>
  • 한 번 클릭
  • 더블 클릭
  • 트리플 킥
  • 클릭 한 번으로 길게 누르기
  • 두 번 클릭하고 길게 누르기
  • 세 번 길게 누르기
  • 또한 디바운스 기능이 제공됩니다. 중요한 Clickbutton 라이브러리에 있습니다.

    각 버튼의 타이밍을 조정할 수 있지만 표준 타이밍은 클릭을 인식하는 데>=250ms이고 버튼을 누르고 있는 것을 인식하는 데>=1000ms입니다.

    3가지 기능의 X축 버튼에 대한 스케치에서 발췌 (키 13):

    if (button[13].clicks !=0)
    {
    switch (button[13].clicks)
    {
    경우 1:// 한 번 클릭
    // X의 핸드휠
    short_HANDWHEEL_X();
    break;
    사례 2:// 두 번 클릭
    // 0 X
    short_ZERO_X( );
    break;
    case 3:// 트리플 클릭
    break;
    case -1:// 싱글 클릭 및 홀드
    // USER MACRO 18:X -축:작업 제로 위치로 이동 G0 X0.0000
    press_ESC();
    goto_MAIN_MENU();
    user_MACRO_18();
    break;
    case -2:/ / 더블 클릭 및 홀드
    break;
    case -3:// 트리플 클릭 앤 홀드
    break;
    }
    }

    인클로저

    나는 펜던트 인클로저에 마호가니 나무를 사용하기로 결정했습니다. 나는 나무로 작업하는 것을 좋아하고 모양과 느낌이 훌륭합니다. 또한 이 방법으로 20-50유로에 구입할 수 있는 기성품 ABS 유형 케이스로 항상 가능하지 않은 진정한 맞춤형 케이스를 만들 수 있습니다.

    그림은 Vectric Cut2D 소프트웨어로 만들었습니다. CNC 학습 곡선을 훨씬 덜 가파르고 재미있게 만들었기 때문에 이 소프트웨어 패키지에 투자하게 되어 기쁩니다. 또한 양면 작업을 매우 쉽게 설계할 수 있습니다.

    약간의 샌딩 후 나무에 투명 바니시가 여러 겹으로 도포되었습니다.

    이 동영상의 이송 속도:

    2400mm/min(~ 94"/min) 40mm/sec.(~ 1.57") 3mm(1/8") 절단 시

    스위치

    스위치는 훌륭합니다. LED를 켜고 끌 때 사용하는 스위치를 제외하고는 일시적인 유형입니다. 투명 상단 커버 뒤에 라벨을 붙일 수 있으며 원할 경우 내장 LED로 스위치를 켤 수 있습니다.

    5V에서 2mA를 사용하여 스위치당 1KΩ 저항을 사용했습니다.

    다음은 네덜란드 오디오가 포함된 비디오로, 스위치가 만드는 소리만 들을 수 있습니다. 내 의견은 중요하지 않습니다. 스위치가 약간 크다고 말씀드렸지만 적어도 스위치를 눌렀을 때 알 수 있습니다;)

    이러한 스위치를 사용할 때의 한 가지 단점은 다소 높거나 '두꺼운' 인클로저가 필요하다는 것입니다. 목재 두께는 상단 및 하단 부분에 대해 21mm(0.82" 또는 53/64")였습니다. 가공 후 펜던트의 총 두께는 36,5mm(14,37 또는 14 3/8인치)입니다.

    스위치 연결은 정말 쉽습니다... 저는 풀업 저항에 Arduino 빌드를 사용하므로 모든 스위치의 한쪽을 접지에 연결하고 다른 쪽을 Arduino 입력에 연결하기만 하면 됩니다.

    스위치 레이블

    스위치에 라벨을 붙이기 위해 컬러 레이저 프린터에 고품질 폴리 비닐 스티커를 사용했습니다. (잉크젯 프린터에도 사용 가능). 일반 용지에 인쇄하는 것은 옵션이 없었습니다. 불을 켜면 용지의 구조가 매우 잘 보이기 때문입니다.

    그런 다음 스위치에서 투명 캡을 제거하고 그 아래에 있는 플라스틱 조각에 레이블을 붙였습니다.

    아이콘 하드웨어를 구입할 때 포함된 Eding CNC 소프트웨어에서 사용하는 것과 동일합니다. 소프트웨어 디렉토리에서 JPEG 아이콘을 복사하고 그래픽 프로그램에서 일부를 변경하여 필요에 맞게 사용자 정의했습니다.

    핸드휠

    이것은 표준 60mm 100PPR 6 터미널 전자 CNC 핸드 휠입니다.

    따라서 회전당 100펄스, 대부분의 CNC 소프트웨어에서 이 값을 편집할 수 있습니다.

    전자 제품

    HID(Human Interface Device)로 아두이노 레오나르도 마이크로컨트롤러를 사용했습니다.

    이 마이크로컨트롤러 보드는 단종되었지만 여러 온라인 상점에서 구입할 수 있습니다. 대안으로 동일한 32u4 칩을 사용하는 Arduino Micro를 사용할 수 있습니다.

    이런 식으로 저는 키보드 스트로크를 모방하고 CNC 가공 소프트웨어의 많은 기능을 제어할 수 있었습니다. 제 경우에는 Eding CNC였습니다.

    Arduino Leonardo에는 23개의 입력 핀이 있으므로 충분합니다. 말했듯이 버튼당 6개의 기능을 할당할 수 있습니다.

    총 전력 소비는 키 LED가 켜진 상태에서 150mA입니다.

    Arduino 마이크로컨트롤러 프로그래밍

    Arduino를 프로그래밍하려면 펜던트를 CNC 전원 공급 장치에 연결된 상태로 두고 Arduino IDE 소프트웨어를 사용하여 새 스케치를 업로드해야 합니다. (아래 참고 참조) 따라서 키보드 에뮬레이션에 사용되는 것과 동일한 USB 플러그를 사용하게 됩니다.

    프로그래밍을 위해 다른 PC(노트북)를 사용하려면 USB 플러그를 다른 PC에 연결하고 Arduino를 프로그래밍하기만 하면 됩니다. 이때 다시 펜던트를 연결하고 CNC 전원 공급 장치에 전원을 공급합니다.

    나만의 펜던트를 만들어보세요!

    <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

    코드

    <울>
  • CNC 펜던트 코드
  • CNC 펜던트 코드Arduino
    /* 이 스케치는 이 경우에 대해 Leanardo를 HID로 사용하기 위한 것입니다. Eding CNC Pendant Leonardo를 사용하는 것의 장점은 매우 유연하다는 것입니다! 내 펜던트에는 20개의 키가 있지만 키당 6개의 다른 기능을 사용할 수 있습니다. 너무 많은 방법이지만 일부 키 3 기능에 사용합니다. 매우 편리하고 사용 및 관리하기 쉽습니다.*/#include "ClickButton.h#include "Keyboard.h"long int aux1_delay =0;// Nr. arrayconst int buttons =20;// Button// buttonPin0은 더미입니다. 왜냐하면 '0'대신 '1'로 시작하기를 원하기 때문입니다 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 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 =A2P, const17 int ==A3;const int buttonPin19 =A4;const int buttonPin20 =A5; // arrayClickButton에서 ClickButton 개체를 인스턴스화합니다. button[21] ={ // 더미 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_PULLUP), ClickButton(_KBTN_PULLUP), ClickButton buttonPin9, LOW, CLICKBTN_PULLUP), ClickButton(buttonPin10, LOW, CLICKBTN_PULLUP), ClickButton(buttonPin11, LOW, CLICKBTN_PULLUP), ClickButton(buttonPin12, LOW, CLICKBTN_PULLUP, CLICKUP4에서 CLICKBTN_PULLUP), ClickButton(버튼_Pin13에서), ), ClickButton(buttonPin15, LOW, CLICKBTN_PULLUP), ClickButton(buttonPin16, LOW, CLICKBTN_PULLUP), ClickButton(buttonPin17, LOW, CLICKBTN_PULLUP), ClickButton(buttonPin18, LOW, CLICKBTN9UP, CLICKBTN9UP, 버튼 LOW, CLICKBTN9에서 CLICKBTN_PULLUP), ClickButton , LOW, CLICKBTN_PULLUP),};void setup(){ // (int i =1; 나는 <=버튼; i++) { 버튼[i].debounceTime =20; // ms button[i].multiclickTime =250의 디바운스 타이머; // 다중 클릭의 시간 제한 button[i].longClickTime =1000; // 길게 클릭할 때까지의 시간 등록 }}void loop(){ // 배열에 있는 모든 버튼의 상태 업데이트 // 참고:'0'에서 시작되지 않고 '1' for (int i =1; i <=buttons; i++) { // 모든 버튼의 상태 업데이트 버튼[i].Update(); } // 버튼 누름 실행 if (button[1].clicks !=0) { switch (button[1].clicks) { case 1:// 한 번 클릭 // RESET 버튼 누르기(F1) press_RESET(); 부서지다; case 2:// 더블클릭 press_ESC(); 부서지다; 사례 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(); 부서지다; 사례 2:// 더블 클릭 break; 사례 3:// 트리플 클릭 중단; case -1:// 한 번 클릭하고 길게 누르기 break; case -2:// 더블 클릭 및 홀드 break; case -3:// 트리플 클릭 및 홀드 break; } } if (button[3].clicks !=0) { switch (button[3].clicks) { case 1:// 싱글 클릭 break; 사례 2:// 더블 클릭 break; 사례 3:// 트리플 클릭 중단; case -1:// 단일 클릭 및 유지 // 모든 축을 HOME으로 유지 press_ESC(); // 핸드휠 모드에서 나가기 goto_MAIN_MENU(); 바로 가기_HOME_ALL(); 부서지다; case -2:// 더블 클릭 및 홀드 break; case -3:// 트리플 클릭 및 홀드 break; } } if (button[4].clicks !=0) { switch (button[4].clicks) { case 1:// 한 번 클릭 // TOGGLE MDI Shortcut_TOGGLE_MDI(); 부서지다; 사례 2:// 더블 클릭 break; 사례 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(); // SET Z HEIGHT break; 사례 2:// 더블 클릭 break; 사례 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(); 부서지다; 사례 2:// 더블 클릭 break; 사례 3:// 트리플 클릭 중단; case -1:// 한 번 클릭하고 길게 누르기 break; case -2:// 더블 클릭 및 홀드 break; case -3:// 트리플 클릭 및 홀드 break; } } if (button[7].clicks !=0) { switch (button[7].clicks) { case 1:// 한 번 클릭 // 그래픽 화면 다시 그리기 press_ESC(); // 핸드휠 모드에서 나가기 goto_AUTO_MENU(); 프레스_F3(); // 다시 그리기 중단; 사례 2:// 더블 클릭 break; 사례 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(); // 파일 브레이크 로드; 사례 2:// 더블 클릭 break; 사례 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) // 이후에만 전환되지 않도록 / / 1000ms의 지연 if ( millis() - aux1_delay> 1000 ) { // AUX1을 켜거나 끕니다. short_TOGGLE_AUX1(); // 지연 타이머 시작 aux1 aux1_delay =millis(); } 부서지다; 사례 2:// 더블 클릭 break; 사례 3:// 트리플 클릭 중단; case -1:// 한 번 클릭하고 길게 누르기 break; case -2:// 더블 클릭 및 홀드 break; case -3:// 트리플 클릭 및 홀드 break; } } if (button[10].clicks !=0) { switch (button[10].clicks) { case 1:// 한 번 클릭 // MIST TOGGLE(빛) 바로 가기_TOGGLE_MIST(); 부서지다; 사례 2:// 더블 클릭 break; 사례 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(); 부서지다; 사례 2:// 더블 클릭 break; 사례 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(); 부서지다; 사례 2:// 더블 클릭 break; 사례 3:// 트리플 클릭 중단; case -1:// 한 번 클릭하고 길게 누르기 break; case -2:// 더블 클릭 및 홀드 break; case -3:// 트리플 클릭 및 홀드 break; } } if (button[13].clicks !=0) { switch (button[13].clicks) { case 1:// 한 번 클릭 // X의 핸드휠 바로가기_HANDWHEEL_X(); 부서지다; case 2:// 더블클릭 // Zero X 단축키_ZERO_X(); 부서지다; 사례 3:// 트리플 클릭 중단; case -1:// 단일 클릭 및 유지 // USER MACRO 18:X축:작업 영점 위치로 이동 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에 대한 핸드휠 단축키_HANDWHEEL_Y(); 부서지다; 사례 2:// 더블 클릭 // 영점 Y 단축키_ZERO_Y(); 부서지다; 사례 3:// 트리플 클릭 중단; case -1:// 단일 클릭 및 유지 // USER MACRO 19:Y축:작업 영점 위치로 이동 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에 대한 핸드휠 단축키_HANDWHEEL_Z(); 부서지다; case 2:// 더블클릭 // Zero Z 바로가기_ZERO_Z(); 부서지다; 사례 3:// 트리플 클릭 중단; case -1:// 단일 클릭 및 유지 // USER MACRO 20:Z축-고토 MACHINE 위쪽 위치 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; 사례 2:// 더블 클릭 break; 사례 3:// 트리플 클릭 중단; case -1:// 한 번 클릭하고 길게 누르기 break; case -2:// 더블 클릭 및 홀드 break; case -3:// 트리플 클릭 및 홀드 break; } } if (button[17].clicks !=0) { switch (button[17].clicks) { case 1:// 한 번 클릭 // 핸드휠 속도 1x 단축키_HANDWHEEL_X1(); 부서지다; 사례 2:// 더블 클릭 break; 사례 3:// 트리플 클릭 중단; case -1:// 한 번 클릭하고 길게 누르기 break; case -2:// 더블 클릭 및 홀드 break; case -3:// 트리플 클릭 및 홀드 break; } } if (button[18].clicks !=0) { switch (button[18].clicks) { case 1:// 한 번 클릭 // 핸드휠 속도 10x 지름길_HANDWHEEL_X10(); 부서지다; 사례 2:// 더블 클릭 break; 사례 3:// 트리플 클릭 중단; case -1:// 한 번 클릭하고 길게 누르기 break; case -2:// 더블 클릭 및 홀드 break; case -3:// 트리플 클릭 및 홀드 break; } } if (button[19].clicks !=0) { switch (button[19].clicks) { case 1:// 한 번 클릭 // 핸드휠 속도 100x 지름길_HANDWHEEL_X100(); 부서지다; 사례 2:// 더블 클릭 break; 사례 3:// 트리플 클릭 중단; case -1:// 한 번 클릭하고 길게 누르기 break; case -2:// 더블 클릭 및 홀드 break; case -3:// 트리플 클릭 및 홀드 break; } } if (button[20].clicks !=0) { switch (button[20].clicks) { case 1:// 한 번 클릭 바로 가기_TOGGLE_MACHINE_COORDIATES(); 부서지다; 사례 2:// 더블 클릭 break; 사례 3:// 트리플 클릭 중단; case -1:// 한 번 클릭하고 길게 누르기 break; case -2:// 더블 클릭 및 홀드 break; case -3:// 트리플 클릭 및 홀드 break; } }}/* Leonardo를 HID로 사용에 대한 Aduino 웹사이트 참고 사항:키보드 기능을 사용하면 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의 정의는 다음과 같습니다. 키 16진수 값 10진수 값 KEY_LEFT_CTRL 0x80 128 KEY_LEFT_SHIFT 0x81 129 KEY_LE 130 KEY_LEFT_GUI 0x83 131 KEY_RIGHT_CTRL 0x84 132 KEY_RIGHT_SHIFT 0x85 133 KEY_RIGHT_ALT에는 0x86 134 KEY_RIGHT_GUI에는 0x87 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 196 KEY_F4 0xC5의 197 KEY_F5에는 0xC6 198 KEY_F6 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 * / 공극에는 0xC7 0xC4 press_RESET(){ Keyboard.begin(); 키보드.프레스(KEY_F1); 지연(100); Keyboard.releaseAll();}무효 press_ESC(){ Keyboard.begin(); Keyboard.press(KEY_ESC); 지연(100); Keyboard.releaseAll();}무효 press_F2(){ Keyboard.begin(); 키보드.프레스(KEY_F2); 지연(100); Keyboard.releaseAll();}무효 press_F3(){ Keyboard.begin(); Keyboard.press(KEY_F3); 지연(100); Keyboard.releaseAll();}무효 press_F4(){ Keyboard.begin(); 키보드 프레스(KEY_F4); 지연(100); Keyboard.releaseAll();}무효 press_F5(){ Keyboard.begin(); 키보드.프레스(KEY_F5); 지연(100); Keyboard.releaseAll();}무효 press_F6(){ Keyboard.begin(); 키보드 프레스(KEY_F6); 지연(100); Keyboard.releaseAll();}무효 press_F7(){ Keyboard.begin(); 키보드 프레스(KEY_F7); 지연(100); Keyboard.releaseAll();}무효 press_F8(){ Keyboard.begin(); 키보드 프레스(KEY_F8); 지연(100); Keyboard.releaseAll();}무효 press_F9(){ Keyboard.begin(); 키보드 프레스(KEY_F9); 지연(100); Keyboard.releaseAll();}무효 press_F10(){ Keyboard.begin(); 키보드 프레스(KEY_F10); 지연(100); Keyboard.releaseAll();}무효 press_F11(){ Keyboard.begin(); 키보드.프레스(KEY_F11); 지연(100); Keyboard.releaseAll();}무효 press_F12(){ Keyboard.begin(); 키보드 프레스(KEY_F12); 지연(100); Keyboard.releaseAll();} 무효 goto_MAIN_MENU(){ Keyboard.begin(); Keyboard.press(KEY_LEFT_ALT); 키보드.프레스(KEY_F1); 지연(100); Keyboard.releaseAll();} 무효 goto_HOME_MENU(){ Keyboard.begin(); Keyboard.press(KEY_LEFT_ALT); 키보드.프레스(KEY_F2); 지연(100); Keyboard.releaseAll();} 무효 goto_ZERO_MENU(){ Keyboard.begin(); Keyboard.press(KEY_LEFT_ALT); Keyboard.press(KEY_F3); 지연(100); Keyboard.releaseAll();} 무효 goto_AUTO_MENU(){ Keyboard.begin(); Keyboard.press(KEY_LEFT_ALT); 키보드 프레스(KEY_F4); 지연(100); Keyboard.releaseAll();} 무효 goto_MACHINE_IO_MENU(){ Keyboard.begin(); Keyboard.press(KEY_LEFT_ALT); 키보드 프레스(KEY_F7); 지연(100); Keyboard.releaseAll();}void goto_GRAPHICS_MENU(){ Keyboard.begin(); Keyboard.press(KEY_LEFT_ALT); 키보드 프레스(KEY_F8); 지연(100); Keyboard.releaseAll();} 무효 goto_JOG_MENU(){ Keyboard.begin(); Keyboard.press(KEY_LEFT_ALT); 키보드 프레스(KEY_F9); 지연(100); Keyboard.releaseAll();} 무효 goto_JOG_PAD(){ Keyboard.begin(); Keyboard.press(KEY_LEFT_ALT); 키보드 프레스(KEY_F10); 지연(100); Keyboard.releaseAll();} 무효 goto_USER1_MENU(){ Keyboard.begin(); Keyboard.press(KEY_LEFT_ALT); 키보드.프레스(KEY_F11); 지연(100); Keyboard.releaseAll();} 무효 goto_USER2_MENU(){ Keyboard.begin(); Keyboard.press(KEY_LEFT_ALT); 키보드 프레스(KEY_F12); 지연(100); Keyboard.releaseAll();}빠른 단축키_HOME_ALL(){ Keyboard.begin(); Keyboard.press(KEY_LEFT_CTRL); Keyboard.press('h'); 지연(100); Keyboard.releaseAll();} 단축키 무효화_ZERO_X(){ Keyboard.begin(); Keyboard.press(KEY_LEFT_CTRL); Keyboard.press('1'); 지연(100); Keyboard.releaseAll();} 무효 바로 가기_ZERO_Y(){ Keyboard.begin(); Keyboard.press(KEY_LEFT_CTRL); Keyboard.press('2'); 지연(100); Keyboard.releaseAll();} 무효 바로 가기_ZERO_Z(){ Keyboard.begin(); Keyboard.press(KEY_LEFT_CTRL); Keyboard.press('3'); 지연(100); Keyboard.releaseAll();} 단축키_HANDWHEEL_X(){ Keyboard.begin(); Keyboard.press(KEY_LEFT_CTRL); Keyboard.press(KEY_LEFT_SHIFT); Keyboard.press('x'); 지연(100); Keyboard.releaseAll();} 무효 바로 가기_HANDWHEEL_Y(){ Keyboard.begin(); Keyboard.press(KEY_LEFT_CTRL); Keyboard.press(KEY_LEFT_SHIFT); Keyboard.press('y'); 지연(100); Keyboard.releaseAll();} 단축키 무효화_HANDWHEEL_Z(){ Keyboard.begin(); Keyboard.press(KEY_LEFT_CTRL); Keyboard.press(KEY_LEFT_SHIFT); Keyboard.press('z'); 지연(100); Keyboard.releaseAll();}빠른 단축키_HANDWHEEL_X1(){ Keyboard.begin(); Keyboard.press(KEY_LEFT_CTRL); Keyboard.press('n'); 지연(100); Keyboard.releaseAll();} 단축키 무효화_HANDWHEEL_X10(){ Keyboard.begin(); Keyboard.press(KEY_LEFT_CTRL); Keyboard.press('o'); 지연(100); Keyboard.releaseAll();} 단축키 무효화_HANDWHEEL_X100(){ Keyboard.begin(); Keyboard.press(KEY_LEFT_CTRL); Keyboard.press('p'); 지연(100); Keyboard.releaseAll();} 무효 바로 가기_TOGGLE_MDI(){ Keyboard.begin(); Keyboard.press(KEY_LEFT_CTRL); 키보드 프레스(KEY_F6); 지연(100); Keyboard.releaseAll();} 무효 바로 가기_TOGGLE_MACHINE_COORDIATES(){ Keyboard.begin(); // 기계/작업 좌표 전환 Keyboard.press(KEY_LEFT_CTRL); Keyboard.press('w'); 지연(100); Keyboard.releaseAll();} 단축키 무효화_TOGGLE_AUX1(){ Keyboard.begin(); Keyboard.press(KEY_LEFT_CTRL); Keyboard.press('m'); 지연(100); Keyboard.releaseAll();} 단축키_TOGGLE_MIST(){ Keyboard.begin(); Keyboard.press(KEY_LEFT_CTRL); Keyboard.press('l'); 지연(100); Keyboard.releaseAll();}빠른 단축키_TOGGLE_FLOOD(){ Keyboard.begin(); Keyboard.press(KEY_LEFT_CTRL); Keyboard.press('k'); 지연(100); Keyboard.releaseAll();} 무효 user_MACRO_1(){ Keyboard.begin(); Keyboard.press(KEY_LEFT_ALT); Keyboard.press('1'); 지연(100); Keyboard.releaseAll();} 무효 user_MACRO_2(){ Keyboard.begin(); Keyboard.press(KEY_LEFT_ALT); Keyboard.press('2'); 지연(100); Keyboard.releaseAll();} 무효 user_MACRO_3(){ Keyboard.begin(); Keyboard.press(KEY_LEFT_ALT); Keyboard.press('3'); 지연(100); Keyboard.releaseAll();} 무효 user_MACRO_4(){ Keyboard.begin(); Keyboard.press(KEY_LEFT_ALT); Keyboard.press('4'); 지연(100); Keyboard.releaseAll();} 무효 user_MACRO_5(){ Keyboard.begin(); Keyboard.press(KEY_LEFT_ALT); Keyboard.press('5'); 지연(100); Keyboard.releaseAll();...이 파일은 잘렸습니다. 전체 내용을 보려면 다운로드하세요.

    맞춤형 부품 및 인클로저

    이것은 버튼당 가장 많은 기능을 얻는 데 필요한 가장 중요한 라이브러리입니다. clickbutton_hq5qeT4toX.zip cnc_pendant_SenmxC8UCj.zip

    회로도

    그렇게 좋은 회로도는 아니지만 일을 할 것입니다 ...

    제조공정

    1. 버튼
    2. 푸시 버튼을 사용하여 PWM으로 조명 디밍
    3. Arduino 스파이봇
    4. FlickMote
    5. 수제 TV B-Gone
    6. 마스터 시계
    7. 나를 찾기
    8. 사용자 정의 가능한 펀치 키보드 버튼을 만드는 방법
    9. 무선 펜던트는 CNC 시스템에 연결
    10. CNC 조작 패널의 RESET 버튼이란