#define DEBUG
#include <Keypad.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// Definir constantes
#define ANCHO_PANTALLA 128 // ancho pantalla OLED
#define ALTO_PANTALLA 64 // alto pantalla OLED
/* Keypad setup */
const byte KEYPAD_ROWS = 4;
const byte KEYPAD_COLS = 4;
byte rowPins[KEYPAD_ROWS] = {13, 12, 11, 10};
byte colPins[KEYPAD_COLS] = {9, 8, 7, 6};
char keys[KEYPAD_ROWS][KEYPAD_COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
// Objeto de la clase Adafruit_SSD1306
Adafruit_SSD1306 display(ANCHO_PANTALLA, ALTO_PANTALLA, &Wire, -1);
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, KEYPAD_ROWS, KEYPAD_COLS);
int tonePin = 5;
char key;
double number = 0;
double seconds = 0;
char letter;
bool showFirst = false;
bool pressedA = false;
uint64_t value = 0;
bool menu = true;
void setup() {
#ifdef DEBUG
Serial.begin(9600);
delay(100);
Serial.println("Iniciando pantalla OLED");
#endif
// Iniciar pantalla OLED en la dirección 0x3C
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
#ifdef DEBUG
Serial.println("No se encuentra la pantalla OLED");
#endif
while (true);
}
}
void loop() {
while(menu)
{
display.clearDisplay();
int16_t x, y;
uint16_t textWidth, textHeight;
const char strHello[] = "Oprima A";
display.setTextSize(1);
display.setTextColor(WHITE, BLACK);
display.getTextBounds(strHello, 0, 0, &x, &y, &textWidth, &textHeight);
display.setCursor(display.width() / 2 - textWidth / 2, display.height() / 2 - textHeight / 2);
display.print(strHello);
display.display();
key = keypad.getKey();
Serial.println(key);
if(key == 'A') {
pressedA=true;
menu=false;
}
}
keypadInput();
}
void keypadInput(){
//Capturamos los datos del teclado
key = keypad.getKey();
Serial.println(key);
switch(key)
{
case '0' ... '9':
showFirst=true;
number = number * 10 + (key - '0');
showDisplay();
break;
case 'A':
showFirst=true;
letter="A";
showDisplay();
break;
case 'B':
showFirst=true;
letter="B";
showDisplay();
break;
case 'C':
showFirst=true;
letter="C";
seconds = number * 1000;
beep(932,seconds);
//INICIAR ZUMBADOR
showDisplay();
break;
case 'D':
showFirst=false;
letter="D";
number=0;
seconds=0;
showDisplay();
break;
}
}
void beep(int note, int duration){
tone(tonePin, note, duration);
}
void showDisplay(){
display.clearDisplay();
int16_t x, y;
uint16_t textWidth, textHeight;
display.setTextSize(1);
display.setTextColor(WHITE, BLACK);
display.setCursor(0,0);
display.println("ingrese los segundos");
display.setCursor(0,30);
//display.println(Operator);
if (showFirst) {
Serial.print(number);
display.println(number);
}
else
{
display.clearDisplay();
display.println("");
}
display.display();
}