/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-keypad-3x4 */#include <DIYables_Keypad.h> // DIYables_Keypad libraryconstint ROW_NUM = 4; //four rowsconstint COLUMN_NUM = 3; //three columnschar keys[ROW_NUM][COLUMN_NUM] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'*','0','#'}};byte pin_rows[ROW_NUM] = {9, 8, 7, 6}; //connect to the row pinouts of the keypadbyte pin_column[COLUMN_NUM] = {5, 4, 3}; //connect to the column pinouts of the keypadDIYables_Keypadkeypad = DIYables_Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM );constString password = "1234"; // change your password hereString input_password;voidsetup(){Serial.begin(9600);Serial.println("Keypad 3x4 password"); input_password.reserve(32); // maximum input characters is 33, change if needed}voidloop(){char key = keypad.getKey();if (key){Serial.println(key);if(key == '*') { input_password = ""; // clear input password } elseif(key == '#') {if(password == input_password) {Serial.println("password is correct");// DO YOUR WORK HERE } else {Serial.println("password is incorrect, try again"); } input_password = ""; // clear input password } else { input_password += key; // append new character to input password string } }}
※ 주의:
업로드하기 전에 password 변수를 원하는 비밀번호로 변경하세요.
Bridge: Linux + MCU
이 섹션에서는 Linux 측에서 키패드 누름을 원격으로 읽을 수 있도록 Arduino UNO Q의 두 프로세서를 모두 프로그래밍하는 방법을 보여줍니다:
3x4 키패드는 MCU (STM32)에 연결됩니다 — MCU는 loop()에서 keypad.getKey()를 통해 이를 폴링합니다
MPU는 키패드 핀을 직접 읽을 수 없습니다 — Bridge.call()을 통해 MCU에서 마지막으로 눌린 키를 요청해야 합니다
MPU는 Wi-Fi를 가지고 있습니다 — 전체 Debian Linux를 실행하여 키 누름에 반응하고 인터넷을 통해 경고를 보낼 수 있습니다
Arduino_RouterBridge는 두 프로세서 간 RPC 통신을 활성화합니다
⚠️ /dev/ttyHS1 (Linux)과 Serial1 (MCU)은 라우터에서 예약됨 — 사용자 코드에서 절대 열지 마세요
요약하면: MCU가 키패드를 폴링합니다 → MPU가 Bridge를 통해 마지막 키를 읽습니다 → MPU가 인터넷을 통해 어디에서나 키 누름에 반응할 수 있습니다.
참고: Bridge 스케치에서 keypad.getKey()는 Arduino loop() 내부에서 호출되어 키 누름을 지속적으로 감지합니다 — 이는 필수이며 Bridge 통신을 방해하지 않습니다.
MCU 코드 (Bridge)
/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-keypad-3x4 */#include <DIYables_Keypad.h>#include"Arduino_RouterBridge.h"constint ROW_NUM = 4;constint COLUMN_NUM = 3;char keys[ROW_NUM][COLUMN_NUM] = { { '1', '2', '3' }, { '4', '5', '6' }, { '7', '8', '9' }, { '*', '0', '#' }};byte pin_rows[ROW_NUM] = { 9, 8, 7, 6 };byte pin_column[COLUMN_NUM] = { 5, 4, 3 };DIYables_Keypadkeypad = DIYables_Keypad(makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM);char last_key = 0;String get_key(String arg) {char key = last_key; last_key = 0; // clear after readingif (key == 0)return"none";returnString(key);}String get_status(String arg) {if (last_key == 0)return"No key pressed";return"Last key: " + String(last_key);}voidsetup() {Bridge.begin(); Monitor.begin();Bridge.provide("get_key", get_key);Bridge.provide("get_status", get_status); Monitor.println("Arduino UNO Q Keypad 3x4 Bridge ready");}voidloop() {char key = keypad.getKey();if (key) { last_key = key; Monitor.println("Key pressed: " + String(key)); }}
Python 코드 (Bridge)
/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-keypad-3x4 */from arduino.app_utils import *import timedef loop(): result = Bridge.call("get_key")if result != "none":print(f"Key pressed: {result}")else:print("No key pressed") time.sleep(0.2)App.run(user_loop=loop)
빠른 단계
연결: 배선 다이어그램에 표시된 대로 3x4 키패드를 Arduino UNO Q에 연결합니다.
Arduino App Lab 열기: Arduino App Lab을 시작하고 보드가 감지될 때까지 기다립니다.
새 App 생성:Create New App을 클릭하고 Keypad3x4Bridge라고 이름 지은 후 Create를 클릭합니다.
MCU 스케치 붙여넣기: 위의 MCU Bridge 코드를 복사하여 sketch/sketch.ino에 붙여넣습니다.
Python 코드 붙여넣기: 위의 Python Bridge 코드를 복사하여 App의 Python 파일에 붙여넣습니다.
업로드: Arduino App Lab에서 Run 버튼을 클릭합니다.
키패드의 키를 누르고 Python 콘솔을 확인합니다.
App Lab 콘솔 출력
DIYables_Apps
Stop
sketch.ino
1#include"Arduino_RouterBridge.h"
Serial Monitor
Python
Message (Enter to send a message to "Newbiely" on usb(2820070321))