#include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0 | U8G_I2C_OPT_NO_ACK | U8G_I2C_OPT_FAST); // Fast I2C / TWI
//Constantes associadas aos pinos do arduino
int const clockPin = 9; //ligado ao clock do 74HC595
int const latchPin = 11; //ligado ao latch do 74HC595
int const dataPin = 12; //ligado ao data do 74HC595
#define pinBotao 7
bool pinBotaoRetencao();
int i = 0;
void setup() {
//definindo os pinos como de saída
pinMode(clockPin, OUTPUT);
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(pinBotao, INPUT);
u8g.setColorIndex(1);
}
void loop() {
if (pinBotaoRetencao()) {
while (digitalRead(pinBotao) == HIGH) {
// Faz nada enquanto o botão estiver pressionado
}
}
// Se o pushbutton não estiver sendo pressionado, conta
else {
// Incrementa o contador
i++;
// Se o contador atingir o valor máximo, retorna a zero
if (i == 256) {
i = 0;
}
shiftOut(dataPin, clockPin, MSBFIRST, i);
digitalWrite(latchPin, HIGH);
digitalWrite(latchPin, LOW);
u8g.firstPage();
do {
u8g.setPrintPos(0, 15);
u8g.setFont(u8g_font_ncenB10);
u8g.print("BIN: ");
u8g.print(i, BIN);
u8g.setPrintPos(0, 35);
u8g.print("HEX: ");
u8g.print(i, HEX);
u8g.setPrintPos(0, 55);
u8g.print("DEC: ");
u8g.print(i, DEC);
} while ( u8g.nextPage() ); // Fim do procedimento de exibição
delay(200);
}
}
bool pinBotaoRetencao()
{
#define tempoDebounce 80 //(tempo para eliminar o efeito Bounce EM MILISEGUNDOS)
bool estadoBotao;
static bool estadoBotaoAnt;
static bool estadoRet = true;
static unsigned long delayBotao = 0;
if ( (millis() - delayBotao) > tempoDebounce ) {
estadoBotao = digitalRead(pinBotao);
if ( estadoBotao && (estadoBotao != estadoBotaoAnt) ) {
estadoRet = !estadoRet;
delayBotao = millis();
}
estadoBotaoAnt = estadoBotao;
}
return estadoRet;
}