domingo, 2 de julho de 2017

Ligando várias teclas em uma unica entrada


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).