// Source code made by Lộc, DU ORIGIN is my logo, OLED project inspired by Upir (thank you Upir, otherwise this piece of code wouldn't exist)
// again, I'm noob af so my code is very unoptimized but at least it worked. To assistance ur understanding, I added some labels
// Requires U8g2 library to work, make sure you've installed em' in the Library Manager
#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h> // library requires for IIC communication
//U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE); // Pin-assigned I2C
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); // Hardware I2C, faster framerate
// images from https://lopaka.app/
// DU ORIGIN logo parts
static const unsigned char image__0_bits[] U8X8_PROGMEM = {0xc0,0x07,0x00,0xe0,0x0f,0x00,0xf0,0x1f,0x00,0xf8,0x3f,0x00,0xfc,0x7f,0x00,0xfe,0xff,0x00,0xff,0xff,0x01,0xff,0xff,0x01,0xff,0xff,0x01,0xff,0xff,0x01,0xff,0xff,0x01,0xfe,0xff,0x00,0xfc,0x7f,0x00,0xf8,0x3f,0x00,0xf0,0x1f,0x00,0xe0,0x0f,0x00,0xc0,0x07,0x00};
static const unsigned char image_D_bits[] U8X8_PROGMEM = {0x3f,0x00,0xc0,0x00,0x80,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x80,0x00,0xc0,0x00,0x3f,0x00};
static const unsigned char image_U_bits[] U8X8_PROGMEM = {0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x82,0x00,0xc6,0x00,0x38,0x00};
static const unsigned char image_O_bits[] U8X8_PROGMEM = {0x38,0x00,0xc6,0x00,0x82,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x82,0x00,0xc6,0x00,0x38,0x00};
static const unsigned char image_R_bits[] U8X8_PROGMEM = {0xff,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0xff,0x00,0x21,0x00,0x41,0x00,0x81,0x00,0x01,0x01};
static const unsigned char image_G_bits[] U8X8_PROGMEM = {0x38,0x00,0x46,0x00,0x02,0x00,0x01,0x00,0xf1,0x01,0x01,0x01,0x82,0x00,0xc6,0x00,0x38,0x00};
static const unsigned char image_N_bits[] U8X8_PROGMEM = {0x01,0x02,0x03,0x02,0x07,0x02,0x3d,0x02,0x79,0x02,0xf1,0x02,0x81,0x03,0x01,0x03,0x01,0x02};
// Attention bar at startup
static const unsigned char image_attention_bar_bits[] U8X8_PROGMEM = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe3,0x38,0x8e,0xe3,0x38,0x8e,0xe3,0x38,0x8e,0xe3,0x38,0x8e,0xe3,0x38,0x8e,0xe3,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
// Qualcomm icon
static const unsigned char image_Qualcomm_69x12_bits[] U8X8_PROGMEM = {0x78,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0xfe,0x01,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x86,0x01,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x03,0x1b,0xe3,0x1a,0xe7,0xe0,0x38,0x8e,0x03,0x03,0x1b,0xf3,0x9b,0xf3,0xe1,0x38,0x8e,0x03,0x03,0x1b,0x1b,0xdb,0x18,0xf3,0x7d,0xdf,0x07,0x63,0x1b,0x1b,0xdb,0x18,0xb3,0x6d,0xdb,0x06,0xe6,0x19,0x1b,0xdb,0x18,0xbb,0xef,0xfb,0x0e,0xfe,0xf9,0xf3,0x9b,0xf3,0x19,0xc7,0x71,0x0c,0xf8,0xf0,0xe1,0x1a,0xe7,0x1c,0xc7,0x71,0x1c,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
// Navigation icons
static const unsigned char image_ButtonLeftSmall_3x5_bits[] U8X8_PROGMEM = {0x04,0x06,0x07,0x06,0x04};
static const unsigned char image_ButtonRightSmall_3x5_bits[] U8X8_PROGMEM = {0x01,0x03,0x07,0x03,0x01};
static const unsigned char image_ButtonDown_7x4_bits[] U8X8_PROGMEM = {0x7f,0x3e,0x1c,0x08};
static const unsigned char image_ButtonUp_7x4_bits[] U8X8_PROGMEM = {0x08,0x1c,0x3e,0x7f};
static const unsigned char image_Pin_arrow_right_9x7_bits[] U8X8_PROGMEM = {0x20,0x00,0x60,0x00,0xff,0x00,0xff,0x01,0xff,0x00,0x60,0x00,0x20,0x00};
static const unsigned char image_Pin_back_arrow_10x8_bits[] U8X8_PROGMEM = {0x04,0x00,0x06,0x00,0xff,0x00,0x06,0x01,0x04,0x02,0x00,0x02,0x00,0x01,0xf8,0x00};
static const unsigned char image_Voldwn_6x6_bits[] U8X8_PROGMEM = {0x08,0x0c,0x2f,0x2f,0x0c,0x08};
static const unsigned char image_Volup_8x6_bits[] U8X8_PROGMEM = {0x48,0x8c,0xaf,0xaf,0x8c,0x48};
static const unsigned char image_info_7x7_bits[] U8X8_PROGMEM = {0x1c,0x36,0x7f,0x77,0x77,0x36,0x1c};
//Mode icons
static const unsigned char image_bluetooth_15x15_bits[] U8X8_PROGMEM = {0xfc,0x1f,0xfe,0x3f,0x7f,0x7f,0x7f,0x7e,0x6f,0x7d,0x5f,0x7b,0x3f,0x7d,0x7f,0x7e,0x3f,0x7d,0x5f,0x7b,0x6f,0x7d,0x7f,0x7e,0x7f,0x7f,0xfe,0x3f,0xfc,0x1f};
static const unsigned char image_wifi_15x15_bits[] U8X8_PROGMEM = {0xfc,0x1f,0xfe,0x3f,0xff,0x7f,0x0f,0x78,0xf7,0x77,0xfb,0x6f,0x0f,0x78,0xf7,0x77,0x1f,0x7c,0xef,0x7b,0x3f,0x7e,0x3f,0x7e,0x3f,0x7e,0xfe,0x3f,0xfc,0x1f};
static const unsigned char image_aux_15x15_bits[] U8X8_PROGMEM = {0xfc,0x1f,0xfe,0x3f,0xff,0x7f,0xff,0x7f,0xff,0x7f,0xfb,0x7f,0x43,0x64,0x43,0x44,0x43,0x64,0xfb,0x7f,0xff,0x7f,0xff,0x7f,0xff,0x7f,0xfe,0x3f,0xfc,0x1f};
static const unsigned char image_gear_15x15_bits[] U8X8_PROGMEM = {0xc0,0x01,0xe8,0x0b,0x7c,0x1f,0x7e,0x3f,0xcc,0x19,0xee,0x3b,0x3f,0x7e,0x33,0x66,0x3f,0x7e,0xee,0x3b,0xcc,0x19,0x7e,0x3f,0x7c,0x1f,0xe8,0x0b,0xc0,0x01};
static const unsigned char image_wifi_unavailable_20x20_bits[] U8X8_PROGMEM = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0x01,0xfc,0xff,0x03,0x0e,0x00,0x07,0x07,0x00,0x0e,0xe3,0x7f,0x0c,0xf1,0xff,0x08,0x38,0xc0,0x01,0x1c,0x80,0x03,0x88,0x1f,0x01,0xc0,0x3f,0x00,0xe0,0x79,0x00,0x40,0x20,0x07,0x00,0x86,0x08,0x00,0x0f,0x04,0x00,0x0f,0x02,0x00,0x06,0x00,0x00,0x00,0x02};
static const unsigned char image_aux_36x14_bits[] U8X8_PROGMEM = {0x07,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0xff,0xff,0xf7,0xf7,0x07,0xff,0xff,0xf7,0xf7,0x0f,0xff,0xff,0xf7,0xf7,0x0f,0xff,0xff,0xf7,0xf7,0x0f,0xff,0xff,0xf7,0xf7,0x0f,0xff,0xff,0xf7,0xf7,0x07,0x07,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00};
static const unsigned char image_Bluetooth_14x20_bits[] U8X8_PROGMEM = {0xc0,0x03,0xc0,0x07,0xc3,0x0e,0xc7,0x1c,0xce,0x38,0xdc,0x38,0xf8,0x1c,0xf0,0x0e,0xe0,0x07,0xc0,0x03,0xc0,0x03,0xe0,0x07,0xf0,0x0e,0xf8,0x1c,0xdc,0x38,0xce,0x38,0xc7,0x1c,0xc3,0x0e,0xc0,0x07,0xc0,0x03};
// Status bar icons
static const unsigned char image_Battery_26x8_bits[] U8X8_PROGMEM = {0xfe,0xff,0x7f,0x00,0x01,0x00,0x80,0x00,0x01,0x00,0x80,0x03,0x01,0x00,0x80,0x02,0x01,0x00,0x80,0x02,0x01,0x00,0x80,0x03,0x01,0x00,0x80,0x00,0xfe,0xff,0x7f,0x00};
static const unsigned char image_Bluetooth_Idle_5x8_bits[] U8X8_PROGMEM = {0x04,0x0d,0x16,0x0c,0x0c,0x16,0x0d,0x04};
static const unsigned char image_Alert_9x8_bits[] U8X8_PROGMEM = {0x10,0x00,0x38,0x00,0x28,0x00,0x6c,0x00,0x6c,0x00,0xfe,0x00,0xee,0x00,0xff,0x01};
char buffer[32]; // helper buffer to construct a string to be displayed
float batteryLevel; // Display battery level, max 20
float vout = 0.0; // valued input
float vin = 0.0; // Actual voltage input
float R1 = 100000.0; // Resistor 1, 100k ohm, connected to VCC - analog pin
float R2 = 10000.0; // Resistor 2, 10k ohm, connected to GND - analog pin
int batteryValue = 0;
int a[5] = {};
int mode = 0; // display mode
int displayRefresh = 1; // Used to save MCU's processing power, screen will refresh once when change mode.
int btOptions = 0;
const int led1 = 3;
const int led2 = 5;
const int led3 = 6;
const int led4 = 9;
const int led5 = 10;
const int ledButton1 = 13;
const int button1 = A0;
const int button2 = A1;
const int button3 = A2;
const int button4 = A3;
const int volumeUp = 11; // Relay trigger, that's the way to control volume of the bluetooth module
const int volumeDown = 12; // Relay trigger
const int bluetoothPower = 4; // Ability to power on/off the bluetooth module
const int ampPower = 2; // Ability to power on/off the amplifier
const int inputDirection = 7; // relay triggers, switch input between bluetooth module/external AUX
const int batterySensor = A6; // Yeah, that's your battery sensor's analog pin
void setup() {
pinMode(button1, INPUT_PULLUP);
pinMode(button2, INPUT_PULLUP);
pinMode(button3, INPUT_PULLUP);
pinMode(button4, INPUT_PULLUP);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(ledButton1, OUTPUT);
pinMode(bluetoothPower, OUTPUT);
pinMode(ampPower, OUTPUT);
pinMode(inputDirection, OUTPUT);
pinMode(volumeUp, OUTPUT);
pinMode(volumeDown, OUTPUT);
u8g2.begin(); // start the u8g2 library
u8g2.setBitmapMode(1);
digitalWrite(bluetoothPower, LOW); // Make sure BT board is off
digitalWrite(ampPower, LOW); // make sure amps are off
u8g2.clearBuffer(); // Clear memory buffer
u8g2.setFont(u8g2_font_6x13_tf);
u8g2.drawStr(31, 36, "Made by Loc");
u8g2.drawPixel(86, 28); // Vietnamese fonts not supported, so I add some dots
u8g2.drawPixel(88, 28);
u8g2.drawPixel(87, 27);
u8g2.drawPixel(87, 37);
u8g2.sendBuffer(); // Send buffer that's already drew to the OLED display
for(int i = 0; i <= 5; i++) { // Button LED bliking at boot
digitalWrite(ledButton1, HIGH);
delay(300);
digitalWrite(ledButton1, LOW);
delay(300);
}
digitalWrite(ledButton1, HIGH);
attentionScreen(); // The "HEAVY DEVELOPMENT" attention screen
logoIntro(); // Logo intro
for(int i = 0; i <= 255; i++) {
ledControl(i, i, i, i, i);
delay(10);
}
delay(500);
for(int i = 0; i < 5; i++) {
ledWaveLR();
delay(500);
}
logoOutro(); // Logo outtro
batteryMeasurer(); // load the battery scale
delay(200);
ledPattern2();
}
void loop() {
if(mode == 0) {
homeScreen();
if(digitalRead(button1) == LOW) {
ledPattern1();
displayRefresh = 1;
mode = 1;
}
if(digitalRead(button2) == LOW) {
displayRefresh = 1;
mode = 2;
}
if(digitalRead(button3) == LOW) {
ledPattern1();
displayRefresh = 1;
mode = 3;
}
if(digitalRead(button4) == LOW) {
displayRefresh = 1;
mode = 4;
}
}
if(mode == 1) {
modeBluetooth();
}
if(mode == 2) {
modeWifi();
}
if(mode == 3) {
modeAUX();
}
if(mode == 4) {
modeSetting();
}
batteryMeasurer();
}
void homeScreen() {
if(displayRefresh == (1)) {
u8g2.clearBuffer();
u8g2.drawXBMP( 102, 0, 26, 8, image_Battery_26x8_bits);
u8g2.drawBox(104, 2, batteryLevel, 4);
u8g2.drawLine(128, 9, 0, 9);
u8g2.drawXBMP( 22, 27, 15, 15, image_bluetooth_15x15_bits);
u8g2.drawXBMP( 45, 27, 15, 15, image_wifi_15x15_bits);
u8g2.drawXBMP( 68, 27, 15, 15, image_aux_15x15_bits);
u8g2.drawXBMP( 91, 27, 15, 15, image_gear_15x15_bits);
u8g2.setFont(u8g2_font_6x13_tf);
u8g2.drawStr(0, 64, "Pick a mode");
u8g2.setFont(u8g2_font_tiny5_tf);
u8g2.setCursor(84, 7);
u8g2.print(vin);
u8g2.sendBuffer();
displayRefresh = 0;
}
delay(100);
}
void modeBluetooth() {
if(btOptions == (0)) {
if(displayRefresh == (1)) {
u8g2.clearBuffer();
u8g2.drawXBMP( 102, 0, 26, 8, image_Battery_26x8_bits);
u8g2.drawBox(104, 2, batteryLevel, 4);
u8g2.drawXBMP( 0, 0, 5, 8, image_Bluetooth_Idle_5x8_bits);
u8g2.drawLine(0, 9, 128, 9);
u8g2.drawXBMP( 19, 26, 14, 20, image_Bluetooth_14x20_bits);
u8g2.drawXBMP( 0, 56, 10, 8, image_Pin_back_arrow_10x8_bits);
u8g2.drawXBMP( 41, 58, 6, 6, image_Voldwn_6x6_bits);
u8g2.drawXBMP( 78, 58, 8, 6, image_Volup_8x6_bits);
u8g2.setFont(u8g2_font_tiny5_tf);
u8g2.setCursor(84, 7);
u8g2.print(vin);
u8g2.setFont(u8g2_font_6x13_tf);
u8g2.drawStr(45, 25, "Bluetooth on");
u8g2.setFont(u8g2_font_tiny5_tf);
u8g2.drawStr(45, 35, "Name: QCC3031E");
u8g2.drawStr(45, 41, "Address:");
u8g2.drawStr(45, 47, "23:05:16:00:03:28");
u8g2.setFont(u8g2_font_glasstown_nbp_tf);
u8g2.drawStr(98, 63, "options");
u8g2.sendBuffer();
digitalWrite(bluetoothPower, HIGH);
digitalWrite(ampPower, HIGH);
displayRefresh = 0;
delay(300);
}
if(digitalRead(button1) == LOW) {
digitalWrite(bluetoothPower, LOW);
digitalWrite(ampPower, LOW);
ledPattern2();
displayRefresh = 1;
delay(100);
mode = 0;
}
if(digitalRead(button2) == LOW) { // Volume down
digitalWrite(volumeDown, HIGH);
delay(200);
digitalWrite(volumeDown, LOW);
displayRefresh = 1;
}
if(digitalRead(button3) == LOW) { // Volume up
digitalWrite(volumeUp, HIGH);
delay(200);
digitalWrite(volumeUp, LOW);
displayRefresh = 1;
}
if(digitalRead(button4) == LOW) {
displayRefresh = 1;
delay(100);
btOptions = 1;
}
}
if(btOptions == (1)) {
if(displayRefresh == (1)) {
u8g2.clearBuffer();
u8g2.drawXBMP( 102, 0, 26, 8, image_Battery_26x8_bits);
u8g2.drawBox(104, 2, batteryLevel, 4);
u8g2.drawXBMP( 0, 0, 5, 8, image_Bluetooth_Idle_5x8_bits);
u8g2.drawLine(0, 9, 128, 9);
u8g2.drawXBMP( 0, 56, 10, 8, image_Pin_back_arrow_10x8_bits);
u8g2.drawXBMP( 41, 58, 7, 4, image_ButtonUp_7x4_bits);
u8g2.drawXBMP( 78, 58, 7, 4, image_ButtonDown_7x4_bits);
u8g2.drawXBMP( 119, 57, 9, 7, image_Pin_arrow_right_9x7_bits);
u8g2.setFont(u8g2_font_tiny5_tf);
u8g2.drawStr(48, 7, "OPTIONS");
u8g2.sendBuffer();
displayRefresh = 0;
delay(300);
}
if(digitalRead(button1) == LOW) {
displayRefresh = 1;
delay(100);
btOptions = 0;
}
}
}
void modeWifi() {
if(displayRefresh == (1)) {
u8g2.clearBuffer();
u8g2.drawXBMP( 102, 0, 26, 8, image_Battery_26x8_bits);
u8g2.drawBox(104, 2, batteryLevel, 4);
u8g2.drawLine(0, 9, 128, 9);
u8g2.drawXBMP( 0, 56, 10, 8, image_Pin_back_arrow_10x8_bits);
u8g2.drawXBMP( 15, 26, 20, 20, image_wifi_unavailable_20x20_bits);
u8g2.setFont(u8g2_font_6x13_tf);
u8g2.drawStr(50, 30, "Wifi not");
u8g2.drawStr(50, 40, "supported");
u8g2.setFont(u8g2_font_tiny5_tf);
u8g2.drawStr(50, 50, "(coming soon)");
u8g2.setFont(u8g2_font_tiny5_tf);
u8g2.setCursor(84, 7);
u8g2.print(vin);
u8g2.sendBuffer();
displayRefresh = 0;
delay(300);
}
if(digitalRead(button1) == LOW) {
displayRefresh = 1;
delay(100);
mode = 0;
}
}
void modeAUX() {
if(displayRefresh == (1)) {
u8g2.clearBuffer();
u8g2.drawXBMP( 102, 0, 26, 8, image_Battery_26x8_bits);
u8g2.drawBox(104, 2, batteryLevel, 4);
u8g2.drawLine(0, 9, 128, 9);
u8g2.drawXBMP( 0, 56, 10, 8, image_Pin_back_arrow_10x8_bits);
u8g2.drawXBMP( 10, 29, 36, 14, image_aux_36x14_bits);
u8g2.setFont(u8g2_font_6x13_tf);
u8g2.drawStr(55, 40, "AUX/Line in");
u8g2.drawXBMP( 121, 57, 7, 7, image_info_7x7_bits);
u8g2.setFont(u8g2_font_tiny5_tf);
u8g2.setCursor(84, 7);
u8g2.print(vin);
u8g2.sendBuffer();
digitalWrite(inputDirection, HIGH);
digitalWrite(ampPower, HIGH);
displayRefresh = 0;
delay(300);
}
if(digitalRead(button1) == LOW) {
digitalWrite(inputDirection, LOW);
digitalWrite(ampPower, LOW);
ledPattern2();
displayRefresh = 1;
delay(100);
mode = 0;
}
}
void modeSetting() {
if(displayRefresh == 1) {
u8g2.clearBuffer();
u8g2.drawXBMP( 102, 0, 26, 8, image_Battery_26x8_bits);
u8g2.drawBox(104, 2, batteryLevel, 4);
u8g2.drawLine(0, 9, 128, 9);
u8g2.drawXBMP( 0, 56, 10, 8, image_Pin_back_arrow_10x8_bits);
u8g2.drawXBMP( 41, 58, 7, 4, image_ButtonUp_7x4_bits);
u8g2.drawXBMP( 78, 58, 7, 4, image_ButtonDown_7x4_bits);
u8g2.drawXBMP( 119, 57, 9, 7, image_Pin_arrow_right_9x7_bits);
u8g2.setFont(u8g2_font_tiny5_tf);
u8g2.drawStr(46, 7, "SETTINGS");
u8g2.sendBuffer();
displayRefresh = 0;
delay(300);
}
if(digitalRead(button1) == LOW) {
displayRefresh = 1;
delay(100);
mode = 0;
}
}
void ledControl(byte led1Value, byte led2Value, byte led3Value, byte led4Value, byte led5Value) { // value depended brightness control for each LEDs (PWM), max 255
analogWrite(led1, led1Value);
analogWrite(led2, led2Value);
analogWrite(led3, led3Value);
analogWrite(led4, led4Value);
analogWrite(led5, led5Value);
}
void ledPattern1() { // 1 single middle, fade to full
for(int i = 0; i <= 255; i = i + 5) {
ledControl(i,i,255,i,i);
delay(10);
}
}
void ledPattern2() { // full fade to 1 single line
for(int i = 255; i >= 0; i = i - 5) {
ledControl(i,i,255,i,i);
delay(10);
}
}
void ledLeftToRight() {
for (int i = 0; i <= 255; i = i + 5) {
ledControl(i,0,0,0,0);
delay(2);
}
for (int i = 0; i <= 255; i = i + 5) {
ledControl(255,i,0,0,0);
delay(2);
}
for (int i = 0; i <= 255; i = i + 5) {
ledControl(255,255,i,0,0);
delay(2);
}
for (int i = 0; i <= 255; i = i + 5) {
ledControl(255-i,255,255,i,0);
delay(2);
}
for (int i = 0; i <= 255; i = i + 5) {
ledControl(0,255-i,255,255,i);
delay(2);
}
for (int i = 0; i <= 255; i = i + 5) {
ledControl(0,0,255-i,255,255);
delay(2);
}
for (int i = 0; i <= 255; i = i + 5) {
ledControl(0,0,0,255-i,255);
delay(2);
}
for (int i = 0; i <= 255; i = i + 5) {
ledControl(0,0,0,0,255-i);
delay(2);
}
}
void ledRightToLeft() {
for (int i = 0; i <= 255; i = i + 5) {
ledControl(0,0,0,0,i);
delay(2);
}
for (int i = 0; i <= 255; i = i + 5) {
ledControl(0,0,0,i,255);
delay(2);
}
for (int i = 0; i <= 255; i = i + 5) {
ledControl(0,0,i,255,255);
delay(2);
}
for (int i = 0; i <= 255; i = i + 5) {
ledControl(0,i,255,255,255-i);
delay(2);
}
for (int i = 0; i <= 255; i = i + 5) {
ledControl(i,255,255,255-i,0);
delay(2);
}
for (int i = 0; i <= 255; i = i + 5) {
ledControl(255,255,255-i,0,0);
delay(2);
}
for (int i = 0; i <= 255; i = i + 5) {
ledControl(255,255-i,0,0,0);
delay(2);
}
for (int i = 0; i <= 255; i = i + 5) {
ledControl(255-i,0,0,0,0);
delay(2);
}
}
void ledWaveLR() {
for (int i = 0; i <= 255; i = i + 5) {
ledControl(255-i,255,255,255,255);
delay(2);
}
for (int i = 0; i <= 255; i = i + 5) {
ledControl(0,255-i,255,255,255);
delay(2);
}
for (int i = 0; i <= 255; i = i + 5) {
ledControl(0,0,255-i,255,255);
delay(2);
}
for (int i = 0; i <= 255; i = i + 5) {
ledControl(i,0,0,255-i,255);
delay(2);
}
for (int i = 0; i <= 255; i = i + 5) {
ledControl(255,i,0,0,255-i);
delay(2);
}
for (int i = 0; i <= 255; i = i + 5) {
ledControl(255,255,i,0,0);
delay(2);
}
for (int i = 0; i <= 255; i = i + 5) {
ledControl(255,255,255,i,0);
delay(2);
}
for (int i = 0; i <= 255; i = i + 5) {
ledControl(255,255,255,255,i);
delay(2);
}
}
void logoIntro() { // Frame to Frame animation, DU logo intro
u8g2.clearBuffer();
u8g2.drawXBMP( 58, 24, 17, 17, image__0_bits);
u8g2.sendBuffer();
u8g2.clearBuffer();
u8g2.drawXBMP( 53, 24, 17, 17, image__0_bits);
u8g2.drawXBMP( 63, 28, 10, 9, image_N_bits);
u8g2.sendBuffer();
u8g2.clearBuffer();
u8g2.drawXBMP( 48, 24, 17, 17, image__0_bits);
u8g2.drawXBMP( 54, 28, 9, 9, image_G_bits);
u8g2.drawLine(65, 28, 65, 36);
u8g2.drawXBMP( 68, 28, 10, 9, image_N_bits);
u8g2.sendBuffer();
u8g2.clearBuffer();
u8g2.drawXBMP( 43, 24, 17, 17, image__0_bits);
u8g2.drawLine(56, 28, 56, 36);
u8g2.drawXBMP( 59, 28, 9, 9, image_G_bits);
u8g2.drawLine(70, 28, 70, 36);
u8g2.drawXBMP( 73, 28, 10, 9, image_N_bits);
u8g2.sendBuffer();
u8g2.clearBuffer();
u8g2.drawXBMP( 38, 24, 17, 17, image__0_bits);
u8g2.drawXBMP( 50, 28, 9, 9, image_R_bits);
u8g2.drawLine(61, 28, 61, 36);
u8g2.drawXBMP( 64, 28, 9, 9, image_G_bits);
u8g2.drawLine(75, 28, 75, 36);
u8g2.drawXBMP( 78, 28, 10, 9, image_N_bits);
u8g2.sendBuffer();
u8g2.clearBuffer();
u8g2.drawXBMP( 33, 24, 17, 17, image__0_bits);
u8g2.drawXBMP( 44, 28, 9, 9, image_O_bits);
u8g2.drawXBMP( 55, 28, 9, 9, image_R_bits);
u8g2.drawLine(66, 28, 66, 36);
u8g2.drawXBMP( 69, 28, 9, 9, image_G_bits);
u8g2.drawLine(80, 28, 80, 36);
u8g2.drawXBMP( 83, 28, 10, 9, image_N_bits);
u8g2.sendBuffer();
u8g2.clearBuffer();
u8g2.drawXBMP( 28, 24, 17, 17, image__0_bits);
u8g2.drawXBMP( 49, 28, 9, 9, image_O_bits);
u8g2.drawXBMP( 60, 28, 9, 9, image_R_bits);
u8g2.drawLine(71, 28, 71, 36);
u8g2.drawXBMP( 74, 28, 9, 9, image_G_bits);
u8g2.drawLine(85, 28, 85, 36);
u8g2.drawXBMP( 88, 28, 10, 9, image_N_bits);
u8g2.sendBuffer();
u8g2.clearBuffer();
u8g2.drawXBMP( 23, 24, 17, 17, image__0_bits);
u8g2.drawXBMP( 39, 28, 9, 9, image_U_bits);
u8g2.drawXBMP( 54, 28, 9, 9, image_O_bits);
u8g2.drawXBMP( 65, 28, 9, 9, image_R_bits);
u8g2.drawLine(76, 28, 76, 36);
u8g2.drawXBMP( 79, 28, 9, 9, image_G_bits);
u8g2.drawLine(90, 28, 90, 36);
u8g2.drawXBMP( 93, 28, 10, 9, image_N_bits);
u8g2.sendBuffer();
u8g2.clearBuffer();
u8g2.drawXBMP( 18, 24, 17, 17, image__0_bits);
u8g2.drawXBMP( 33, 28, 9, 9, image_D_bits);
u8g2.drawXBMP( 44, 28, 9, 9, image_U_bits);
u8g2.drawXBMP( 59, 28, 9, 9, image_O_bits);
u8g2.drawXBMP( 70, 28, 9, 9, image_R_bits);
u8g2.drawLine(81, 28, 81, 36);
u8g2.drawXBMP( 84, 28, 9, 9, image_G_bits);
u8g2.drawLine(95, 28, 95, 36);
u8g2.drawXBMP( 98, 28, 10, 9, image_N_bits);
u8g2.sendBuffer();
u8g2.clearBuffer();
u8g2.drawXBMP( 13, 24, 17, 17, image__0_bits);
u8g2.drawXBMP( 38, 28, 9, 9, image_D_bits);
u8g2.drawXBMP( 49, 28, 9, 9, image_U_bits);
u8g2.drawXBMP( 64, 28, 9, 9, image_O_bits);
u8g2.drawXBMP( 75, 28, 9, 9, image_R_bits);
u8g2.drawLine(86, 28, 86, 36);
u8g2.drawXBMP( 89, 28, 9, 9, image_G_bits);
u8g2.drawLine(100, 28, 100, 36);
u8g2.drawXBMP( 103, 28, 10, 9, image_N_bits);
u8g2.sendBuffer();
}
void logoOutro() { // Frame to Frame animation, DU logo outro
u8g2.clearBuffer();
u8g2.drawXBMP( 13, 24, 17, 17, image__0_bits);
u8g2.drawXBMP( 38, 28, 9, 9, image_D_bits);
u8g2.drawXBMP( 49, 28, 9, 9, image_U_bits);
u8g2.drawXBMP( 64, 28, 9, 9, image_O_bits);
u8g2.drawXBMP( 75, 28, 9, 9, image_R_bits);
u8g2.drawLine(86, 28, 86, 36);
u8g2.drawXBMP( 89, 28, 9, 9, image_G_bits);
u8g2.drawLine(100, 28, 100, 36);
u8g2.drawXBMP( 103, 28, 10, 9, image_N_bits);
u8g2.sendBuffer();
u8g2.clearBuffer();
u8g2.drawXBMP( 18, 24, 17, 17, image__0_bits);
u8g2.drawXBMP( 33, 28, 9, 9, image_D_bits);
u8g2.drawXBMP( 44, 28, 9, 9, image_U_bits);
u8g2.drawXBMP( 59, 28, 9, 9, image_O_bits);
u8g2.drawXBMP( 70, 28, 9, 9, image_R_bits);
u8g2.drawLine(81, 28, 81, 36);
u8g2.drawXBMP( 84, 28, 9, 9, image_G_bits);
u8g2.drawLine(95, 28, 95, 36);
u8g2.drawXBMP( 98, 28, 10, 9, image_N_bits);
u8g2.sendBuffer();
u8g2.clearBuffer();
u8g2.drawXBMP( 23, 24, 17, 17, image__0_bits);
u8g2.drawXBMP( 39, 28, 9, 9, image_U_bits);
u8g2.drawXBMP( 54, 28, 9, 9, image_O_bits);
u8g2.drawXBMP( 65, 28, 9, 9, image_R_bits);
u8g2.drawLine(76, 28, 76, 36);
u8g2.drawXBMP( 79, 28, 9, 9, image_G_bits);
u8g2.drawLine(90, 28, 90, 36);
u8g2.drawXBMP( 93, 28, 10, 9, image_N_bits);
u8g2.sendBuffer();
u8g2.clearBuffer();
u8g2.drawXBMP( 28, 24, 17, 17, image__0_bits);
u8g2.drawXBMP( 49, 28, 9, 9, image_O_bits);
u8g2.drawXBMP( 60, 28, 9, 9, image_R_bits);
u8g2.drawLine(71, 28, 71, 36);
u8g2.drawXBMP( 74, 28, 9, 9, image_G_bits);
u8g2.drawLine(85, 28, 85, 36);
u8g2.drawXBMP( 88, 28, 10, 9, image_N_bits);
u8g2.sendBuffer();
u8g2.clearBuffer();
u8g2.drawXBMP( 33, 24, 17, 17, image__0_bits);
u8g2.drawXBMP( 44, 28, 9, 9, image_O_bits);
u8g2.drawXBMP( 55, 28, 9, 9, image_R_bits);
u8g2.drawLine(66, 28, 66, 36);
u8g2.drawXBMP( 69, 28, 9, 9, image_G_bits);
u8g2.drawLine(80, 28, 80, 36);
u8g2.drawXBMP( 83, 28, 10, 9, image_N_bits);
u8g2.sendBuffer();
u8g2.clearBuffer();
u8g2.drawXBMP( 38, 24, 17, 17, image__0_bits);
u8g2.drawXBMP( 50, 28, 9, 9, image_R_bits);
u8g2.drawLine(61, 28, 61, 36);
u8g2.drawXBMP( 64, 28, 9, 9, image_G_bits);
u8g2.drawLine(75, 28, 75, 36);
u8g2.drawXBMP( 78, 28, 10, 9, image_N_bits);
u8g2.sendBuffer();
u8g2.clearBuffer();
u8g2.drawXBMP( 43, 24, 17, 17, image__0_bits);
u8g2.drawLine(56, 28, 56, 36);
u8g2.drawXBMP( 59, 28, 9, 9, image_G_bits);
u8g2.drawLine(70, 28, 70, 36);
u8g2.drawXBMP( 73, 28, 10, 9, image_N_bits);
u8g2.sendBuffer();
u8g2.clearBuffer();
u8g2.drawXBMP( 48, 24, 17, 17, image__0_bits);
u8g2.drawXBMP( 54, 28, 9, 9, image_G_bits);
u8g2.drawLine(65, 28, 65, 36);
u8g2.drawXBMP( 68, 28, 10, 9, image_N_bits);
u8g2.sendBuffer();
u8g2.clearBuffer();
u8g2.drawXBMP( 53, 24, 17, 17, image__0_bits);
u8g2.drawXBMP( 63, 28, 10, 9, image_N_bits);
u8g2.sendBuffer();
u8g2.clearBuffer();
u8g2.drawXBMP( 58, 24, 17, 17, image__0_bits);
u8g2.sendBuffer();
delay(100);
for(int i = 0; i <= 20; i++) {
u8g2.clearBuffer();
u8g2.drawXBMP( 58, (24 + i*i*0.5), 17, 17, image__0_bits);
u8g2.sendBuffer();
}
}
void attentionScreen() { // the attention screen
for(int i = 0; i < 15; i = i + 1) { // Line spread out
u8g2.clearBuffer();
u8g2.drawBox((62 - (i*5)), 30, (3+(i*10)), 3);
u8g2.sendBuffer();
}
u8g2.clearBuffer();
u8g2.drawXBMP( 0, 30, 128, 3, image_attention_bar_bits);
u8g2.sendBuffer();
delay(20);
u8g2.setFont(u8g2_font_spleen5x8_mf);
u8g2.drawStr(35, 22, "IN PROGRESS");
u8g2.sendBuffer();
delay(20);
u8g2.drawStr(23, 14, "HEAVY DEVELOPMENT");
u8g2.sendBuffer();
delay(20);
u8g2.drawXBMP( 10, 13, 9, 8, image_Alert_9x8_bits);
u8g2.drawXBMP( 109, 13, 9, 8, image_Alert_9x8_bits);
u8g2.drawStr(13, 46, "Some features are not");
u8g2.sendBuffer();
delay(20);
u8g2.drawStr(33, 55, "yet available");
u8g2.sendBuffer();
ledLeftToRight();
delay(500);
ledRightToLeft();
for(int i = 0; i < 13; i = i + 1) { // Line pull back
u8g2.clearBuffer();
u8g2.drawBox((i*5), 30, (128 - (i*10)), 3);
u8g2.sendBuffer();
}
u8g2.clearBuffer();
u8g2.sendBuffer();
}
void batteryMeasurer() { // Real-time battery voltage sensor, and battery scales being drawn
batteryValue = analogRead(batterySensor);
vout = (batteryValue * 5) / 1024.0;
vin = vout / (R2 / (R1 + R2));
if (vin < 0.09) {
vin = 0.0;
}
if(vin >= 12.2) { // Battery scales
batteryLevel = 20;
}
if((vin < 12.2) && (vin >= 11.2)) {
batteryLevel = 16;
}
if((vin < 11.2) && (vin >= 10.5)) {
batteryLevel = 10;
}
if((vin < 10.5) && (vin >= 8.0)) {
batteryLevel = 3;
}
if((vin < 8.0) && (vin >= 7.0)) {
batteryLevel = 1;
}
if(vin < 7.0) {
batteryLevel = 0;
}
}