//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();
}
nano:12
nano:11
nano:10
nano:9
nano:8
nano:7
nano:6
nano:5
nano:4
nano:3
nano:2
nano:GND.2
nano:RESET.2
nano:0
nano:1
nano:13
nano:3.3V
nano:AREF
nano:A0
nano:A1
nano:A2
nano:A3
nano:A4
nano:A5
nano:A6
nano:A7
nano:5V
nano:RESET
nano:GND.1
nano:VIN
nano:12.2
nano:5V.2
nano:13.2
nano:11.2
nano:RESET.3
nano:GND.3
oled1:GND
oled1:VCC
oled1:SCL
oled1:SDA
pot1:GND
pot1:SIG
pot1:VCC
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
btn2:1.l
btn2:2.l
btn2:1.r
btn2:2.r
btn3:1.l
btn3:2.l
btn3:1.r
btn3:2.r
btn4:1.l
btn4:2.l
btn4:1.r
btn4:2.r