Você está na página 1de 10

1 void setup() {

2 pinMode(13, OUTPUT); // Configura o pino 13 (led interno) como saída;


3 pinMode(8, INPUT_PULLUP); // Configura pino 8 como entrada e habilita pull up interno;
4 }
5 void loop() {
6 if (digitalRead(8) == LOW) { // Botão Pressionado;
7 digitalWrite(13, HIGH); // Liga led.
8 }
9 else { // Botão Não Pressionado
10 digitalWrite(13, LOW); // Desliga led.
11 }
12 }
1 bool last; // Guarda o último estado do botão;
2 uint32_t print_timer; // Timer para a impressão na porta serial;
3 uint8_t counter = 0; // Conta o número de mudança de estados no botão;
4
5 void setup() {
6 Serial.begin(9600);
7 pinMode(8, INPUT_PULLUP); // Configura pino 8 como entrada e habilita pull up interno;
8 last = digitalRead(8);
9 }
10
11 void loop() {
12 bool now = digitalRead(8); // Lê o estado atual do botão;
13 if (now != last) { // Checa se houve uma mudança de estado;
14 ++counter;
15 last = now; // Atualiza o ultimo estado;
16 }
17
18 if (millis() - print_timer > 1000) { // Imprime a quantidade de mudanças a cada segundo;
19 Serial.println(counter);
20 print_timer = millis();
21 }
22 }
1 bool last; // Guarda o último estado do botão
2 uint32_t print_timer;
3 uint8_t counter = 0;
4
5 void setup() {
6 Serial.begin(9600);
7 pinMode(8, INPUT_PULLUP); // Configura pino 8 como entrada e habilita pull up interno;
8 last = digitalRead(8);
9 }
10
11 void loop() {
12 bool now = digitalRead(8); // Lê o estado atual do botão;
13 if (now != last) { // Checa se houve uma mudança de estado;
14 delay(10); // Espera até que a trepidação pare;
15 if (now == digitalRead(8)) { // Checa se a mudança ainda persiste;
16 ++counter;
17 last = now; // Atualiza o ultimo estado;
18 }
19 }
20
21 if (millis() - print_timer > 1000) {
22 Serial.println(counter); // Imprime um ponto para indicar a mudança;
23 print_timer = millis();
24 }
25 }

1 bool stable; // Guarda o último estado estável do botão;


2 bool unstable; // Guarda o último estado instável do botão;
3 uint32_t bounce_timer;
4 uint8_t counter = 0;
5
6 bool changed() {
7 bool now = digitalRead(8); // Lê o estado atual do botão;
8 if (unstable != now) { // Checa se houve mudança;
9 bounce_timer = millis(); // Atualiza timer;
10 unstable = now; // Atualiza estado instável;
11 }
12 else if (millis() - bounce_timer > 10) { // Checa o tempo de trepidação acabou;
13 if (stable != now) { // Checa se a mudança ainda persiste;
14 stable = now; // Atualiza estado estável;
15 return 1;
16 }
17 }
18 return 0;
19 }
20
21 void setup() {
22 Serial.begin(9600); // Configura comunicação serial a uma taxa de 9600 bauds.
23 pinMode(8, INPUT_PULLUP); // Configura pino 8 como entrada e habilita pull up interno;
24 stable = digitalRead(8);
25 }
26
27 void loop() {
28 if (changed()) {
29 ++counter;
30 Serial.println(counter);
31 }
32 // Outras tarefas;
33 }

1 #include <Bounce2.h>
2
3 Bounce debouncer = Bounce();
4
5 void setup() {
6 pinMode(8, INPUT_PULLUP); // Configura pino 8 como entrada e habilita pull up interno;
7 debouncer.attach(8); // Informa que o tratamento de debouce será feito no pino 8;
8 debouncer.interval(10); // Seta o intervalo de trepidação;
9 }
10
11 void loop() {
12 debouncer.update(); // Executa o algorítimo de tratamento;
13
14 int value = debouncer.read(); // Lê o valor tratado do botão;
15
16 if (value == HIGH) {
17 Serial.println("Botao Nao Pressionado!");
18 } else {
19 Serial.println("Botao Pressionado!");
20 }
21 }
Allan Mota
Estudante de Engenharia Elétrica da UFES e Fundador do Vida de Silício. Sonhador com uma
única pretensão, fazer a diferença.