E possível ligar botões e resistores em uma unica entrada analógica do Arduíno de modo ser possível que a sketch detecte qual tecla foi apertada. A montagem abaixo tem 4 teclas e utilizou resistores (de 10K, 1K, 4k7, 47k e 100k ( todos de 1/8 w) .
Montagem:
Sketch: A sketch abaixo identifica qual tecla foi apertada e se ficou apertada por longo tempo.
#define ADpin A1
void setup() {
Serial.begin(9600);
Serial.println("Hello, world! keyboard is ON.");
}
void loop() {
int key = inkey();
if(key>0) Serial.println(key);
delay(1);
}
int inkey()
{
int s = analogRead(ADpin);
if ( s> 70 && s < 110) return debounce(1,70,110);
if ( s> 320 && s < 340) return debounce(2, 320,340);
if ( s> 820 && s < 870) return debounce(3, 820,870);
if ( s> 900 && s < 960) return debounce(4, 900, 960);
return 0;
}
int debounce(int key, int a, int b){
long timestart = millis();
delay(20);
while(analogRead(ADpin) > a && analogRead(ADpin) < b);
long timeend = millis();
if(timeend - timestart > 1000)
return key*1000;
else
return key;
}
Resultado: No monitor vemos a teclas que foram apertadas. os valores maiores que 1000 correspondem a teclas que ficaram apertadas por muito tempo (tempo maior que 1 s).