#include <Arduino.h>
#include <U8g2lib.h>
#include <SPI.h>
#include <Wire.h>
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0);
float radio_rate_test_data[40] = {123, 432, 543, 1020, 349, 123, 432, 543, 1020, 349, 123, 432, 543, 1020, 349, 123, 432, 543, 1020, 349, 123, 432, 543, 1020, 349, 123, 432, 543, 1020, 349, 123, 432, 543, 1020, 349, 123, 432, 543, 1020, 349,};
uint16_t battery = 100;
enum battery_states {
full = 90,
high = 75,
half = 50,
medium = 10,
low
};
uint16_t min_frequency = 720;
uint16_t max_frequency = 1020;
uint16_t middletop_num = 1;
bool attention = true;
bool alert = false;
void setup(){
u8g2.begin();
u8g2.setFont(u8g2_font_6x12_tf);
randomSeed(analogRead(0));
logo();
calibrating();
}
void loop(){
ui();
delay(200);
// made for preview and works on random. erase and add logic
fill_signal_array_with_random_nums(0, 1020);
randomise_stats();
}
void randomise_stats(){
if (5 > random(1,10)){
battery = random(1,100);
switch(random(1,3)){
case 1:
min_frequency = 900;
max_frequency = 1020;
break;
case 2:
min_frequency = 780;
max_frequency = 900;
break;
case 3:
min_frequency = 660;
max_frequency = 780;
break;
}
if (random(1,5) > 2){alert = ! alert;}
attention = !attention;
middletop_num = random(1,3);
}
}
void draw_alert(){
u8g2.drawLine(50, 17, 50, 31);
u8g2.drawLine(51, 17, 51, 31);
u8g2.drawLine(52, 17, 52, 23);
u8g2.drawLine(52, 25, 52, 31);
u8g2.drawLine(53, 17, 53, 22);
u8g2.drawLine(53, 26, 53, 31);
u8g2.drawLine(54, 17, 54, 21);
u8g2.drawLine(54, 27, 54, 31);
u8g2.drawLine(55, 17, 55, 20);
u8g2.drawLine(55, 23, 55, 25);
u8g2.drawLine(55, 28, 55, 31);
u8g2.drawLine(56, 17, 56, 19);
u8g2.drawLine(56, 22, 56, 26);
u8g2.drawLine(56, 29, 56, 31);
u8g2.drawLine(57, 17, 57, 18);
u8g2.drawLine(57, 21, 57, 27);
u8g2.drawLine(57, 30, 57, 31);
u8g2.drawLine(58, 17, 58, 18);
u8g2.drawLine(58, 20, 58, 28);
u8g2.drawLine(58, 30, 58, 31);
u8g2.drawLine(59, 17, 59, 18);
u8g2.drawLine(59, 19, 59, 29);
u8g2.drawLine(59, 30, 59, 31);
u8g2.drawLine(60, 17, 60, 31);
u8g2.drawLine(61, 17, 61, 31);
u8g2.drawLine(62, 17, 62, 18);
u8g2.drawLine(62, 26, 62, 27);
u8g2.drawLine(62, 30, 62, 31);
u8g2.drawLine(63, 17, 63, 18);
u8g2.drawLine(63, 26, 63, 27);
u8g2.drawLine(63, 30, 63, 31);
u8g2.drawLine(64, 17, 64, 31);
u8g2.drawLine(65, 17, 65, 31);
u8g2.drawLine(66, 17, 66, 18);
u8g2.drawLine(66, 19, 66, 29);
u8g2.drawLine(66, 30, 66, 31);
u8g2.drawLine(67, 17, 67, 18);
u8g2.drawLine(67, 20, 67, 28);
u8g2.drawLine(67, 30, 67, 31);
u8g2.drawLine(68, 17, 68, 18);
u8g2.drawLine(68, 21, 68, 27);
u8g2.drawLine(68, 30, 68, 31);
u8g2.drawLine(69, 17, 69, 19);
u8g2.drawLine(69, 22, 69, 26);
u8g2.drawLine(69, 29, 69, 31);
u8g2.drawLine(70, 17, 70, 20);
u8g2.drawLine(70, 23, 70, 25);
u8g2.drawLine(70, 28, 70, 31);
u8g2.drawLine(71, 17, 71, 21);
u8g2.drawLine(71, 27, 71, 31);
u8g2.drawLine(72, 17, 72, 22);
u8g2.drawLine(72, 26, 72, 31);
u8g2.drawLine(73, 17, 73, 23);
u8g2.drawLine(73, 25, 73, 31);
u8g2.drawLine(74, 17, 74, 31);
u8g2.drawLine(75, 17, 75, 31);
}
void draw_text(uint16_t x, uint16_t y, uint16_t size, char text[]){
switch(size){
case 1:
u8g2.setFont(u8g2_font_5x7_tf);
break;
case 2:
u8g2.setFont(u8g2_font_6x12_tf);
break;
case 3:
u8g2.setFont(u8g2_font_7x13_tf);
break;
case 4:
u8g2.setFont(u8g2_font_7x14B_tf);
break;
case 5:
u8g2.setFont(u8g2_font_9x15_tr);
break;
}
u8g2.drawStr(x, y, text);
}
void draw_text(uint16_t x, uint16_t y, uint16_t size, uint16_t text){
switch(size){
case 1:
u8g2.setFont(u8g2_font_5x7_tf);
break;
case 2:
u8g2.setFont(u8g2_font_6x12_tf);
break;
case 3:
u8g2.setFont(u8g2_font_7x13_tf);
break;
case 4:
u8g2.setFont(u8g2_font_7x14B_tf);
break;
case 5:
u8g2.setFont(u8g2_font_9x15_tr);
break;
}
char temp[16];
itoa(text, temp, 10);
u8g2.drawStr(x, y, temp);
}
void fill_signal_array_with_random_nums(uint16_t min_signal, uint16_t max_signal){
for (uint8_t i = 0; i < 40; i++){
radio_rate_test_data[i] = (float)random(min_signal, max_signal);
}
}
void draw_signal_rate(uint16_t min_signal, uint16_t max_signal, float signal_data[]){
uint16_t signal_diapazone = max_signal - min_signal;
uint16_t signal_step = signal_diapazone / 40;
for(uint16_t radio_rate_idx = 0; radio_rate_idx < 40; radio_rate_idx++){
// draw bar
u8g2.drawLine(5 + radio_rate_idx * 3, 60, 5 + radio_rate_idx * 3, 60 - 25 * signal_data[radio_rate_idx] / signal_diapazone);
u8g2.drawLine(6 + radio_rate_idx * 3, 60, 6 + radio_rate_idx * 3, 60 - 25 * signal_data[radio_rate_idx] / signal_diapazone);
}
}
void logo(){
u8g2.clearBuffer();
draw_text(33, 33, 2, "sugarrage");
u8g2.sendBuffer();
delay(1000);
}
void calibrating(){
for (uint8_t i = 0; i < 3; i++){
u8g2.clearBuffer();
// text
draw_text(27, 33, 2, "calibrating");
// progress bar
for (uint8_t j = 0; j <= i; j++){
u8g2.drawLine(32 + j * 20, 55, 47 + j * 20, 55);
}
// hz
draw_text(3, 8, 1, min_frequency);
draw_text(59, 12, 4, middletop_num);
draw_text(100, 8, 1, max_frequency);
// battery
uint16_t battery_bars;
if (battery > 90){
battery_bars = 4;
}
else if (battery > 75){
battery_bars = 3;
}
else if (battery > 50){
battery_bars = 2;
}
else if (battery > 10) {
battery_bars = 1;
}
else {
battery_bars = 0;
}
u8g2.drawLine(25, 3, 35, 3);
u8g2.drawLine(25, 9, 35, 9);
u8g2.drawLine(25, 3, 25, 9);
u8g2.drawLine(35, 3, 35, 9);
u8g2.drawLine(36, 5, 36, 7);
for (uint16_t battery_bar_iter = 0; battery_bar_iter < battery_bars; battery_bar_iter++){
u8g2.drawLine(27 + 2 * battery_bar_iter, 5, 27 + 2 * battery_bar_iter, 7);
}
u8g2.sendBuffer();
delay(1000);
}
}
void ui(){
u8g2.clearBuffer();
// nums ui
draw_text(3, 8, 1, min_frequency);
draw_text(59, 12, 4, middletop_num);
draw_text(100, 8, 1, max_frequency);
// battery ui
uint16_t battery_bars;
if (battery > 90){
battery_bars = 4;
}
else if (battery > 75){
battery_bars = 3;
}
else if (battery > 50){
battery_bars = 2;
}
else if (battery > 10) {
battery_bars = 1;
}
else {
battery_bars = 0;
}
u8g2.drawLine(25, 3, 35, 3);
u8g2.drawLine(25, 9, 35, 9);
u8g2.drawLine(25, 3, 25, 9);
u8g2.drawLine(35, 3, 35, 9);
u8g2.drawLine(36, 5, 36, 7);
for (uint16_t battery_bar_iter = 0; battery_bar_iter < battery_bars; battery_bar_iter++){
u8g2.drawLine(27 + 2 * battery_bar_iter, 5, 27 + 2 * battery_bar_iter, 7);
}
// attention
if(attention) {
draw_text(72, 13, 3, "(!)");
/*
u8g2.drawLine(72, 12, 77, 17);
u8g2.drawLine(72, 12, 77, 7);
u8g2.drawLine(83, 17, 83, 16);
u8g2.drawLine(84, 17, 84, 16);
u8g2.drawLine(83, 14, 83, 7);
u8g2.drawLine(84, 14, 84, 7);
u8g2.drawLine(94, 12, 89, 17);
u8g2.drawLine(94, 12, 89, 7);
*/
}
// alert
if(alert){ draw_alert(); }
// hz rate
draw_signal_rate(0, 1020, radio_rate_test_data);
u8g2.sendBuffer();
}
Loading
ssd1306
ssd1306