//#include <Arduino.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <LiquidCrystal_I2C.h>
#include "BFKTools.h"
#include "BFKButton.h"
#include "BFKMIDI.h"
//#include "BFKMIDIano.h"
#define LED_A 18
#define LED_B 19
#define LED_C 5
#define LED_D 23
#define BTN_A 15
#define BTN_B 0
#define BTN_C 4
#define BTN_D 16
#define OFF 0
#define ON 1
// OLED
#define ANCHO_PANTALLA 128 // ancho pantalla OLED
#define ALTO_PANTALLA 64 // alto pantalla OLED
// Objeto de la clase Adafruit_SSD1306
Adafruit_SSD1306 display(ANCHO_PANTALLA, ALTO_PANTALLA, &Wire, -1);
// Fin OLED
// LCD 20x4
LiquidCrystal_I2C lcd(0x27, 20, 4); // I2C address 0x27, 20 column and 4 rows
//
MIDIBlock msA1('1');
MIDIBlock msA2('2');
MIDIBlock msB('B');
MIDIBlock msC('C');
MIDIBlock msD('D');
void WhenPressedA(Button B);
void WhenReleasedA(Button B);
void WhenPressedB(Button B);
void WhenReleasedB(Button B);
void WhenPressedC(Button B);
void WhenReleasedC(Button B);
void WhenPressedD(Button B);
void WhenReleasedD(Button B);
void OLEDDisplay(int x, int y, char* label, MIDIMessage data)
{
display.setCursor(x, y);
// Escribir texto
display.print(label);
display.print(data.data[0],HEX);
display.print(' ');
display.print(data.data[1],HEX);
display.print(' ');
display.print(data.data[2],HEX);
// Enviar a pantalla
display.display();
}
void WhenPressedA(Button B)
{
Log("Botón ", B.ID, " presionado");
digitalWrite(LED_A, HIGH);
// Muestro msA1[0] y msA1[1]
display.clearDisplay();
OLEDDisplay(0, 0, "A Pres.1:", msA1.message[0]);
OLEDDisplay(0, 16, "A Pres.2:", msA1.message[1]);
}
void WhenReleasedA(Button B)
{
Log("Botón ", B.ID, " soltado");
digitalWrite(LED_A, LOW);
// Muestro msA2[0]
display.clearDisplay();
OLEDDisplay(0, 0, "A Rel. :", msA2.message[0]);
}
void WhenPressedB(Button B)
{
Log("Botón ", B.ID, " presionado");
digitalWrite(LED_B, HIGH);
display.clearDisplay();
OLEDDisplay(0, 0, "B Pres. :", msB.message[0]);
}
void WhenReleasedB(Button B)
{
Log("Botón ", B.ID, " soltado");
digitalWrite(LED_B, LOW);
}
void WhenPressedC(Button B)
{
Log("Botón ", B.ID, " presionado");
digitalWrite(LED_C, HIGH);
display.clearDisplay();
OLEDDisplay(0, 0, "C Pres. :", msC.message[0]);
}
void WhenReleasedC(Button B)
{
Log("Botón ", B.ID, " soltado");
digitalWrite(LED_C, LOW);
}
void WhenPressedD(Button B)
{
Log("Botón ", B.ID, " presionado");
digitalWrite(LED_D, HIGH);
display.clearDisplay();
OLEDDisplay(0, 0, "D Pres. :", msD.message[0]);
}
void WhenReleasedD(Button B)
{
Log("Botón ", B.ID, " soltado");
digitalWrite(LED_D, LOW);
}
Button btnA('A', BTN_A, 25, WhenPressedA, WhenReleasedA);
Button btnB('B', BTN_B, 25, WhenPressedB, WhenReleasedB);
Button btnC('C', BTN_C, 25, WhenPressedC, WhenReleasedC);
Button btnD('D', BTN_D, 25, WhenPressedD, WhenReleasedD);
void TestLED(int pin)
{
digitalWrite(pin, HIGH);
delay(1000);
digitalWrite(pin, LOW);
}
void TestLEDS()
{
Log("Probando LEDes");
Log("Probando LED A");
TestLED(LED_A);
Log("Probando LED B");
TestLED(LED_B);
Log("Probando LED C");
TestLED(LED_C);
Log("Probando LED D");
TestLED(LED_D);
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32!");
pinMode(LED_A, OUTPUT);
pinMode(LED_B, OUTPUT);
pinMode(LED_C, OUTPUT);
pinMode(LED_D, OUTPUT);
TestLEDS();
//pinMode(BTN, INPUT_PULLUP);
//status = false;
btnA.Setup();
btnB.Setup();
btnC.Setup();
btnD.Setup();
msA1.SetMessage(0, 0xF9, 1, 0xBA, 0xDA);
msA1.SetMessage(1, 0xC0, 1, 0xC1, 0xD0);
msA2.SetMessage(0, CC, 1, 7, 127);
msB.SetMessage(0, CC, 2, 2, 2);
msC.SetMessage(0, CC, 3, 3, 3);
msD.SetMessage(0, CC, 4, 4, 4);
// Iniciar pantalla OLED en la dirección 0x3C
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("No se encuentra la pantalla OLED");
//while (true);
}
Log("Encontrado OLED");
display.clearDisplay();
// Tamaño del texto
display.setTextSize(1);
// Color del texto
display.setTextColor(SSD1306_WHITE);
// Posición del texto
display.setCursor(10, 32);
// Escribir texto
display.println("Hola mundo!!");
// Enviar a pantalla
display.display();
Log("OLED con letras");
////
// LCD
////
lcd.init(); // initialize the lcd
// Print a message to the LCD.
lcd.backlight();
lcd.setCursor(3,0);
lcd.print("¡Hola, chaval!");
ToHex("FABADA");
Serial.println();
}
void loop()
{
btnA.Loop();
btnB.Loop();
btnC.Loop();
btnD.Loop();
}