묻고 답하고
제목을 저렇게밖에 못쓰겠네요.. 죄송합니다
아두이노 매트릭스 키보드를 현재 만들고 있는 중인데 디지털핀이 15개가 필요하지만 아두이노 마이크로는 디지털핀이 최대 13개까지밖에 지원하지 않아 저항으로 한 핀에서 2핀처럼 사용할 수 있도록 하는 것을 보고 따라하고 있습니다.
참고글 : http://www.kbdmania.net/xe/tipandtech/8794285
그래서 Esc와 F1, F3와 F4이 각각 한 개의 핀에 서로 다른 저항과 함께 연결하여 ESC와 F3를 누르면 아날로그값에서 923정도의 값이, F1과 F4을 누르면 969정도의 값이 나오길래 아래 코드처럼 입력하니 ESC나 F1 혹은 F3와 F4 두 개를 같이 누를 때 빼곤 한 개씩 눌렀을 때 감지를 못합니다.. 어떻게 해야하나요..ㅠㅠ
#include <Keyboard.h> int checkA0, checkA1, checkA2, checkA3, checkA4, checkA5; void setup() { Serial.begin(9600); Keyboard.begin(); pinMode(A0, INPUT); pinMode(A1, INPUT); pinMode(A2, INPUT); pinMode(A3, INPUT); pinMode(A4, INPUT); pinMode(A5, INPUT); pinMode(0, OUTPUT); pinMode(1, OUTPUT); pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(11, OUTPUT); pinMode(12, OUTPUT); pinMode(13, OUTPUT); } void loop() { int value0, value1, value2, value3; int a2, a3, a4, a5, a6, a7; int i = 0; for (i=0; i<=13; i++) digitalWrite(i, LOW); if (analogRead(A0) <= 900) checkA0 = 2; else { if (checkA0) checkA0--;} if (analogRead(A1) <= 900) checkA1 = 2; else { if (checkA1) checkA1--;} if (analogRead(A2) <= 900) checkA2 = 2; else { if (checkA2) checkA2--;} if (analogRead(A3) <= 900) checkA3 = 2; else { if (checkA3) checkA3--;} if (analogRead(A4) <= 900) checkA4 = 2; else { if (checkA4) checkA4--;} if (analogRead(A5) <= 900) checkA5 = 2; else { if (checkA5) checkA5--;} value0 = analogRead(A0); value1 = analogRead(A1); value2 = analogRead(A2); value3 = analogRead(A3); for (i=0; i<=13; i++) digitalWrite(i, HIGH); if(checkA0){ digitalWrite(0, LOW); if(analogRead(A0) >= 900) Keyboard.release(KEY_HOME); else Keyboard.press(KEY_HOME); digitalWrite(0, HIGH); digitalWrite(1, LOW); if(analogRead(A0) >= 900) Keyboard.release(KEY_PAGE_UP); else Keyboard.press(KEY_PAGE_UP); digitalWrite(1, HIGH); digitalWrite(2, LOW); if(analogRead(A0) >= 900) Keyboard.release(206); else Keyboard.press(206); digitalWrite(2, HIGH);
//3번핀부터 10번핀까지는 윗 코드와 똑같으니 생략
digitalWrite(11, LOW); if(analogRead(A0) <= 980 && analogRead(A0) >= 940) {Keyboard.release(KEY_F3); Keyboard.press(KEY_F4);} if(analogRead(A0) <= 939 && analogRead(A0) >= 900) {Keyboard.release(KEY_F4); Keyboard.press(KEY_F3);} if(analogRead(A0) <= 899){ Keyboard.press(KEY_F4); Keyboard.press(KEY_F3);} if(analogRead(A0) >= 981){ Keyboard.release(KEY_F3);Keyboard.release(KEY_F4);} digitalWrite(11, HIGH); digitalWrite(12, LOW); if(analogRead(A0) <= 980 && analogRead(A0) >= 940) {Keyboard.release(KEY_ESC); Keyboard.press(KEY_F1);} if(analogRead(A0) <= 939 && analogRead(A0) >= 900) {Keyboard.release(KEY_F1); Keyboard.press(KEY_ESC);} if(analogRead(A0) <= 899){ Keyboard.press(KEY_F1); Keyboard.press(KEY_ESC);} if(analogRead(A0) >= 981){ Keyboard.release(KEY_ESC);Keyboard.release(KEY_F1);} digitalWrite(12, HIGH); digitalWrite(13, LOW); if(analogRead(A0) >= 900) Keyboard.release(KEY_F2); else Keyboard.press(KEY_F2); digitalWrite(13, HIGH); } if(checkA1){ } if(checkA2){ } if(checkA3){ } Serial.println(value0); Serial.println(value1); Serial.println(value2); Serial.println(value3); Serial.println(); }
작성된지 6개월이 지난 글에는 새 코멘트를 달 수 없습니다.