#include "U8g2lib.h" // librarie pt OLED
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0);
byte audio_bar_height[7]; // inaltime bare
byte audio_bar_peak[7]; // pozitie bare pt varf
const unsigned char upir_logo [] PROGMEM = {
0xEA, 0x3A, 0xAA, 0x28, 0x6A, 0x1A, 0x26, 0x2A, };
void setup() {
u8g2.setColorIndex(1); // seteaza culoarea alb
u8g2.begin(); // incepe display-ul pe OLED
}
void loop() { // main loop
u8g2.clearBuffer(); // curata bufferul de pixelii din memorie
for (int i=0; i<7; i++) { // bucla pt cele 7 frecevnte
int random_value = random(1024); // afisare random pt test
audio_bar_height[i] = audio_bar_height[i] + ((map(random_value, 0, 1024, 0, 53) - audio_bar_height[i]) / 4.0); // update la inaltimea barii
// calculeaza pozitia varfului
if (audio_bar_peak[i] < audio_bar_height[i]) { // daca varful este sub poz curenta a barii
audio_bar_peak[i] = audio_bar_height[i]; // muta varful la urmatorul maxim
} else if (audio_bar_peak[i] > audio_bar_height[i]) { // daca bara e sub varf
audio_bar_peak[i]--; // muta incep varful in jos, cate un pixel/frame
}
u8g2.drawBox(2 + i*19, 53-audio_bar_height[i], 10, audio_bar_height[i]); // deseneaza barele
u8g2.drawBox(2 + i*19, 53-audio_bar_peak[i], 10, 1); // deseneaza varful
}
// scrie frecventele
u8g2.setFont(u8g2_font_nerhoe_tr); // font
u8g2.drawStr( 2, 64, "63");
u8g2.drawStr( 19, 64, "160");
u8g2.drawStr( 37, 64, "400");
u8g2.drawStr( 60, 64, "1K");
u8g2.drawStr( 75, 64, "2.5K");
u8g2.drawStr( 95, 64, "6.3K");
u8g2.drawStr(115, 64, "16K");
u8g2.drawXBMP(0, 0, 16, 4, upir_logo);
u8g2.sendBuffer(); // trimite bufferul pt afisaj
}