문의하기
저희에게 편지를 보내주시면 기꺼이 조언해 드리겠습니다.
질문이 있거나 담당자와 직접 통화하고 싶으신가요?
By 베드로
Arduino로 여러 개의 버튼을 제어하는 방법을 찾고 있다면 버튼 매트릭스가 바로 필요할 수 있습니다. 버튼 매트릭스를 사용하면 여러 버튼을 Arduino의 단일 핀 세트에 연결하여 다른 용도로 사용할 수 있도록 귀중한 핀을 절약할 수 있습니다. 가장 일반적인 버튼 매트릭스 구성 중 하나는 4×4 매트릭스로, Arduino에서 단 16개의 핀을 사용하여 최대 8개의 버튼을 연결할 수 있습니다.

Arduino에서 4×4 버튼 매트릭스를 사용하려면 매트릭스를 Arduino의 디지털 핀에 연결하고 라이브러리를 사용하여 버튼 누름을 읽어야 합니다. Arduino IDE에 포함된 키패드 라이브러리를 포함하여 이 목적으로 사용할 수 있는 여러 라이브러리가 있습니다. 매트릭스를 연결하고 라이브러리를 설치한 후에는 라이브러리의 기능을 사용하여 어떤 버튼을 눌렀는지 감지할 수 있습니다.
Arduino에서 4×4 버튼 매트릭스를 사용하면 프로젝트를 제어할 수 있는 다양한 가능성이 열립니다. 게임 컨트롤러, 악기 또는 맞춤형 입력 장치를 구축하는 경우 버튼 매트릭스를 사용하면 Arduino의 귀중한 핀을 절약하고 회로 설계를 단순화할 수 있습니다. 적절한 라이브러리와 약간의 프로그래밍을 통해 다양하고 강력한 입력 시스템을 쉽게 추가할 수 있습니다. 아두이노 프로젝트.

버튼 매트릭스는 행과 열로 배열된 버튼 그리드입니다. 4×4 버튼 매트릭스는 다양한 프로젝트에서 Arduino 마이크로컨트롤러와 함께 사용할 수 있는 일반적인 구성입니다. 효과적인 시스템을 설계하고 구현하려면 버튼 매트릭스의 작동 방식을 이해하는 것이 필수적입니다.
4×4 버튼 매트릭스는 4×4 그리드에 배열된 XNUMX개의 버튼으로 구성됩니다. 행렬에는 XNUMX개의 행과 XNUMX개의 열이 있습니다. 각 버튼은 하나의 행과 하나의 열의 고유한 조합으로 연결됩니다. 행과 열은 마이크로컨트롤러의 디지털 입력/출력 핀에 연결됩니다.
The 영국 우편번호 매트릭스 레이아웃과 디자인은 각 버튼이 고유하게 식별되도록 하는 데 중요합니다. 행과 열은 두 개의 버튼이 동일한 행과 열 조합을 공유하지 않도록 배열됩니다. 레이아웃은 매트릭스를 마이크로컨트롤러에 연결하는 데 사용되는 핀 수를 최소화하도록 최적화할 수 있습니다.
버튼 매트릭스 작동은 스캔 원리를 기반으로 합니다. 마이크로컨트롤러는 매트릭스의 행과 열을 스캔하여 어떤 버튼이 눌렸는지 감지합니다. 스캐닝 프로세스에는 각 행의 디지털 출력 핀을 HIGH로 설정하고 열의 디지털 입력 핀을 읽는 작업이 포함됩니다. 버튼을 누르면 해당 행과 열이 단락되고 마이크로컨트롤러는 열의 디지털 입력 핀에서 로직 LOW를 감지합니다.
스캐닝 프로세스는 각 행에 대해 반복되며 마이크로 컨트롤러는 논리 LOW를 생성하는 행과 열의 조합을 기반으로 어떤 버튼이 눌러졌는지 감지합니다. 그런 다음 마이크로 컨트롤러는 누른 버튼에 따라 적절한 코드를 실행할 수 있습니다.
결론적으로 효과적인 시스템을 설계하고 구현하기 위해서는 4×4 버튼 매트릭스의 레이아웃과 동작원리를 이해하는 것이 필수적이다. 스캐닝 원리를 사용하여 마이크로컨트롤러는 어떤 버튼이 눌러졌는지 감지하고 적절한 코드를 실행할 수 있습니다.

4×4 버튼 매트릭스를 Arduino와 통합하기 전에 다음 구성 요소를 수집해야 합니다.
모든 구성 요소가 준비되면 4×4 버튼 매트릭스를 Arduino 보드에 연결할 수 있습니다. 단계별 가이드는 다음과 같습니다.
#include <Keypad.h>
const byte ROWS = 4; // Four rows
const byte COLS = 4; // Four columns
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {2, 3, 4, 5}; // Connect to the row pinouts of the keypad
byte colPins[COLS] = {6, 7, 8, 9}; // Connect to the column pinouts of the keypad
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
void setup() {
Serial.begin(9600);
}
void loop() {
char key = keypad.getKey();
if (key) {
Serial.println(key);
}
}
그게 다야! 4×4 버튼 매트릭스를 Arduino와 성공적으로 통합했습니다. 이제 키패드를 사용하여 데이터를 입력하고 Arduino 프로젝트를 제어할 수 있습니다.
버튼 매트릭스를 위한 Arduino 프로그래밍을 시작하기 전에 Arduino IDE를 설정해야 합니다. 영국 우편번호 Arduino IDE는 Arduino 보드에 코드를 작성하고 업로드할 수 있는 소프트웨어 플랫폼입니다. Arduino IDE는 다음에서 다운로드할 수 있습니다. 아두이노 공식 홈페이지.
Arduino IDE를 다운로드하여 설치한 후에는 올바른 보드와 포트를 선택해야 합니다. 이렇게 하려면 다음으로 이동하세요. Tools 메뉴를 선택 Board 그런 다음 Arduino 보드를 선택하십시오. 다음으로 이동 Tools 메뉴를 다시 선택하고 Port 그런 다음 Arduino 보드가 연결된 포트를 선택하십시오.
버튼 매트릭스용 Arduino를 프로그래밍하려면 매트릭스를 스캔하고 버튼을 눌렀을 때를 감지하는 코드를 작성해야 합니다. 당신은 사용할 수 있습니다 Keypad 이 프로세스를 단순화하는 라이브러리입니다. 그만큼 Keypad 라이브러리를 사용하면 버튼 매트릭스의 크기와 레이아웃을 정의할 수 있으며 매트릭스를 스캔하고 버튼 누름을 감지하는 기능을 제공합니다.
다음은 4×4 버튼 매트릭스를 스캔하는 예제 코드 조각입니다.
#include <Keypad.h>
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {5, 4, 3, 2}; //connect to the column pinouts of the keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup(){
Serial.begin(9600);
}
void loop(){
char key = keypad.getKey();
if (key != NO_KEY){
Serial.println(key);
}
}
이 예에서는 4×4 버튼 행렬을 정의하고 행렬의 행과 열에 대한 핀 연결을 지정합니다. 그런 다음 Keypad 객체를 만들고 매트릭스 레이아웃과 핀 연결을 전달합니다. 마지막으로, 우리는 getKey() 매트릭스를 스캔하고 버튼 누름을 감지하는 기능입니다.
버튼 행렬의 일반적인 문제 중 하나는 버튼을 누르거나 놓을 때 버튼을 여러 번 누를 수 있다는 것입니다. 이를 "바운싱"이라고 하며 버튼의 물리적 특성이나 매트릭스의 전기적 특성으로 인해 발생할 수 있습니다.
바운싱을 방지하려면 "디바운싱"이라는 기술을 사용할 수 있습니다. 디바운싱에는 전기 신호가 안정화될 수 있도록 버튼을 누르는 사이에 지연을 추가하는 작업이 포함됩니다. 당신은 사용할 수 있습니다 Bounce2 이 프로세스를 단순화하는 라이브러리입니다. 그만큼 Bounce2 라이브러리는 버튼 누름 및 해제를 디바운싱하는 기능을 제공합니다.
다음은 Bounce2 버튼 누름을 디바운싱하는 라이브러리:
#include <Keypad.h>
#include <Bounce2.h>
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {5, 4, 3, 2}; //connect to the column pinouts of the keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
Bounce debouncer = Bounce();
void setup(){
Serial.begin(9600);
debouncer.attach(0, INPUT_PULLUP);
debouncer.interval(25);
}
void loop(){
char key = keypad.getKey();
if (key != NO_KEY){
debouncer.update();
if (debouncer.fell()){
Serial.println(key);
}
}
}
이 예에서 우리는 Bounce2 버튼 누름을 디바운싱하는 라이브러리. 우리는 Bounce 이물질을 제거하고 버튼이 연결된 핀에 부착하세요. 그런 다음 우리는 fell() 버튼을 눌렀을 때를 감지하고 신호를 디바운싱하는 기능 interval() 기능.
질문이 있거나 담당자와 직접 통화하고 싶으신가요?