Vídeo:
Código-fonte:
#define NUM_PINS 4 const int pins[] = {2,3,4,5}; void init_pins(){ for (int i = 0; i< NUM_PINS; i++) { pinMode(pins[i], INPUT_PULLUP); digitalWrite(pins[i], HIGH); } } byte readCharlieplexButons(int pin1, int pin2){ init_pins(); pinMode(pin1, OUTPUT); digitalWrite(pin1, LOW); return !digitalRead(pin2); } int getButton(){ byte index_button = 0; for (int i=0; i<NUM_PINS; i++) { for (int j=i+1; j<NUM_PINS; j++) { if (i!=j) { if (readCharlieplexButons(pins[j], pins[i])) { return index_button; } index_button++; if (readCharlieplexButons(pins[i], pins[j])) { return index_button; } index_button++; } } } return -1; //-1 --> nenhum botão pressionado } int getButtonOnce(){ static int lastVal = -1; static unsigned long m = 0; int val = getButton(); if (lastVal != val && millis() > (m+100) ) { //M+100 -->DEBOUNCING 100ms lastVal = val; m = millis(); return lastVal; } return -1; } void setup() { init_pins(); Serial.begin(9600); } void loop() { int button = getButtonOnce(); if ( button >=0){ Serial.println(button); } delay(10); //necessário apenas no simulador. }
Nesse esquema eu tenho 12 botões? Se eu apertar vai sair números dos botões?
ResponderExcluirsim, conforme você pode ver no final do vídeo. Caso queira mais botões, é possível ir aumentando a quantidade de pinos. No caso se aumentar mais um pino, você poderá ter mais 8 botões.
ExcluirEsse Fabiano Arndt é fera . Valeu pela postagem
ResponderExcluir