제목을 저렇게밖에 못쓰겠네요.. 죄송합니다
아두이노 매트릭스 키보드를 현재 만들고 있는 중인데 디지털핀이 15개가 필요하지만 아두이노 마이크로는 디지털핀이 최대 13개까지밖에 지원하지 않아 저항으로 한 핀에서 2핀처럼 사용할 수 있도록 하는 것을 보고 따라하고 있습니다.
참고글 : https://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);
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);