아두이노 키패드와 ARM 프로세서의 연결 질문 드립니다.

아두이노 키패드와 ARM 프로세서의 연결 질문 드립니다.

작성일 2021.08.31댓글 1건
    게시물 수정 , 삭제는 로그인 필요



키패드 명칭은 '아두이노 3X4 12키 하드 매트릭스 키패드' 입니다.
이 키패드를 ARM프로세서와 연결하여
키패드가 눌렸을 때 특정한 동작을 수행시키도록 만들고 싶습니다. 






숫자 1번 키가 눌렸을 때의 값을 받고 싶다면

highflag = HAL_GPIO_ReadPin(GPIOD, GPIO_PIN_7);
lowflag = HAL_GPIO_ReadPin(GPIOD, GPIO_PIN_3);
if(highflag == 1 && lowflag == 0) {
// 수행시키고 싶은 동작
}

이와 같이 코드를 작성하면 되는건가요? 

저 코드르 실행 시키면 if 조건문 여부와 상관 없이 //수행시키고 싶은 동작 이 동작 됩니다. 

왜그런건가요 ㅠ 알려주세요 ㅠㅠ !!



profile_image 익명 작성일 -

아두이노에 기본적으로 제공되는 키패드 라이브러리를 이용해도 되겠지만.......

좀 더 근본적으로 가르쳐드리는게 나을듯 하네요.

저 키패드는 아두이노가 아니라도 다른 여러가지 MCU에서 이용이 가능합니다.

그냥 모듈화되어 나와 실습하기 편할 뿐이죠.

1.

행(가로)을 결정하는 포트는 출력모드로 설정,

열(세로)을 결정하는 포트는 입력모드-내부 풀업저항 사용으로 설정을 합니다.

그리고 행에 연결된 포트를 HIGH출력으로 하도록 하죠.(HIGH로 출력하는 것은 임의)

2. for문 반복문을 만듭니다. 4행 3열이므로 4번, 3번을 반복하는 구조가 되죠.

3. for문 반복문으로 다음과 같은 작업을 합니다.

3-1. 1행 출력을 LOW로 바꿉니다.

3-2. for문 반복으로 3개의 열의 입력 상태를 확인.

3-3. 열 입력 상태가 스위치가 눌리지 않은 상태면 내부 풀업저항에 의해 HIGH,

눌린 상태면 1행의 출력에 의해 LOW가 입력됨.

4. 3번의 항목을 행만 바꿔 반복함.

5. 결과적으로

1열

2열

3열

1행

HIGH

HIGH

HIGH

2행

HIGH

LOW

HIGH

3행

HIGH

HIGH

HIGH

4행

HIGH

HIGH

HIGH

이런 결과가 나오게 되고,

LOW가 눌린 2행 2열, 5번이 눌린 상태로 확인됨.

대략 이러한 구조입니다.

이걸 아두이노 코드로 코드화 하면

대충 다음과 같게 되죠.

/////////////// //실제 컴파일은 하지 않은 예시입니다. 오류 있을 수 있음. /////////////// //키패드의 문자 배치를 선언 const char num_pad[4][3] = { {'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}, {'*', '0', '#'}}; //키패드 연결된 핀을 선언. 반복문 사용에 매우 유용함. const byte ROW_pin[4] = {2, 3, 4, 5}; const byte COL_pin[3] = {7, 8, 9}; //행/열 핀을 출력/입력모드 설정. for(byte i=0; i<4; i++) pinMode(ROW_pin, OUTPUT); for(byte i=0; i<3; i++) pinMode(COL_pin, INPUT_PULLUP); //읽기 함수 선언. char read_Numpad(){ for(byte i=0; i<4; i++){ //4개의 행이므로 4번 반복 for(byte j=0; <3; j++){ //3개의 열이므로 3번 반복 byte k = digitalRead(COL_pin[j]); //각각의 입력되는 상태를 확인. if(k==0) return num_pad[i][j]; //LOW가 입력된게 확인되면 //(스위치가 눌린게 확인되면) 해당 위치에 맞는 문자열을 반환. } } }

아두이노의 Keypad.h 라이브러리는

이러한 구조를 가지고 있기도 하지만 가장 중요한건 반복을 없앴다는 것입니다.

위 코드는 저게 반복되면 스위치가 눌린 시간동안 무수히 많은 횟수를 반복실행하게 되죠.

하지만 Keypad라이브러리를 쓰면 이런 반복이 없더라구요.

(버튼이 눌린 한번만 적용되도록 코드가 짜여진 모양입니다.)

일전에 키패드를 이용하는 다른 답변 달아뒀던 링크도 남겨드립니다.

ARM기반이라도 아두이노는 큰 차이가 없고,

기본 원리는 같으므로 충분히 이해가 가실 것으로 생각됩니다.

아두이노, 마이크로 프로세서 배우면

프로그래밍을 배우고 아두이노, 마이크로 프로세서를 잘... 소프트웨어를 연결하는 네트워크 관련으로도 공부를 하는 것을 추천드립니다. 진로의 방향에 대해서 준비 방법에...

마이크로프로세서 질문

안녕하세요 마이크로프로세서의 대해 잘 몰라서 질문드립니다. 1. 마이크로프로세서 종류중 아두이노나 avr등... cortex,ARM은 중형차에 해당합니다. PLC는 공장 자동화에...

아두이노가 DFU 모드에 들어가지...

... 아두이노를 사용하고 있는 사람입니다. 모델은... 해결방법이 있다면 답변 부탁드립니다. 감사합니다. 2가지... 프로세서를 사용한 경우 )는 뒷면의 HWB핀을 서로 연결해...