yes ,,,,, Today i tried it with this simple code
#include <MIDI.h>
MIDI_CREATE_DEFAULT_INSTANCE();
int PATCH = 51;
int White_Note [] = { 48,50,52,53,55,57,59,60,62,64,65,67,69,71,72,74,76,77,79,81,83,84 };
int SLIDE1 = 0;
int SLIDE1_OLD = 0;
int Last_Note = 0;
void setup() {
MIDI.begin(4);
MIDI.turnThruOff();
}
void loop() {
int val = analogRead(0);
{ SLIDE1 = map(val,100,950,1,22); }
if (val<100) { SLIDE1=0; }
if (val>950) { SLIDE1=23; }
if (SLIDE1 !=SLIDE1_OLD) {
if ((SLIDE1>0) && (SLIDE1<23))
{
for (int ch=0; ch<16; ch++) { MIDI.sendNoteOff(Last_Note,0,ch); }
int New_Note = White_Note [SLIDE1-1] ;
MIDI.sendProgramChange(78, 1);
for (int ch=0; ch<16; ch++) { MIDI.sendNoteOn(New_Note,127,ch); }
Last_Note = New_Note;
}
else
{
for (int ch=0; ch<16; ch++) { MIDI.sendControlChange(120,0,ch); }
for (int ch=0; ch<16; ch++) { MIDI.sendControlChange(123,0,ch); }
MIDI.sendProgramChange(PATCH, 1);
}
SLIDE1_OLD = SLIDE1;
}
}
in this simple code i have no problem ,slide rolling goes up/down correctly ,succesfully i got progchange with variable "PATCH".
but what problem is in my below code. i have everything Necessary in my code.
could you tell me , what part of code cause MIDI.sendProgramChange(10, 1);
even i changed my array[] in this code:
#include <RH_ASK.h> // ok working RadioHead 1.83
#include <MIDI.h>
#include <Keypad.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include<EEPROM.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32
#define OLED_RESET -1
#define SCREEN_ADDRESS 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define NUMFLAKES 10
#define KEY_UP -115
#define KEY_DOWN -113
#define KEY_ZERO -114
#define KEY_FIND_SCN -110
#define A -106
#define B -107
#define C -109
#define D -108
#define AA -96
#define BB -97
#define CC -98
#define DD -99
#define PATCH_UP -126
#define PATCH_DOWN -127
#define MONO -125
#define POLY -124
#define DRUM -116
#define KEY_128 -128
#define ORANGE_A -123
#define ORANGE_B -122
#define BLUE_A -121
#define BLUE_B -120
#define Bank_WriteA -119
#define Bank_WriteB -118
#define Key_Mode_Sw -117
#define KEY_128 -128
char *data; // RF
const byte ROWS = 16;
const byte COLS = 10;
char keys[ROWS][COLS] = {
{1,2,3,4,5,6,7,8,9,10},
{11,12,13,14,15,16,17,18,19,20},
{21,22,23,24,25,26,27,28,29,30},
{31,32,33,34,35,36,37,38,39,40},
{41,42,43,44,45,46,47,48,49,50},
{51,52,53,54,55,56,57,58,59,60},
{61,62,63,64,65,66,67,68,69,70},
{71,72,73,74,75,76,77,78,79,80},
{81,82,83,84,85,86,87,88,89,90},
{91,92,93,94,95,96,97,98,99,100},
{101,102,103,104,105,106,107,108,109,110},
{111,112,113,114,115,116,117,118,119,120},
{121,122,123,124,125,126,127,128,129,130},
{131,132,133,134,135,136,137,138,139,140},
{141,142,143,144,145,146,147,148,149,150},
{151,152,153,154,155,156,157,158,159,160}
};
byte rowPins[ROWS] = {4,5,6,7,8,9,10,11,12,14,15,16,17,22,23,24};
byte colPins[COLS] = {32,33,34,35,36,37,38,39,40,41};
Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
String msg;
MIDI_CREATE_DEFAULT_INSTANCE();
byte sysexArray[8] = {0xF0,0x7F,0x7F,0x04,0x04,0x00,50,0xF7}; // 0x28 // byte sysexArray[8] = {0xF0, 0x7F, 0x7F, 0x04, 0x04, 0x0, 0x50, 0xF7}; // MIDI.sendSysEx(8, sysexArray, true);
byte User[8] = {0xB0,0x00,0x55,0x90,0x20,0x00,0xC0,0x00};
RH_ASK driver(2000, 2, A1, 5); // ESP8266 or ESP32: do not use pin 11 rx_2 ,tx_A1
int UP = 0;
int DOWN = 0;
int Bank = 61;
String Key_Mode;
String CC_Mode;
int PATCH = 0;
int SHIFT1 = 0;
long COUNT = 0;
int TRANS_KEY = 0;
int TRANS_KEY_Old = 0;
int KEY_SHIFT_MODE = 0;
int NOTE_NUMBER = 0;
int RAG_NOTE[15] = {49,51,52,54,56,57,59,61,63,64,66,68,69,71,73 };
int Bells_DRBR[22] = {61,63,64,66,68,69,71,73,75,76,78,80,81,83,85,87,88,90,92,93,95,97 }; // 22 notes
int White_Note [] = { 48,50,52,53,55,57,59,60,62,64,65,67,69,71,72,74,76,77,79,81,83,84 };
int last_val = 0;
int SLIDE1 = 0;
int SLIDE1_OLD = 0;
int Last_Note = 0;
int Pitch_Value = 0;
byte C_Status = 0;
byte D_Status = 0;
byte Last_Gear = 0;
int my_value = 0;
int AAA[127];
// -----------------------------------------------------------------------------
void setup() {
int data = 1;
if (!driver.init()) // RF
Serial.println("init failed"); // RF
for (int i = 0; i < 128; i++) {
AAA[i]=0 ; }
pinMode(LED_BUILTIN, OUTPUT);
kpd.setHoldTime(1000);
MIDI.begin(4);
MIDI.turnThruOff();
digitalWrite(13,LOW);
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
display.display();
display.clearDisplay();
msg = "";
Key_Mode="Bank";
CC_Mode =="OFF";
WEL_COME_SCN ();
delay(1000);
for (int i = 0; i < 128; i++) {
AAA[i] = EEPROM.read(i);
}
MAIN_SCN ();
}
void SCN (int gg) {
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.println(gg);
display.setCursor(50,0);
display.println(msg);
display.setCursor(0,16);
display.println(analogRead(A0));
display.display();
}
void loop() { // from @blh64
int val = analogRead(0); // int val = analogRead(0); A3 pin for External Strip-
if (CC_Mode =="ON") { SLIDE1 = map(val,100,950,1,22); }
if ((val<100) && (CC_Mode =="ON")) { SLIDE1=0; }
if ((val>950) && (CC_Mode =="ON")) { SLIDE1=23; }
if (SLIDE1 !=SLIDE1_OLD) {
if ((SLIDE1>0) && (SLIDE1<23))
{
for (int ch=0; ch<16; ch++) { MIDI.sendNoteOff(Last_Note,0,ch); }
int New_Note = White_Note [SLIDE1-1] ;
MIDI.sendProgramChange(78, 1);
for (int ch=0; ch<16; ch++) { MIDI.sendNoteOn(New_Note,127,ch); }
Last_Note = New_Note;
}
else
{
for (int ch=0; ch<16; ch++) { MIDI.sendControlChange(120,0,ch); }
for (int ch=0; ch<16; ch++) { MIDI.sendControlChange(123,0,ch); }
MIDI.sendProgramChange(PATCH, 1);
}
SLD_SCN (SLIDE1);
SLIDE1_OLD = SLIDE1;
}
if (kpd.getKeys())
{
for (int i=0; i<LIST_MAX; i++)
{ int mykey = kpd.key[i].kchar;
if (( kpd.key[i].stateChanged ) && (mykey < 128 ) && (mykey > 0 ) && (mykey != 13))
{
switch (kpd.key[i].kstate) {
case PRESSED:
if (Key_Mode == "Perform") { Perform_Mode (mykey); MAIN_SCN (); }
else if (Key_Mode == "Bank") { Bank_Mode (mykey); } MAIN_SCN ();
break;
case RELEASED:
// if (Key_Mode == "Perform") { Perform_Mode_Released (mykey); MAIN_SCN (); }
if (Key_Mode == "Bank") { Bank_Mode_Released (mykey); } MAIN_SCN ();
break;
}
}
// ----------------------------------------------------------------------------------------------
if (( kpd.key[i].stateChanged ) && (mykey == KEY_128)) // --------------------------------------
{ switch (kpd.key[i].kstate) {
case PRESSED:
if (Key_Mode == "Perform") { PATCH = 127; MIDI.sendProgramChange(PATCH, 1); MAIN_SCN (); }
break;
} }
// ----------------------------------------------------------------------------------------------
if (( kpd.key[i].stateChanged ) && (mykey == PATCH_UP)) // --------------------------------------
{ switch (kpd.key[i].kstate) {
case PRESSED:
PATCH++; MIDI.sendProgramChange(PATCH, 1); MAIN_SCN ();
if (DOWN==1) {PATCH = PATCH+10; MIDI.sendProgramChange(PATCH, 1); MAIN_SCN (); } UP = 1;
break;
case HOLD: break;
case RELEASED: UP = 0; break;
} }
// ----------------------------------------------------------------------------------------------
if (( kpd.key[i].stateChanged ) && (mykey == PATCH_DOWN)) // --------------------------------------
{ switch (kpd.key[i].kstate) {
case PRESSED:
PATCH--; MIDI.sendProgramChange(PATCH, 1); MAIN_SCN ();
if (UP==1) {PATCH = PATCH-10; MIDI.sendProgramChange(PATCH, 1); MAIN_SCN (); } DOWN = 1;
break;
case HOLD: break;
case RELEASED: DOWN = 0; break;
} }
// ----------------------------------------------------------------------------------------------
if (( kpd.key[i].stateChanged ) && (mykey == KEY_FIND_SCN)) // --------------------------------------
{ switch (kpd.key[i].kstate) {
case PRESSED:
MIDI.sendProgramChange(10, 1);
FIND_SCN ();
KEY_SHIFT_MODE = 1;
break;
case RELEASED:
KEY_SHIFT_MODE = 0;
All_Note_Off (); MIDI.sendProgramChange(PATCH, 1); MAIN_SCN ();
break;
} }
// ----------------------------------------------------------------------------------------------
if (( kpd.key[i].stateChanged ) && (mykey == KEY_UP)) // --------------------------------------
{ switch (kpd.key[i].kstate) {
case PRESSED:
TRANS_KEY++; MAIN_SCN ();
break;
} }
// ----------------------------------------------------------------------------------------------
if (( kpd.key[i].stateChanged ) && (mykey == KEY_DOWN)) // --------------------------------------
{ switch (kpd.key[i].kstate) {
case PRESSED:
TRANS_KEY--; MAIN_SCN (); data = 31;
break;
} }
// ----------------------------------------------------------------------------------------------
if (( kpd.key[i].stateChanged ) && ((mykey == KEY_ZERO) || (mykey == -112) || (mykey == -111))) // --------------------------------------
{ switch (kpd.key[i].kstate) {
case PRESSED:
TRANS_KEY = 0;
MAIN_SCN ();
break;
} }
// ----------------------------------------------------------------------------------------------
if (( kpd.key[i].stateChanged ) && (mykey == A)) // --------------------------------------
{ switch (kpd.key[i].kstate) {
case PRESSED:
data = 11; driver.send((uint8_t *)&data, sizeof(data)); driver.waitPacketSent();
break;
case HOLD:
data = 13; driver.send((uint8_t *)&data, sizeof(data)); driver.waitPacketSent();
break;
case RELEASED:
data = 12; driver.send((uint8_t *)&data, sizeof(data)); driver.waitPacketSent();
break;
} }
// ----------------------------------------------------------------------------------------------
if (( kpd.key[i].stateChanged ) && (mykey == B)) // --------------------------------------
{ switch (kpd.key[i].kstate) {
case PRESSED:
data = 21; driver.send((uint8_t *)&data, sizeof(data)); driver.waitPacketSent();
break;
case HOLD:
data = 23; driver.send((uint8_t *)&data, sizeof(data)); driver.waitPacketSent();
break;
case RELEASED:
data = 22; driver.send((uint8_t *)&data, sizeof(data)); driver.waitPacketSent();
break;
} }
// ----------------------------------------------------------------------------------------------
if (( kpd.key[i].stateChanged ) && (mykey == C)) // --------------------------------------
{ switch (kpd.key[i].kstate) {
case PRESSED:
if (D_Status==0) { data = 31; driver.send((uint8_t *)&data, sizeof(data)); driver.waitPacketSent(); Last_Gear = 31;}
if (D_Status==1) { data = 10; driver.send((uint8_t *)&data, sizeof(data)); driver.waitPacketSent(); } // Speeed full
C_Status = 1;
break;
case HOLD:
// data = 33; driver.send((uint8_t *)&data, sizeof(data)); driver.waitPacketSent();
break;
case RELEASED:
if (D_Status==0) { data = 32; driver.send((uint8_t *)&data, sizeof(data)); driver.waitPacketSent(); }
if (D_Status==1) { data = 5; driver.send((uint8_t *)&data, sizeof(data)); driver.waitPacketSent(); } // Speed LOW
C_Status = 0;
break;
} }
// ----------------------------------------------------------------------------------------------
if (( kpd.key[i].stateChanged ) && (mykey == D)) // --------------------------------------
{ switch (kpd.key[i].kstate) {
case PRESSED: //41
if (C_Status==0) { data = 41; driver.send((uint8_t *)&data, sizeof(data)); driver.waitPacketSent(); Last_Gear = 41;}
if (C_Status==1) { data = 10; driver.send((uint8_t *)&data, sizeof(data)); driver.waitPacketSent(); } // Speeed full
D_Status = 1;
break;
case HOLD:
// data = 43; driver.send((uint8_t *)&data, sizeof(data)); driver.waitPacketSent();
break;
case RELEASED: // 42
if (C_Status==0) { data = 42; driver.send((uint8_t *)&data, sizeof(data)); driver.waitPacketSent(); }
if (C_Status==1) { data = 5; driver.send((uint8_t *)&data, sizeof(data)); driver.waitPacketSent(); } // Speed LOW
D_Status = 0;
break;
} }
// ----------------------------------------------------------------------------------------------
if (( kpd.key[i].stateChanged ) && (mykey == AA)) // -------------------------------------- P
{ switch (kpd.key[i].kstate) {
case PRESSED:
data = 11; driver.send((uint8_t *)&data, sizeof(data)); driver.waitPacketSent();
break;
case HOLD:
data = 13; driver.send((uint8_t *)&data, sizeof(data)); driver.waitPacketSent();
break;
case RELEASED:
data = 12; driver.send((uint8_t *)&data, sizeof(data)); driver.waitPacketSent();
break;
} }
// ----------------------------------------------------------------------------------------------
if (( kpd.key[i].stateChanged ) && (mykey == BB)) // --------------------------------------
{ switch (kpd.key[i].kstate) {
case PRESSED:
data = 21; driver.send((uint8_t *)&data, sizeof(data)); driver.waitPacketSent();
break;
case HOLD:
data = 23; driver.send((uint8_t *)&data, sizeof(data)); driver.waitPacketSent();
break;
case RELEASED:
data = 22; driver.send((uint8_t *)&data, sizeof(data)); driver.waitPacketSent();
break;
} }
// ----------------------------------------------------------------------------------------------
if (( kpd.key[i].stateChanged ) && (mykey == CC)) // --------------------------------------
{ switch (kpd.key[i].kstate) {
case PRESSED:
data = 31; driver.send((uint8_t *)&data, sizeof(data)); driver.waitPacketSent(); Last_Gear = 31;
break;
case HOLD:
data = 33; driver.send((uint8_t *)&data, sizeof(data)); driver.waitPacketSent();
break;
case RELEASED:
data = 32; driver.send((uint8_t *)&data, sizeof(data)); driver.waitPacketSent();
break;
} }
// ----------------------------------------------------------------------------------------------
if (( kpd.key[i].stateChanged ) && (mykey == DD)) // --------------------------------------
{ switch (kpd.key[i].kstate) {
case PRESSED:
data = 41; driver.send((uint8_t *)&data, sizeof(data)); driver.waitPacketSent(); Last_Gear = 41;
break;
case HOLD:
data = 43; driver.send((uint8_t *)&data, sizeof(data)); driver.waitPacketSent();
break;
case RELEASED:
data = 42; driver.send((uint8_t *)&data, sizeof(data)); driver.waitPacketSent();
break;
} }
// ----------------------------------------------------------------------------------------------
if (( kpd.key[i].stateChanged ) && (mykey == Key_Mode_Sw)) // --------------------------------------
{ switch (kpd.key[i].kstate) {
case PRESSED:
if ( Key_Mode=="Perform") { Key_Mode="Bank"; }
else if ( Key_Mode=="Bank") { Key_Mode="Perform"; }
MAIN_SCN ();
break;
} }
// ----------------------------------------------------------------------------------------------
if (( kpd.key[i].stateChanged ) && (mykey == DRUM)) // --------------------------------------
{ switch (kpd.key[i].kstate) {
case PRESSED:
if ( Key_Mode=="Perform") { Key_Mode="Bank"; }
else if ( Key_Mode=="Bank") { Key_Mode="Perform"; }
MAIN_SCN ();
break;
} }
// ----------------------------------------------------------------------------------------------
if (( kpd.key[i].stateChanged ) && (mykey == Bank_WriteA)) // --------------------------------------
{ switch (kpd.key[i].kstate) {
case PRESSED: Write_Bank (); Key_Mode="Bank"; MAIN_SCN (); break;
} }
// ----------------------------------------------------------------------------------------------
if (( kpd.key[i].stateChanged ) && (mykey == Bank_WriteB)) // --------------------------------------
{ switch (kpd.key[i].kstate) {
case PRESSED: Write_Bank (); Key_Mode="Bank"; MAIN_SCN (); break;
} }
// ----------------------------------------------------------------------------------------------
if (( kpd.key[i].stateChanged ) && (mykey == MONO)) // --------------------------------------
{ switch (kpd.key[i].kstate) {
case PRESSED: for (int i=1; i<11; i++) { MIDI.sendControlChange(126,0,i); } // (cc#,value,channel) MONO
break; // CC# 126
} }
// ----------------------------------------------------------------------------------------------
if (( kpd.key[i].stateChanged ) && (mykey == POLY)) // --------------------------------------
{ switch (kpd.key[i].kstate) {
case PRESSED: for (int i=1; i<11; i++) { MIDI.sendControlChange(127,0,i); } // (cc#,value,channel) POLY
break; // CC#127
} }
// ----------------------------------------------------------------------------------------------
if (( kpd.key[i].stateChanged ) && (mykey == ORANGE_A )) // --------------------------------------
{ switch (kpd.key[i].kstate) {
case PRESSED:
MIDI.sendProgramChange(111, 1);
for (int i=21; i>(-1); i--) {
MIDI.sendNoteOn((Bells_DRBR[i]+TRANS_KEY),127,1);
delay(100);
MIDI.sendNoteOff((Bells_DRBR[i]+TRANS_KEY),0,1); } // (note,velocity,channel)
MIDI.sendProgramChange(PATCH, 1);
MAIN_SCN ();
break;
} }
// ----------------------------------------------------------------------------------------------
if (( kpd.key[i].stateChanged ) && (mykey == ORANGE_B )) // --------------------------------------
{ switch (kpd.key[i].kstate) {
case PRESSED:
if (CC_Mode =="OFF") { CC_Mode ="ON"; }
else { CC_Mode ="OFF"; }
MAIN_SCN ();
break;
} }
// ----------------------------------------------------------------------------------------------
if (( kpd.key[i].stateChanged ) && (mykey == BLUE_A )) // --------------------------------------
{ switch (kpd.key[i].kstate) {
case PRESSED:
break;
case RELEASED:
break;
} }
// ----------------------------------------------------------------------------------------------
}
}
if (MIDI.read())
{ COUNT++;
byte A_TYPE = MIDI.getType();
byte A_CHANNEL = MIDI.getChannel(); // channel
byte A_NOTE = MIDI.getData1(); // note number
byte A_VOL = MIDI.getData2(); // velocity
if ((A_TYPE==144) && (A_CHANNEL == 4)&& (KEY_SHIFT_MODE==1) ) { // A_TYPE=144 noteOn 128 NoteOff
TRANS_KEY = (A_NOTE-73) + TRANS_KEY_Old; // ......52 = -12........64 = 0........76 = +12.......COARSE TUNE
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0); display.println(A_TYPE); display.setCursor(50,0); display.println(A_CHANNEL); display.setCursor(90,0); display.println( A_NOTE);
display.setCursor(0,16); display.println(A_VOL); display.setCursor(50,16); display.print( "Event-"); display.print( COUNT);
display.display();
}
}
if ( TRANS_KEY != TRANS_KEY_Old ) {
byte sysexArray[8] = {0xF0,0x7F,0x7F,0x04,0x04,0x00,(TRANS_KEY+64),0xF7};
MIDI.sendSysEx(8,sysexArray,true);
MAIN_SCN ();
TRANS_KEY_Old = TRANS_KEY;
}
if (PATCH < 0) { PATCH = 127; }
if (PATCH > 127) { PATCH = 0; }
} // End loop ####################################################################################################################################################
void All_Note_Off () {
for (int ch = 0; ch < 16 + 1; ch++) { MIDI.sendControlChange(ch,123,0); } // (ch ,cc ,value)
}
void FIND_SCN ()
{ display.clearDisplay();
display.setTextSize(3);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.println("Key ??");
display.display();
}
void SCN_SLIDE () {
display.clearDisplay();
display.setTextSize(3);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.println(SLIDE1);
display.display();
}
void MAIN_SCN () {
display.clearDisplay();
display.setTextSize(3);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
if (TRANS_KEY > 0) { display.print("+"); }
display.print(TRANS_KEY);
display.setTextSize(1);
display.setCursor(60,0);
display.print(Key_Mode);
display.print("__");
display.print(Bank);
display.setCursor(70,12);
display.print("P:");
display.print(PATCH+1);
// display.print("");
display.setCursor(70,21);
display.print(CC_Mode);
display.display();
}
void SLD_SCN (int NUMBER_KEY) {
display.clearDisplay();
display.setTextSize(3);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.print(NUMBER_KEY);
display.display();
}
void function () {
MIDI.sendControlChange(94,127,1); // (cc#,value,channel)
}
void WEL_COME_SCN () {
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.println("MIDI ctrl");
display.display(); }
void Bank_Mode (int Bank_Key) {
for (int i = 0; i < 128; i++) {
if ((Bank_Key == i) && (Bank_Key != 1)) {
MIDI.sendProgramChange(AAA[i], 1);
Bank = i;
PATCH = AAA[i];
}
if (Bank_Key == 1) { for (int i=0; i<16; i++) { MIDI.sendControlChange(127,0,i); } } // (cc#,value,channel) POLY
}
}
void Perform_Mode (int mykey)
{PATCH = mykey-1; MIDI.sendProgramChange(PATCH, 1);}
void Bank_Mode_Released (int Bank_Key1) {
if (Bank_Key1==1) { for (int i=0; i<16; i++) { MIDI.sendControlChange(126,0,i); } } // (cc#,value,channel) MONO
}
void Write_Bank () {
for (int i = 0; i < 128; i++) {
if (Bank == i) {
EEPROM.write(i, PATCH);
AAA[i] = PATCH;
Write_Bank_SCN ();
delay(1000);
MAIN_SCN ();
}
}
}
void Write_Bank_SCN () {
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.print("Write Done");
display.display();
}
please check if possible
????