Hi all,
I tried to make an external device able to control 3 voices from my electric piano (MEDELI AKX10)
by using some potentiometers and sending the CC message via bluetooth.
I was able to see that the esp32 is connected to my electric piano (via bluetooth) and I am able to see how the CC message is sent (in console) but it seems that nothing is change on my keyboard .Do you have any idea what is wrong? Below you can see the code
#include <Wire.h>
#include <U8g2lib.h>
#include <BLEDevice.h>
#include <BLEScan.h>
#include "ArduinoBLEMidi.h" // Asigurați-vă că acest fișier se află în același folder sau în directorul de librării Arduino
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define MIDI_CHANNEL 1 // Canalul MIDI
U8G2_SH1106_128X64_NONAME_F_HW_I2C display(U8G2_R0, U8X8_PIN_NONE);
bool connected = false;
String targetDeviceName = "BlueAKX"; // Numele dispozitivului BLE țintă
void midiReceiveCallback(uint8_t status, uint8_t data1, uint8_t data2) {
Serial.printf("MIDI Received: Status=0x%02X, Data1=0x%02X, Data2=0x%02X\n", status, data1, data2);
}
void connectToBlueAKX() {
Serial.println("Căutare dispozitiv...");
BLEScan* scanner = BLEDevice::getScan();
scanner->setActiveScan(true);
BLEScanResults* results = scanner->start(5); // Scanare timp de 5 secunde
for (int i = 0; i < results->getCount(); i++) {
BLEAdvertisedDevice device = results->getDevice(i);
if (device.getName() == targetDeviceName) {
connected = true;
Serial.println("Dispozitiv găsit și conectat.");
break;
}
}
if (!connected) {
Serial.println("BlueAKX nu a fost găsit.");
}
}
void setup() {
Serial.begin(115200);
BLEDevice::init("ESP32 BLE MIDI");
if (!ArduinoBLEMidi::begin("ESP32 BLE MIDI", midiReceiveCallback)) {
Serial.println("Eroare la inițializarea BLE MIDI.");
while (true) {
delay(1000);
}
}
// Inițializare display
display.begin();
display.clearBuffer();
display.setFont(u8g2_font_ncenB08_tr);
// Mesaje statice
const char* text = "Voice Control Manager";
display.setCursor((SCREEN_WIDTH - display.getStrWidth(text)) / 2, 10);
display.print(text);
const char* text2 = "By BlueAscendis";
display.setCursor((SCREEN_WIDTH - display.getStrWidth(text2)) / 2, 56);
display.print(text2);
display.sendBuffer();
// Căutare și conectare dispozitiv BLE
connectToBlueAKX();
}
void loop() {
if (connected) {
display.clearBuffer();
// Mesaje statice
const char* text = "Voice Control Manager";
display.setCursor((SCREEN_WIDTH - display.getStrWidth(text)) / 2, 10);
display.print(text);
const char* text2 = "By BlueAscendis";
display.setCursor((SCREEN_WIDTH - display.getStrWidth(text2)) / 2, 56);
display.print(text2);
// Etichete și valori pentru potențiometre
display.setCursor(10, 20);
display.print("R1");
int potValue1 = analogRead(34);
int scaledValue1 = map(potValue1, 0, 4095, 127, 0);
display.setCursor(14, 35);
display.print(scaledValue1);
ArduinoBLEMidi::sendControlChange(7, scaledValue1, 1);
display.setCursor(50, 20);
display.print("R2");
int potValue2 = analogRead(35);
int scaledValue2 = map(potValue2, 0, 4095, 127, 0);
display.setCursor(50, 35);
display.print(scaledValue2);
ArduinoBLEMidi::sendControlChange(7, scaledValue2, 2);
display.setCursor(90, 20);
display.print("R3");
int potValue3 = analogRead(32);
int scaledValue3 = map(potValue3, 0, 4095, 127, 0);
display.setCursor(90, 35);
display.print(scaledValue3);
ArduinoBLEMidi::sendControlChange(7, scaledValue3, 3);
display.sendBuffer();
}
ArduinoBLEMidi::loop();
delay(50); // Pauză pentru actualizări vizuale
}