#include <i2c_t3.h>
#include <U8g2lib.h>
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ 37, /* data=*/ 38, /* reset=*/ U8X8_PIN_NONE); // All Boards without Reset of the Display
int SCRNUM[8] = {0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00};
int MUTNUM[8] = {7,6,5,4,3,2,1,0,};
int dbRA[8] = {0,0,0,0,0,0,0,0};
String chname1[8];
String chname2[8];
String chname3[8];
String chname4[8];
int centerword[8];
int hi[8];
int lo[8];
int Gain[8];
String chmute[8] ;
String chsolo[8] ;
elapsedMicros sinceupdatescreenvalues; // timer for fader check
unsigned int updatescreenvaluesInterval = 1000;
void setup(void) {
// Setup for Master mode, pins 18/19, external pullups, 400kHz, 200ms default timeout
Wire1.begin(I2C_MASTER, 0x00, I2C_PINS_37_38, I2C_PULLUP_EXT, 400000);
Wire1.setDefaultTimeout(200000); // 200ms
usbMIDI.setHandleControlChange(myControlChange);
usbMIDI.setHandleSysEx(handleSysEx);
u8g2.begin();
startscreen();
}
void loop(void) {
usbMIDI.read();
if (sinceupdatescreenvalues >=updatescreenvaluesInterval) {
sinceupdatescreenvalues = sinceupdatescreenvalues - updatescreenvaluesInterval;
updatescreenvalues();
}
while (usbMIDI.read()) {
}
}
void tcaselect(uint8_t i) {
if (i > 7) return;
Wire1.beginTransmission(0x70);
Wire1.write(1 << i);
Wire1.endTransmission();
while (usbMIDI.read()) {
}
}
void handleSysEx(const byte* sysExData, uint16_t sysExSize, bool complete)
{
//sysex array
const byte *pSysExArray = usbMIDI.getSysExArray(); //capture data
for (int t=0;t<8;t++) {
if (pSysExArray[6] == 0x10){ // 0x10 = Scribble strip 4 bytes
if (pSysExArray[7] == SCRNUM[t]){
for (int i=8;i<11;i++) {
String data = String(sysExData[i]);
int w = u8g2.getUTF8Width(data.c_str());
int center = 64-w;
centerword[t] = center;
chname1[t] = sysExData[8];
chname2[t] = sysExData[9];
chname3[t] = sysExData[10];
chname4[t] = sysExData[11];
}
}
}
}
}
void myControlChange(byte channel, byte control, byte value) { // blink the LED a number of times
// value = map(value, 0, 127, 127, 0);
for (int i=0; i<8;i++){
if (control == i+32) {
hi[i] = value;
}
if (control == i) {
lo[i] = value;
Gain[i] = (hi[i] >> 7) + lo[i]*8.055;
Gain[i] = map(Gain[i], 0, 1022, 1022, 0);
//GainScreen[i] = (hi[i] >> 7) + lo[i];
dbRA[7]=GetDB(lo[0]);
dbRA[6]=GetDB(lo[1]);
dbRA[5]=GetDB(lo[2]);
dbRA[4]=GetDB(lo[3]);
dbRA[3]=GetDB(lo[4]);
dbRA[2]=GetDB(lo[5]);
dbRA[1]=GetDB(lo[6]);
dbRA[0]=GetDB(lo[7]);
}
}
//Serial.println(usbMIDI.getData1());
for (int t=0; t<8;t++){
if ((control == 12)&&(value == MUTNUM[t])) {
chmute[t] = "M";
}
if ((control == 44)&&(value == 2)) {
chmute[t] = " ";
}
}
Serial.println(value);
}
void updatescreenvalues(){
for (int i=0;i<8;i++){
Wire1.begin();
tcaselect(i);
chname1[i].toUpperCase();
chname2[i].toUpperCase();
chname3[i].toUpperCase();
chname4[i].toUpperCase();
//page structure
u8g2.clearBuffer();
u8g2.drawLine(0, 32, 128, 32);
u8g2.setFont(u8g2_font_ncenB10_tr); // choose a suitable font
u8g2.setCursor(90, 60);
u8g2.print("dbA");
//values update
u8g2.setFont(u8g2_font_ncenB14_tr);
u8g2.setCursor(centerword[i], 18);
u8g2.print(String(chname1[i]+chname2[i]+chname3[i]+chname4[i]));
u8g2.setFont(u8g2_font_ncenB14_tr); // choose a suitable font
u8g2.setCursor(50, 60);
u8g2.print(dbRA[i]);
if(chmute[i] == "M"){
u8g2.setFontMode(1); /* activate transparent font mode */
u8g2.drawBox(01,35, 24, 50);
u8g2.setDrawColor(2);
u8g2.setFont(u8g2_font_ncenB14_tr); // choose a suitable font
u8g2.setCursor(04, 57);
u8g2.print(chmute[i]);
}
if(chsolo[i] == "S"){
u8g2.setFontMode(1); /* activate transparent font mode */
u8g2.drawBox(01,20, 24, 50);
u8g2.setDrawColor(2);
u8g2.setFont(u8g2_font_ncenB12_tr); // choose a suitable font
u8g2.setCursor(07, 32);
u8g2.print(chsolo[i]);
}
u8g2.sendBuffer();
}
}
void startscreen(){
for (int i=0;i<8;i++){
Wire1.begin();
tcaselect(i);
u8g2.begin();
u8g2.clearBuffer(); // clear the internal memory
u8g2.drawRFrame(2 ,2,122,62,7);
u8g2.setFont(u8g2_font_ncenB18_tr); // choose a suitable font
u8g2.setCursor(25,35);
u8g2.print("AMC8"); // write something to the internal memory
u8g2.setFont(u8g2_font_ncenB08_tr); // choose a suitable font
u8g2.setCursor(26, 55);
u8g2.print("HUI Protocol"); // write something to the internal memory
u8g2.sendBuffer(); // transfer internal memory to the display
}
delay(7000);
}
float GetDB(int Gain){
float DB;
if (Gain == 0){
DB = -140.0 ;
}
if (Gain == 1){
DB = -100.0 ;
}
if (Gain == 2){
DB = -84.0 ;
}
if (Gain == 3){
DB = -78.4 ;
}
if (Gain == 4){
DB = -72.7 ;
}
if (Gain == 5){
DB = -69.7 ;
}
if (Gain == 6){
DB = -67.2;
}
if (Gain == 7){
DB = -64.6;
}
if (Gain == 8){
DB = -62.0;
}
if (Gain == 9){
DB = -59.4;
}
if (Gain == 10){
DB = -56.8;
}
if (Gain == 11){
DB = -54.2;
}
if (Gain == 12){
DB = -51.6;
}
if (Gain == 13){
DB = -49.1;
}
if (Gain == 14){
DB = -46.5;
}
if (Gain == 15){
DB = -43.9;
}
if (Gain == 16){
DB = -41.3;
}
if (Gain == 17){
DB = -39.7;
}
if (Gain == 18){
DB = -39.0;
}
if (Gain == 19){
DB = -38.4;
}
if (Gain == 20){
DB = -37.7;
}
if (Gain == 21){
DB = -37.1;
}
if (Gain == 22){
DB = -36.4;
}
if (Gain == 23){
DB = -35.8;
}
if (Gain == 24){
DB = -35.1 ;
}
if (Gain == 25){
DB = -34.5;
}
if (Gain == 26){
DB = -33.8;
}
if (Gain == 27){
DB = -33.2;
}
if (Gain == 28){
DB = -32.5;
}
if (Gain == 29){
DB = -31.9;
}
if (Gain == 30){
DB = -31.2;
}
if (Gain == 31){
DB = -30.6;
}
if (Gain == 32){
DB = -30.0;
}
if (Gain == 33){
DB = -29.3;
}
if (Gain == 34){
DB = -28.7;
}
if (Gain == 35){
DB = -28.0;
}
if (Gain == 36){
DB = -27.4;
}
if (Gain == 37){
DB = -26.7;
}
if (Gain == 38){
DB = -26.1;
}
if (Gain == 39){
DB = -25.4 ;
}
if (Gain == 40){
DB = -24.8;
}
if (Gain == 41){
DB = -24.1;
}
if (Gain == 42){
DB = -23.5;
}
if (Gain == 43){
DB = -22.8;
}
if (Gain == 44){
DB = -22.2;
}
if (Gain == 45){
DB = -21.5;
}
if (Gain == 46){
DB = -20.9;
}
if (Gain == 47){
DB = -20.2;
}
if (Gain == 48){
DB = -19.7;
}
if (Gain == 49){
DB = -19.3;
}
if (Gain == 50){
DB = -18.9;
}
if (Gain == 51){
DB = -18.5;
}
if (Gain == 52){
DB = -18.1;
}
if (Gain == 53){
DB = -17.5;
}
if (Gain == 54){
DB = -17.2;
}
if (Gain == 55){
DB = -16.8;
}
if (Gain == 56){
DB = -16.4;
}
if (Gain == 57){
DB = -16.0;
}
if (Gain == 58){
DB = -15.6;
}
if (Gain == 59){
DB = -15.2;
}
if (Gain == 60){
DB = -14.8;
}
if (Gain == 61){
DB = -14.4;
}
if (Gain == 62){
DB = -13.9 ;
}
if (Gain == 63){
DB = -13.5;
}
if (Gain == 64){
DB = -13.1;
}
if (Gain == 65){
DB = -12.7;
}
if (Gain == 66){
DB = -12.2;
}
if (Gain == 67){
DB = -11.8;
}
if (Gain == 68){
DB = -11.4;
}
if (Gain == 69){
DB = -11.0;
}
if (Gain == 70){
DB = -10.6;
}
if (Gain == 71){
DB = -10.2;
}
if (Gain == 72){
DB = -9.8;
}
if (Gain == 73){
DB = -9.4 ;
}
if (Gain == 74){
DB = -8.9;
}
if (Gain == 75){
DB = -8.5;
}
if (Gain == 76){
DB = -8.1;
}
if (Gain == 77){
DB = -7.7;
}
if (Gain == 78){
DB = -7.3;
}
if (Gain == 79){
DB = -6.9;
}
if (Gain == 80){
DB = -6.5;
}
if (Gain == 81){
DB = -6.1;
}
if (Gain == 82){
DB = -5.6;
}
if (Gain == 83){
DB = -5.2;
}
if (Gain == 84){
DB = -4.8;
}
if (Gain == 85){
DB = -4.4;
}
if (Gain == 86){
DB = -4.0;
}
if (Gain == 87){
DB = -3.6;
}
if (Gain == 88){
DB = -3.2;
}
if (Gain == 89){
DB = -2.8;
}
if (Gain == 90){
DB = -2.3;
}
if (Gain == 91){
DB = -1.9 ;
}
if (Gain == 92){
DB = -1.5;
}
if (Gain == 93){
DB = -1.1;
}
if (Gain == 94){
DB = -0.7;
}
if (Gain == 95){
DB = -0.3;
}
if (Gain == 96){
DB = 0.1;
}
if (Gain == 97){
DB = 0.5;
}
if (Gain == 98){
DB = 1.0;
}
if (Gain == 99){
DB = 1.2;
}
if (Gain == 100){
DB = 1.6;
}
if (Gain == 101){
DB = 2.0;
}
if (Gain == 102){
DB = 2.4;
}
if (Gain == 103){
DB = 2.8;
}
if (Gain == 104){
DB = 3.1;
}
if (Gain == 105){
DB = 3.5;
}
if (Gain == 106){
DB = 4.0;
}
if (Gain == 107){
DB = 4.2;
}
if (Gain == 108){
DB = 4.6;
}
if (Gain == 109){
DB = 5.0;
}
if (Gain == 110){
DB = 5.4;
}
if (Gain == 111){
DB = 5.7;
}
if (Gain == 112){
DB = 6.1;
}
if (Gain == 113){
DB = 6.5;
}
if (Gain == 114){
DB = 7.0;
}
if (Gain == 115){
DB = 7.2;
}
if (Gain == 116){
DB = 7.6;
}
if (Gain == 117){
DB = 8.0;
}
if (Gain == 118){
DB = 8.4;
}
if (Gain == 119){
DB = 8.7;
}
if (Gain == 120){
DB =9.1;
}
if (Gain == 121){
DB = 9.5;
}
if (Gain == 122){
DB = 10.0;
}
if (Gain == 123){
DB = 10.2;
}
if (Gain == 124){
DB = 10.6;
}
if (Gain == 125){
DB = 11.0;
}
if (Gain == 126){
DB = 11.4;
}
if (Gain == 127){
DB = 12.00;
}
return DB;}