//Bibliotecas display OLED
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
//Bibliotecas teclado de membrana
#include <Keypad.h>
//Endereçamento Display
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
#define SCREEN_ADDRESS 0x3c
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define LOGO_HEIGHT 16
#define LOGO_WIDTH 16
int posicaoNumero = 30;
int minutos = 5;
int segundos = 60;
#define botaoPara 2
#define led 13
const uint8_t ROWS = 1;
const uint8_t COLS = 4;
char keys[ROWS][COLS] = {
{ '1', '2', '3', 'A' },
//{ '4', '5', '6', 'B' },
//{ '7', '8', '9', 'C' },
//{ '*', '0', '#', 'D' }
};
uint8_t colPins[COLS] = { 10, 9, 8, 7 }; // Pinos conectados a C1, C2, C3, C4
uint8_t rowPins[ROWS] = { 11}; // Pinos conectados a R1, R2, R3, R4
//uint8_t colPins[COLS] = { D5, D6, D7, D8 }; // Pinos conectados a C1, C2, C3, C4
//uint8_t rowPins[ROWS] = { D3}; // Pinos conectados a R1, R2, R3, R4
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
void restart() {
display.clearDisplay();
// 0
display.setTextSize(4);
display.setTextColor(SSD1306_WHITE);
display.setCursor(6,15);
display.println("0");
// 5
display.setCursor (30,15);
display.println(5);
// :
display.setCursor(50,15);
display.println(":");
display.display();
//00
display.setCursor(70,15);
display.println("00");
display.display();
}
void setup() {
Serial.begin(9600);
pinMode(botaoPara, INPUT_PULLUP);
pinMode(led, OUTPUT);
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
display.display();
delay(1000);
display.clearDisplay();
INICIO();
}
void loop() {
char key = keypad.getKey();
if(!digitalRead(botaoPara)){
INICIO();
}
// Adicionar 1 minutos
if(key == '1'){
minutos = minutos + 1;
if(minutos > 9){
posicaoNumero = 10;
}
display.clearDisplay();
display.setTextSize(4);
display.setTextColor(SSD1306_WHITE);
display.setCursor (posicaoNumero,15);
display.println(minutos);
// :
display.setCursor(50,15);
display.println(":");
display.display();
//00
display.setCursor(70,15);
display.println("00");
display.display();
}
// Adicionar 2 minutos
if(key == '2'){
minutos = minutos + 2;
if(minutos > 9){
posicaoNumero =10;
}
display.clearDisplay();
display.setTextSize(4);
display.setTextColor(SSD1306_WHITE);
display.setCursor (posicaoNumero,15);
display.println(minutos);
// :
display.setCursor(50,15);
display.println(":");
display.display();
//00
display.setCursor(70,15);
display.println("00");
display.display();
}
// Adicionar 3 minutos
if(key == '3'){
minutos = minutos + 3;
if(minutos > 9){
posicaoNumero = 10;
}
display.clearDisplay();
display.setTextSize(4);
display.setTextColor(SSD1306_WHITE);
display.setCursor (posicaoNumero,15);
display.println(minutos);
// 0
// :
display.setCursor(50,15);
display.println(":");
display.display();
//00
display.setCursor(70,15);
display.println("00");
display.display();
}
if(key == 'A'){
contaTempo(minutos);
}
if (key != NO_KEY) {
Serial.println(key);
display.display();
//testdrawstyles();
}
}
void testdrawstyles(void) {
display.clearDisplay();
display.setTextSize(1); // Normal 1:1 pixel scale
display.setTextColor(SSD1306_WHITE); // Draw white text
display.setCursor(0,0); // Start at top-left corner
display.println(F("Hello, world!"));
display.setTextColor(SSD1306_BLACK, SSD1306_WHITE); // Draw 'inverse' text
display.println(3.141592);
display.setTextSize(2); // Draw 2X-scale text
display.setTextColor(SSD1306_WHITE);
display.print(F("0x")); display.println(0xDEADBEEF, HEX);
display.display();
delay(2000);
}
void contaTempo (int minuto){
for(int i = (minuto - 1); i >= 0; i--){
digitalWrite(led, HIGH);
if(minutos >= 10){
posicaoNumero = 10;
}
if(i < 10){
posicaoNumero = 30;
}
display.clearDisplay();
display.setTextSize(4);
display.setTextColor(SSD1306_WHITE);
display.setCursor (posicaoNumero,15);
display.println(i);
// :
display.setCursor(50,15);
display.println(":");
display.setCursor(50,15);
display.println(":");
display.display();
Serial.println("i");
for(int g = segundos; g >= 0; g--){
display.clearDisplay();
delay(50);
display.setTextSize(4);
display.setTextColor(SSD1306_WHITE);
display.setCursor(posicaoNumero,15);
display.println(i);
display.setCursor (70,15);
display.println(g);
// :
display.setCursor(50,15);
display.println(":");
display.display();
Serial.println(g);
if(!digitalRead(botaoPara)){
break;
}
}
if(!digitalRead(botaoPara)){
break;
}
}
digitalWrite(led,LOW);
INICIO();
}
void INICIO(){
minutos = 5;
display.clearDisplay();
//Numeros do contador display
// 0
display.setTextSize(4);
display.setTextColor(SSD1306_WHITE);
display.setCursor(6,15);
display.println("0");
// 5
display.setCursor (30,15);
display.println(minutos);
// :
display.setCursor(50,15);
display.println(":");
display.display();
//00
display.setCursor(70,15);
display.println("00");
display.display();
}