//8CH RC Transmitter with OLED display interface for Menu Options i.e Reverse, Borders, Elevon, Servo Trim, Battery & Factory Reset.
 //The Transmitter now has got STM32F103 aka BluePil and is an upgrade version of the previous with Nano and NRF24LO1.
 //by Neel. 10.01.2024

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

#define OLED_RESET     -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3c ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

//Right & Left arrow select icon
  static const unsigned char PROGMEM image_ButtonRight_4x7_bits[] = {0x80,0xc0,0xe0,0xf0,0xe0,0xc0,0x80};
  static const unsigned char PROGMEM image_ButtonLeft_4x7_bits[] = {0x10,0x30,0x70,0xf0,0x70,0x30,0x10};

  const int potPin = A0; int potVal; int value; //for debugging & testing only.
   // pins for buttons dn, up, back, select
  const byte dnKey = 9; const byte upKey = 10; const byte bacKey = 11; const byte selKey = 12; // pins for buttons up, dn, back, select
  byte page1 = 0;   //Main Menu page switch case  // Menu Options i.e Reverse, Borders, Elevon, Servo Trim, Battery & Factory Reset Transmitter
  byte page2 = 0;   //Reverse menu switch case  // Channel Reverse function To Opposite movement of servo 
  byte page3 = 0;   //Boarders menu switch case  // set the PWM maximun & minimum // Servo max-min movement
  byte page4 = 0;   //Elevon menu switch case // Elevon menu is for Mixing Roll & Pitch for deltaWings
   //Current menus status. // 0 = not selected & 1 = selected.
  byte menuStatus = 0; byte reverseStatus = 0; byte borderStatus = 0; byte elevonStatus = 0; byte offsetStatus = 0;        //Current menus status. for entering concern menu while loop
   // Channels Reverse Status.
  bool revCh1 = false; bool revCh2 = false; bool revCh3 = false; bool revCh4 = false;   // Channels Reverse Status.
  bool revCh5 = false; bool revCh6 = false; bool revCh7 = false; bool revCh8 = false;
  bool elevonMix = false;       // Elevon mode status. //True = Activated,
  byte offsetMix = 50;         // Roll+Pitch mix offset in %, default 50%, 
  
  
  
 
  
void setup() {
  pinMode(dnKey, INPUT_PULLUP);
  pinMode(upKey, INPUT_PULLUP);
  pinMode(bacKey, INPUT_PULLUP);
  pinMode(selKey, INPUT_PULLUP);
  // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
  if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;); // Don't proceed, loop forever
  }

  
  setupGreet();
  delay(1000);
  display.clearDisplay();
}

void loop() {
  //
  //Put Transmitter Code Here
  //
  mainPage();  // main ch value page default screen i.e home page

  checkMenuStatus();

  while (menuStatus==1 ){ // menu page after press select button
   menuCheck();
   updateMenu();
   checkMenuStatus();
   checkReverseStatus();
   checkElevonStatus();
   checkBorderStatus();

    while(reverseStatus==1){                //sub menu Reverse Page //menuPage/reversePage
     reverseCheck();
     updateReverse();
     checkReverseStatus();
    }

    while(borderStatus==1){         //sub menu Borders Page //menuPage/BordersPage
     //borderCheck();       // not assinged
     //updateborder();
     checkBorderStatus();
    }
    while(elevonStatus==1){                 //sub menu Elevon Page //menuPage/elevonPage
     elevonCheck();
     updateElevon();
     checkElevonStatus();
     checkOffsetStatus();
     while(offsetStatus==1){              //menuPage/eleronPage/offsetPage         
      offsetPage();
      checkOffsetStatus();
     }
    }
    
   }//main while loop end
  
  }//loop end
  
  

void checkBorderStatus(){
 if(page1==2){
  if (!digitalRead(selKey) && borderStatus==0){
      borderPage();
      borderStatus=1;
      while (!digitalRead(selKey));
      }
      else if (!digitalRead(bacKey) && borderStatus==1){
    menuPage();
    borderStatus=0;
    page3 =1;
    page1=1;
    while (!digitalRead(bacKey));
  }
 }
}  
void checkElevonStatus(){
 if(page1==3){
  if (!digitalRead(selKey) && elevonStatus==0){
      elevonPage();
      elevonStatus=1;
      while (!digitalRead(selKey));
      }
      else if (!digitalRead(bacKey) && elevonStatus==1){
    menuPage();
    elevonStatus=0;
    page4=1;
    page1=1;
    while (!digitalRead(bacKey));
  }
 }
}  

void elevonCheck(){
 if (!digitalRead(upKey)){       //When Button is Pressed change screen page 
    page4--;
    while (!digitalRead(upKey));
  }
  if (!digitalRead(dnKey)){       //When Button is Pressed change screen page 
    page4++;
    while (!digitalRead(dnKey));
  }
}
void updateElevon(){
 switch(page4){
    case 0:
    page4=1;
      break;

    case 1:
    elevonPage();
    if (!digitalRead(selKey))
    elevonMix = !elevonMix;
    while (!digitalRead(selKey));
      break;

    case 2:
    offsetPage1();
      break;

    case 3:
    elevonPage();
    page4=1;
      break;
 }
}

void reverseCheck(){

 if (!digitalRead(upKey)){       //When Button is Pressed change screen page 
    page2--;
    while (!digitalRead(upKey));
  }
  if (!digitalRead(dnKey)){       //When Button is Pressed change screen page 
    page2++;
    while (!digitalRead(dnKey));
  }
}
void updateReverse(){              //Changes screen with each button press

  switch(page2){
    case 0:
    page2=1;
      break;

    case 1:
    reversePage();
    if (!digitalRead(selKey))
    revCh1 = !revCh1;
    while (!digitalRead(selKey));
      break;

    case 2:
    ch2Reverse();
    if (!digitalRead(selKey))
    revCh2 = !revCh2;
    while (!digitalRead(selKey));
      break;

    case 3:
    ch3Reverse(); 
    if (!digitalRead(selKey))
    revCh3 = !revCh3;
    while (!digitalRead(selKey));
      break;

    case 4:
    ch4Reverse();
    if (!digitalRead(selKey))
    revCh4 = !revCh4;
    while (!digitalRead(selKey));
      break;

    case 5:
     ch5Reverse();
     if (!digitalRead(selKey))
    revCh5 = !revCh5;
    while (!digitalRead(selKey));
      break;

    case 6:
     ch6Reverse();
     if (!digitalRead(selKey))
    revCh6 = !revCh6;
    while (!digitalRead(selKey));
      break;

    case 7:
     ch7Reverse();
     if (!digitalRead(selKey))
    revCh7 = !revCh7;
    while (!digitalRead(selKey));
      break;

    case 8:
     ch8Reverse();
     if (!digitalRead(selKey))
    revCh8 = !revCh8;
    while (!digitalRead(selKey));
      break;

    case 9:
     reversePage();
     page2=1;
      break;
    
    }
}
void menuCheck(){

 if (!digitalRead(upKey)){       //When Button is Pressed change screen page 
    page1--;
    while (!digitalRead(upKey));
  }
  if (!digitalRead(dnKey)){       //When Button is Pressed change screen page 
    page1++;
    while (!digitalRead(dnKey));
  }
}
void updateMenu(){              //Changes screen with each button press

  switch(page1){
    case 0:
    page1=1;
      break;

    case 1:
    menuPage();
      break;

    case 2:
    borderPage1();
      break;

    case 3:
    elevonPage1(); 
      break;

    case 4:
    page1=1;
      break;

    }
}

void checkMenuStatus(){
  if(!digitalRead(selKey) && menuStatus==0){
   menuPage();
   menuStatus=1;
   while (!digitalRead(selKey));
  }
  else if (!digitalRead(bacKey) && menuStatus==1){
    if(reverseStatus==0){
    mainPage();
    menuStatus=0;
    page1=1;
    while (!digitalRead(bacKey));
    }
    else mainPage();
  }
  

}
void checkReverseStatus(){
  if(page1==1){
  if (!digitalRead(selKey) && reverseStatus==0){
      reversePage();
      reverseStatus=1;
      while (!digitalRead(selKey));
      }
      else if (!digitalRead(bacKey) && reverseStatus==1){
    menuPage();
    reverseStatus=0;
    page2=1;
    while (!digitalRead(bacKey));
  }
  }
  
  
}
void mainPage(){
  display.clearDisplay();
  ch1_data();
  ch2_data();
  ch3_data();
  ch4_data();
  auxCh1_data();
  auxCh2_data();
  auxCh3_data();
  auxCh4_data();
  display.display();
}

void ch1_data(){
  potVal = analogRead(potPin);
  value = map(potVal,0,1023,0,255);
  
  display.setTextSize(1);
  display.setTextColor(1);
  display.setCursor(5, 0);
  display.print(value); 

  display.drawRect(5, 9, 17, 55, WHITE);

  if (value<512){
    int x = map(value,128,0,36,61);
    for (int i=10; i<17; i++){
      display.drawLine(i, 36 , i, x, 1);
    }
    
   }
  else if (value>512){
    int y = map(value,128,255,36,10);
    for (int i=10; i<17; i++){
      display.drawLine(i, 36 , i, y, 1);
      
    }
    
  }
   
}
void ch2_data(){
  potVal = analogRead(potPin);
  value = map(potVal,0,1023,0,255);

  display.setTextSize(1);
  display.setTextColor(1);
  display.setCursor(5+20, 0);
  display.print(value); 

  display.drawRect(5+20, 9, 17, 55, WHITE);

  if (value<512){
    int x = map(value,128,0,36,61);
    for (int i=10; i<17; i++){
      display.drawLine(i+20, 36 , i+20, x, 1);
    }
   }
  else if (value>512){
    int y = map(value,128,255,36,10);
    for (int i=10; i<17; i++){
      display.drawLine(i+20, 36 , i+20, y, 1);
    }
  }

}
void ch3_data(){
  potVal = analogRead(potPin);
  value = map(potVal,0,1023,0,255);

  display.setTextSize(1);
  display.setTextColor(1);
  display.setCursor(5+40, 0);
  display.print(value); 

  display.drawRect(5+40, 9, 17, 55, WHITE);

  if (value<512){
    int x = map(value,128,0,36,61);
    for (int i=10; i<17; i++){
      display.drawLine(i+40, 36 , i+40, x, 1);
    }
   }
  else if (value>512){
    int y = map(value,128,255,36,10);
    for (int i=10; i<17; i++){
      display.drawLine(i+40, 36 , i+40, y, 1);
    }
  }

}
void ch4_data(){
  potVal = analogRead(potPin);
  value = map(potVal,0,1023,0,255);

  display.setTextSize(1);
  display.setTextColor(1);
  display.setCursor(5+60, 0);
  display.print(value); 

  display.drawRect(5+60, 9, 17, 55, WHITE);

  if (value<512){
    int x = map(value,128,0,36,61);
    for (int i=10; i<17; i++){
      display.drawLine(i+60, 36 , i+60, x, 1);
    }
   }
  else if (value>512){
    int y = map(value,128,255,36,10);
    for (int i=10; i<17; i++){
      display.drawLine(i+60, 36 , i+60, y, 1);
    }
  }

}
void auxCh1_data(){

  potVal = analogRead(potPin);
  value = map(potVal,0,1023,0,255);
  display.fillRect(90, 0, 38, 22, 1);
  display.setTextSize(1);
  display.setTextColor(0);
  display.setCursor(95, 3);
  display.print("AUX01");
  display.setCursor(100, 12);
  display.print(value); 
  
}
void auxCh2_data(){

  potVal = analogRead(potPin);
  value = map(potVal,0,1023,0,255);
  display.fillRect(90, 24, 38, 22, 1);
  display.setTextSize(1);
  display.setTextColor(0);
  display.setCursor(95, 28);
  display.print("AUX02");
  display.setCursor(100, 37);
  display.print(value); 
  
}
void auxCh3_data(){

  potVal = analogRead(potPin);
  value = map(potVal,0,1023,0,1);
  display.fillRect(90, 48, 38, 16, 1);
  display.drawLine(109, 48 , 109, 64, 0);
  display.drawLine(108, 48 , 108, 64, 0);
  display.setTextSize(2);
  display.setTextColor(0);
  display.setCursor(95, 49);
  display.print(value); 
  
}
void auxCh4_data(){

  potVal = analogRead(potPin);
  //display.drawRect(90, 47, 38, 17, 1);
  //display.drawLine(109, 47 , 109, 64, 1);
  display.setTextSize(2);
  display.setTextColor(0);
  display.setCursor(114, 49);
  if (potVal<450){
  display.print("L");
  } 
  else if (potVal>570){
  display.print("H");
  } 
  else
  display.print("M");
}
void setupGreet(){
 display.clearDisplay(); 
 display.setTextColor(1);
 display.setTextSize(2);
 display.setCursor(17, 20);
 display.setTextWrap(false);
 display.print("08 CH TX");
 display.setTextColor(1);
 display.setTextSize(1);
 display.setCursor(55, 4);
 display.setTextWrap(false);
 display.print("DIY");
 display.setTextColor(1);
 display.setTextSize(1);
 display.setCursor(14, 46);
 display.setTextWrap(false);
 display.print("By Neel, 10.01.24");
 display.display();
}

void menuPage(){
 display.clearDisplay();
 display.drawRect(12, 1, 108, 19, 1);
 display.drawRect(12, 22, 108, 19, 1);
 display.drawRect(12, 43, 108, 19, 1);
 display.drawBitmap(4, 7, image_ButtonRight_4x7_bits, 4, 7, 1);
 display.setTextColor(1);
 display.setTextSize(2);
 display.setCursor(25, 3);
 display.setTextWrap(false);
 display.print("Reverse");
 display.setTextColor(1);
 display.setTextSize(2);
 display.setCursor(25, 24);
 display.setTextWrap(false);
 display.print("Borders");
 display.setTextColor(1);
 display.setTextSize(2);
 display.setCursor(31, 45);
 display.setTextWrap(false);
 display.print("Elevon");
 display.display();
}
void borderPage1(){
 display.clearDisplay();
 display.drawRect(12, 1, 108, 19, 1);
 display.drawRect(12, 22, 108, 19, 1);
 display.drawRect(12, 43, 108, 19, 1);
 display.drawBitmap(4, 28, image_ButtonRight_4x7_bits, 4, 7, 1);
 display.setTextColor(1);
 display.setTextSize(2);
 display.setCursor(25, 3);
 display.setTextWrap(false);
 display.print("Reverse");
 display.setTextColor(1);
 display.setTextSize(2);
 display.setCursor(25, 24);
 display.setTextWrap(false);
 display.print("Borders");
 display.setTextColor(1);
 display.setTextSize(2);
 display.setCursor(31, 45);
 display.setTextWrap(false);
 display.print("Elevon");
 display.display();
}
void elevonPage1(){
 display.clearDisplay();
 display.drawRect(12, 1, 108, 19, 1);
 display.drawRect(12, 22, 108, 19, 1);
 display.drawRect(12, 43, 108, 19, 1);
 display.drawBitmap(4, 49, image_ButtonRight_4x7_bits, 4, 7, 1);
 display.setTextColor(1);
 display.setTextSize(2);
 display.setCursor(25, 3);
 display.setTextWrap(false);
 display.print("Reverse");
 display.setTextColor(1);
 display.setTextSize(2);
 display.setCursor(25, 24);
 display.setTextWrap(false);
 display.print("Borders");
 display.setTextColor(1);
 display.setTextSize(2);
 display.setCursor(31, 45);
 display.setTextWrap(false);
 display.print("Elevon");
 display.display();
}

void reversePage(){
 display.clearDisplay();
 display.drawRect(14, 2, 58, 13, 1);
 display.drawRect(14, 17, 58, 13, 1);
 display.drawBitmap(4, 6, image_ButtonRight_4x7_bits, 4, 7, 1);
 display.drawRect(14, 32, 58, 13, 1);
 display.drawRect(14, 47, 58, 13, 1);
 display.setTextColor(1);
 display.setTextSize(1);
 display.setCursor(25, 5);
 display.setTextWrap(false);
 display.print("Ch - 1");
 display.setCursor(25, 20);
 display.setTextWrap(false);
 display.print("Ch - 2");
 display.setCursor(25, 35);
 display.setTextWrap(false);
 display.print("Ch - 3");
 display.setCursor(25, 50);
 display.setTextWrap(false);
 display.print("Ch - 4");
 display.drawRect(81, 2, 39, 13, 1);
 display.drawRect(81, 17, 39, 13, 1);
 display.drawRect(81, 32, 39, 13, 1);
 display.drawRect(81, 47, 39, 13, 1);
 display.setCursor(92, 5);
 display.setTextWrap(false);
 if (revCh1==false) display.print("OFF");
 else if (revCh1==true) display.print("ON");
 display.setCursor(92, 20);
 display.setTextWrap(false);
 if (revCh2==false) display.print("OFF");
 else if (revCh2==true) display.print("ON");
 display.setCursor(92, 35);
 display.setTextWrap(false);
 if (revCh3==false) display.print("OFF");
 else if (revCh3==true) display.print("ON");
 display.setCursor(92, 50);
 if (revCh4==false) display.print("OFF");
 else if (revCh4==true) display.print("ON");
 display.display();
}
void ch2Reverse(){
 display.clearDisplay();
 display.drawRect(14, 2, 58, 13, 1);
 display.drawRect(14, 17, 58, 13, 1);
 display.drawBitmap(4, 20, image_ButtonRight_4x7_bits, 4, 7, 1);
 display.drawRect(14, 32, 58, 13, 1);
 display.drawRect(14, 47, 58, 13, 1);
 display.setTextColor(1);
 display.setTextSize(1);
 display.setCursor(25, 5);
 display.setTextWrap(false);
 display.print("Ch - 1");
 display.setCursor(25, 20);
 display.setTextWrap(false);
 display.print("Ch - 2");
 display.setCursor(25, 35);
 display.setTextWrap(false);
 display.print("Ch - 3");
 display.setCursor(25, 50);
 display.setTextWrap(false);
 display.print("Ch - 4");
 display.drawRect(81, 2, 39, 13, 1);
 display.drawRect(81, 17, 39, 13, 1);
 display.drawRect(81, 32, 39, 13, 1);
 display.drawRect(81, 47, 39, 13, 1);
 display.setCursor(92, 5);
 display.setTextWrap(false);
 if (revCh1==false) display.print("OFF");
 else if (revCh1==true) display.print("ON");
 display.setCursor(92, 20);
 display.setTextWrap(false);
 if (revCh2==false) display.print("OFF");
 else if (revCh2==true) display.print("ON");
 display.setCursor(92, 35);
 display.setTextWrap(false);
 if (revCh3==false) display.print("OFF");
 else if (revCh3==true) display.print("ON");
 display.setCursor(92, 50);
 if (revCh4==false) display.print("OFF");
 else if (revCh4==true) display.print("ON");
 display.display();
}
void ch3Reverse(){
 display.clearDisplay();
 display.drawRect(14, 2, 58, 13, 1);
 display.drawRect(14, 17, 58, 13, 1);
 display.drawBitmap(4, 35, image_ButtonRight_4x7_bits, 4, 7, 1);
 display.drawRect(14, 32, 58, 13, 1);
 display.drawRect(14, 47, 58, 13, 1);
 display.setTextColor(1);
 display.setTextSize(1);
 display.setCursor(25, 5);
 display.setTextWrap(false);
 display.print("Ch - 1");
 display.setCursor(25, 20);
 display.setTextWrap(false);
 display.print("Ch - 2");
 display.setCursor(25, 35);
 display.setTextWrap(false);
 display.print("Ch - 3");
 display.setCursor(25, 50);
 display.setTextWrap(false);
 display.print("Ch - 4");
 display.drawRect(81, 2, 39, 13, 1);
 display.drawRect(81, 17, 39, 13, 1);
 display.drawRect(81, 32, 39, 13, 1);
 display.drawRect(81, 47, 39, 13, 1);
 display.setCursor(92, 5);
 display.setTextWrap(false);
 if (revCh1==false) display.print("OFF");
 else if (revCh1==true) display.print("ON");
 display.setCursor(92, 20);
 display.setTextWrap(false);
 if (revCh2==false) display.print("OFF");
 else if (revCh2==true) display.print("ON");
 display.setCursor(92, 35);
 display.setTextWrap(false);
 if (revCh3==false) display.print("OFF");
 else if (revCh3==true) display.print("ON");
 display.setCursor(92, 50);
 if (revCh4==false) display.print("OFF");
 else if (revCh4==true) display.print("ON");
 display.display();
}
void ch4Reverse(){
 display.clearDisplay();
 display.drawRect(14, 2, 58, 13, 1);
 display.drawRect(14, 17, 58, 13, 1);
 display.drawBitmap(4, 50, image_ButtonRight_4x7_bits, 4, 7, 1);
 display.drawRect(14, 32, 58, 13, 1);
 display.drawRect(14, 47, 58, 13, 1);
 display.setTextColor(1);
 display.setTextSize(1);
 display.setCursor(25, 5);
 display.setTextWrap(false);
 display.print("Ch - 1");
 display.setCursor(25, 20);
 display.setTextWrap(false);
 display.print("Ch - 2");
 display.setCursor(25, 35);
 display.setTextWrap(false);
 display.print("Ch - 3");
 display.setCursor(25, 50);
 display.setTextWrap(false);
 display.print("Ch - 4");
 display.drawRect(81, 2, 39, 13, 1);
 display.drawRect(81, 17, 39, 13, 1);
 display.drawRect(81, 32, 39, 13, 1);
 display.drawRect(81, 47, 39, 13, 1);
 display.setCursor(92, 5);
 display.setTextWrap(false);
 if (revCh1==false) display.print("OFF");
 else if (revCh1==true) display.print("ON");
 display.setCursor(92, 20);
 display.setTextWrap(false);
 if (revCh2==false) display.print("OFF");
 else if (revCh2==true) display.print("ON");
 display.setCursor(92, 35);
 display.setTextWrap(false);
 if (revCh3==false) display.print("OFF");
 else if (revCh3==true) display.print("ON");
 display.setCursor(92, 50);
 if (revCh4==false) display.print("OFF");
 else if (revCh4==true) display.print("ON");
 display.display();
}
void ch5Reverse(){
 display.clearDisplay();
 display.drawRect(14, 2, 58, 13, 1);
 display.drawRect(14, 17, 58, 13, 1);
 display.drawBitmap(4, 6, image_ButtonRight_4x7_bits, 4, 7, 1);
 display.drawRect(14, 32, 58, 13, 1);
 display.drawRect(14, 47, 58, 13, 1);
 display.setTextColor(1);
 display.setTextSize(1);
 display.setCursor(25, 5);
 display.setTextWrap(false);
 display.print("Ch - 5");
 display.setCursor(25, 20);
 display.setTextWrap(false);
 display.print("Ch - 6");
 display.setCursor(25, 35);
 display.setTextWrap(false);
 display.print("Ch - 7");
 display.setCursor(25, 50);
 display.setTextWrap(false);
 display.print("Ch - 8");
 display.drawRect(81, 2, 39, 13, 1);
 display.drawRect(81, 17, 39, 13, 1);
 display.drawRect(81, 32, 39, 13, 1);
 display.drawRect(81, 47, 39, 13, 1);
 display.setCursor(92, 5);
 display.setTextWrap(false);
 if (revCh5==false) display.print("OFF");
 else if (revCh5==true) display.print("ON");
 display.setCursor(92, 20);
 display.setTextWrap(false);
 if (revCh6==false) display.print("OFF");
 else if (revCh6==true) display.print("ON");
 display.setCursor(92, 35);
 display.setTextWrap(false);
 if (revCh7==false) display.print("OFF");
 else if (revCh7==true) display.print("ON");
 display.setCursor(92, 50);
 display.setTextWrap(false);
 if (revCh8==false) display.print("OFF");
 else if (revCh8==true) display.print("ON");
 display.display();
}
void ch6Reverse(){
 display.clearDisplay();
 display.drawRect(14, 2, 58, 13, 1);
 display.drawRect(14, 17, 58, 13, 1);
 display.drawBitmap(4, 20, image_ButtonRight_4x7_bits, 4, 7, 1);
 display.drawRect(14, 32, 58, 13, 1);
 display.drawRect(14, 47, 58, 13, 1);
 display.setTextColor(1);
 display.setTextSize(1);
 display.setCursor(25, 5);
 display.setTextWrap(false);
 display.print("Ch - 5");
 display.setCursor(25, 20);
 display.setTextWrap(false);
 display.print("Ch - 6");
 display.setCursor(25, 35);
 display.setTextWrap(false);
 display.print("Ch - 7");
 display.setCursor(25, 50);
 display.setTextWrap(false);
 display.print("Ch - 8");
 display.drawRect(81, 2, 39, 13, 1);
 display.drawRect(81, 17, 39, 13, 1);
 display.drawRect(81, 32, 39, 13, 1);
 display.drawRect(81, 47, 39, 13, 1);
 display.setCursor(92, 5);
 display.setTextWrap(false);
 if (revCh5==false) display.print("OFF");
 else if (revCh5==true) display.print("ON");
 display.setCursor(92, 20);
 display.setTextWrap(false);
 if (revCh6==false) display.print("OFF");
 else if (revCh6==true) display.print("ON");
 display.setCursor(92, 35);
 display.setTextWrap(false);
 if (revCh7==false) display.print("OFF");
 else if (revCh7==true) display.print("ON");
 display.setCursor(92, 50);
 display.setTextWrap(false);
 if (revCh8==false) display.print("OFF");
 else if (revCh8==true) display.print("ON");
 display.display();
}
void ch7Reverse(){
 display.clearDisplay();
 display.drawRect(14, 2, 58, 13, 1);
 display.drawRect(14, 17, 58, 13, 1);
 display.drawBitmap(4, 35, image_ButtonRight_4x7_bits, 4, 7, 1);
 display.drawRect(14, 32, 58, 13, 1);
 display.drawRect(14, 47, 58, 13, 1);
 display.setTextColor(1);
 display.setTextSize(1);
 display.setCursor(25, 5);
 display.setTextWrap(false);
 display.print("Ch - 5");
 display.setCursor(25, 20);
 display.setTextWrap(false);
 display.print("Ch - 6");
 display.setCursor(25, 35);
 display.setTextWrap(false);
 display.print("Ch - 7");
 display.setCursor(25, 50);
 display.setTextWrap(false);
 display.print("Ch - 8");
 display.drawRect(81, 2, 39, 13, 1);
 display.drawRect(81, 17, 39, 13, 1);
 display.drawRect(81, 32, 39, 13, 1);
 display.drawRect(81, 47, 39, 13, 1);
 display.setCursor(92, 5);
 display.setTextWrap(false);
 if (revCh5==false) display.print("OFF");
 else if (revCh5==true) display.print("ON");
 display.setCursor(92, 20);
 display.setTextWrap(false);
 if (revCh6==false) display.print("OFF");
 else if (revCh6==true) display.print("ON");
 display.setCursor(92, 35);
 display.setTextWrap(false);
 if (revCh7==false) display.print("OFF");
 else if (revCh7==true) display.print("ON");
 display.setCursor(92, 50);
 display.setTextWrap(false);
 if (revCh8==false) display.print("OFF");
 else if (revCh8==true) display.print("ON");
 display.display();
}
void ch8Reverse(){
 display.clearDisplay();
 display.drawRect(14, 2, 58, 13, 1);
 display.drawRect(14, 17, 58, 13, 1);
 display.drawBitmap(4, 50, image_ButtonRight_4x7_bits, 4, 7, 1);
 display.drawRect(14, 32, 58, 13, 1);
 display.drawRect(14, 47, 58, 13, 1);
 display.setTextColor(1);
 display.setTextSize(1);
 display.setCursor(25, 5);
 display.setTextWrap(false);
 display.print("Ch - 5");
 display.setCursor(25, 20);
 display.setTextWrap(false);
 display.print("Ch - 6");
 display.setCursor(25, 35);
 display.setTextWrap(false);
 display.print("Ch - 7");
 display.setCursor(25, 50);
 display.setTextWrap(false);
 display.print("Ch - 8");
 display.drawRect(81, 2, 39, 13, 1);
 display.drawRect(81, 17, 39, 13, 1);
 display.drawRect(81, 32, 39, 13, 1);
 display.drawRect(81, 47, 39, 13, 1);
 display.setCursor(92, 5);
 display.setTextWrap(false);
 if (revCh5==false) display.print("OFF");
 else if (revCh5==true) display.print("ON");
 display.setCursor(92, 20);
 display.setTextWrap(false);
 if (revCh6==false) display.print("OFF");
 else if (revCh6==true) display.print("ON");
 display.setCursor(92, 35);
 display.setTextWrap(false);
 if (revCh7==false) display.print("OFF");
 else if (revCh7==true) display.print("ON");
 display.setCursor(92, 50);
 display.setTextWrap(false);
 if (revCh8==false) display.print("OFF");
 else if (revCh8==true) display.print("ON");
 display.display();
}
void elevonPage(){
 display.clearDisplay();
 display.setTextColor(1);
 display.setTextSize(2);
 display.setCursor(4, 3);
 display.setTextWrap(false);
 display.print("Elevon Mix");
 display.drawRect(25, 22, 74, 17, 1);
 display.drawRect(25, 43, 74, 17, 1);
 display.setTextColor(1);
 display.setTextSize(1);
 display.setTextWrap(false);
 if (elevonMix==false){
 display.setCursor(53, 27);
 display.print("OFF");
 }
 else if (elevonMix==true){
 display.setCursor(36, 27);
 display.print("ACTIVATED");
 }
 display.setCursor(44, 48);
 display.setTextWrap(false);
 display.print("OFFSET"); 
 display.drawBitmap(17, 28, image_ButtonRight_4x7_bits, 4, 7, 1);
 display.display();
}
void offsetPage1(){
 display.clearDisplay();
 display.setTextColor(1);
 display.setTextSize(2);
 display.setCursor(4, 3);
 display.setTextWrap(false);
 display.print("Elevon Mix");
 display.drawRect(25, 22, 74, 17, 1);
 display.drawRect(25, 43, 74, 17, 1);
 display.setTextColor(1);
 display.setTextSize(1);
 display.setCursor(53, 27);
 if (elevonMix==false){
 display.setCursor(53, 27);
 display.print("OFF");
 }
 else if (elevonMix==true){
 display.setCursor(36, 27);
 display.print("ACTIVATED");
 }
 display.setCursor(44, 48);
 display.setTextWrap(false);
 display.print("OFFSET"); 
 display.drawBitmap(17, 48, image_ButtonRight_4x7_bits, 4, 7, 1);
 display.display();
}
void offsetPage(){
 offsetMix = constrain(offsetMix,35,65);
   
 display.clearDisplay();
 display.setTextColor(1);
 display.setTextSize(2);
 display.setCursor(41, 30);
 display.setTextWrap(false);
 if(!digitalRead(upKey)) {
   offsetMix = offsetMix+1;
 display.print(offsetMix);
 while (!digitalRead(upKey));
  }else if(!digitalRead(dnKey)){
   offsetMix = offsetMix-1;
   display.print(offsetMix);
 while (!digitalRead(upKey));
  }else{
   display.print(offsetMix);
  }
 display.setCursor(28, 4);
 display.setTextWrap(false);
 display.print("OFFSET");
 display.setCursor(74, 30);
 display.setTextWrap(false);
 display.print("%");
 display.drawBitmap(23, 34, image_ButtonLeft_4x7_bits, 4, 7, 1);
 display.drawBitmap(98, 34, image_ButtonRight_4x7_bits, 4, 7, 1);
 display.setTextSize(1);
 display.setCursor(33, 54);
 display.setTextWrap(false);
 display.print("35% TO 65%");
 display.display();
  
}
void checkOffsetStatus(){
 if(page4==2){
  if (!digitalRead(selKey) && offsetStatus==0){
      //offsetPage();
      offsetStatus=1;
      while (!digitalRead(selKey));
      }
      else if (!digitalRead(bacKey) && offsetStatus==1){
    elevonPage();
    offsetStatus=0;
    page4=1;
    while (!digitalRead(bacKey));
  }
 }
}
void borderPage(){      // Temporarey Under Construction
 display.clearDisplay();
 display.setTextColor(1);
 display.setTextSize(1);
 display.setCursor(10, 8);
 display.setTextWrap(false);
 display.print("THIS PAGE IS UNDER");
 display.setTextColor(1);
 display.setTextSize(1);
 display.setCursor(28, 24);
 display.setTextWrap(false);
 display.print("CONSTRUCTION");
 display.setTextColor(1);
 display.setTextSize(3);
 display.setCursor(36, 38);
 display.setTextWrap(false);
 display.print("(!)");
 display.display();
}