245 lines
6.7 KiB
C
245 lines
6.7 KiB
C
#include <U8g2lib.h>
|
|
|
|
U8G2_ST7920_128X64_F_SW_SPI u8g2(U8G2_R0, 18, 23, 5, U8X8_PIN_NONE);
|
|
|
|
//splashscreen
|
|
const unsigned char logo [] U8X8_PROGMEM = {
|
|
0x00,0x00,0xff,0x07,0x00,0x00,0x00,0xe0,0x20,0x18,0x00,0x00,0x00,0x18,0x40,0x60,0x00,0x00,0x00,0x06,0x00,0x80,
|
|
0x01,0x00,0x00,0x07,0x00,0x00,0x06,0x00,0x80,0x05,0x00,0x00,0x0c,0x00,0xc0,0x00,0x40,0x00,0x08,0x00,0x40,0x00,
|
|
0x02,0x00,0x10,0x00,0x20,0x00,0x02,0x08,0x10,0x00,0x20,0x08,0x00,0x08,0x20,0x00,0x30,0x10,0x20,0x04,0x20,0x00,
|
|
0x30,0x10,0x20,0x00,0x21,0x00,0x51,0x20,0x22,0x80,0x21,0x02,0x91,0x20,0x24,0x82,0x20,0x02,0x11,0x40,0x24,0x42,
|
|
0x20,0x02,0x11,0x42,0x24,0x42,0x20,0x02,0x11,0x86,0x24,0x21,0x20,0x02,0x31,0x84,0x24,0x21,0x22,0x02,0x71,0x08,
|
|
0x25,0x11,0x23,0x02,0xd1,0x10,0x29,0x99,0x21,0x02,0x91,0x33,0xaa,0xc9,0x30,0x02,0x11,0x46,0xfe,0x65,0x2c,0x02,
|
|
0x31,0xdc,0x03,0x27,0x22,0x02,0xf1,0xf1,0x00,0x9c,0x21,0x02,0x11,0x67,0x00,0xd8,0x20,0x02,0x31,0x38,0x00,0x70,
|
|
0x20,0x02,0xf1,0x31,0x00,0x20,0x3e,0x02,0x11,0x13,0x00,0x40,0x21,0x02,0x31,0x0c,0x07,0xc0,0x23,0x02,0x71,0xe8,
|
|
0x18,0x60,0x2c,0x02,0xd1,0x39,0xe0,0x1c,0x30,0x02,0x11,0x07,0x00,0x03,0x20,0x02,0x11,0x00,0x00,0x00,0x20,0x02,
|
|
0x31,0xc0,0x1f,0xe0,0x27,0x02,0xf1,0x60,0x60,0x18,0x38,0x02,0x11,0x1f,0x80,0x07,0x20,0x02,0x11,0x00,0x00,0x00,
|
|
0x20,0x02,0x31,0x80,0x0f,0xc0,0x27,0x02,0x71,0x60,0x30,0x30,0x38,0x02,0x91,0x3f,0xc0,0x0f,0x20,0x02,0x11,0x00,
|
|
0x00,0x00,0x20,0x02,0x11,0x00,0x00,0x00,0x20,0x02,0x11,0x00,0x07,0x80,0x23,0x02,0x71,0xc0,0x18,0x60,0x3c,0x02,
|
|
0xe3,0x3f,0xe0,0x1c,0x30,0x02,0x23,0x00,0x00,0x03,0x10,0x02,0x22,0x00,0x00,0x00,0x10,0x03,0x42,0xc0,0x1f,0xe0,
|
|
0x0f,0x01,0x84,0x39,0x60,0x18,0x0c,0x01,0x04,0x07,0x80,0x07,0x86,0x01,0x08,0x06,0x00,0x00,0xc3,0x00,0x18,0x38,
|
|
0x00,0xe0,0x60,0x00,0x30,0xc0,0xff,0x1f,0x30,0x00,0xc0,0x00,0x00,0x00,0x0c,0x00,0x00,0x03,0x00,0x00,0x03,0x00,
|
|
0x00,0xfc,0xff,0xff,0x00,0x00};
|
|
|
|
|
|
void SplashScreen(){
|
|
u8g2.clearBuffer();
|
|
u8g2.setDrawColor(1); //set to 1
|
|
u8g2.setFont(u8g2_font_helvB08_tr);
|
|
u8g2.drawStr(51, 32, "HYDROZONER");
|
|
u8g2.drawXBMP(6, 4, 42, 56, logo);
|
|
u8g2.setFont(u8g2_font_profont11_tr);
|
|
u8g2.drawStr(55, 41, "PKM-KC 2024");
|
|
u8g2.sendBuffer();
|
|
//delay(2000);
|
|
}
|
|
|
|
void InitDisplay(){
|
|
//u8g2.setBusClock(1000000);
|
|
u8g2.setBusClock(8000000);
|
|
u8g2.begin();
|
|
//u8g2.clearBuffer();
|
|
u8g2.setFontMode(1);
|
|
u8g2.setBitmapMode(1);
|
|
u8g2.clear();
|
|
delay(2);
|
|
u8g2.initDisplay();
|
|
delay(2);
|
|
//u8g2.sendBuffer();
|
|
}
|
|
|
|
void ClearDisplayBuffer(){
|
|
u8g2.clearBuffer();
|
|
}
|
|
|
|
void SendDisplayBuffer(){
|
|
u8g2.sendBuffer();
|
|
}
|
|
|
|
void DrawDashboardBackground(){
|
|
//Not implemented
|
|
//u8g2.clearBuffer();
|
|
u8g2.setFont(u8g2_font_profont11_tr);
|
|
u8g2.setDrawColor(1);
|
|
u8g2.drawStr(0, 10, "Dashboard not coded!");
|
|
|
|
//u8g2.drawXBM(0, 0, 32, 32, tangki_kosong);
|
|
|
|
//u8g2.sendBuffer();
|
|
//...................................
|
|
}
|
|
|
|
|
|
void DrawSectionPlaceholder(){
|
|
u8g2.setFont(u8g2_font_profont12_tr); //8 pixel height font
|
|
u8g2.setDrawColor(1);
|
|
int x = 0;
|
|
int y = 0;
|
|
int h = 12;
|
|
int w = 128;
|
|
for (int i=0;i<5;i++){
|
|
y = (i*12);
|
|
if ((i%2)==0){
|
|
u8g2.drawBox(x,y,w,h);
|
|
u8g2.setDrawColor(2); //set to xor
|
|
//u8g2.setFontMode(1);
|
|
}else{
|
|
//u8g2.setFontMode(0);
|
|
u8g2.setDrawColor(1); //set to 1
|
|
}
|
|
y = 10 + (i*12);
|
|
u8g2.drawStr(x, y, "123456789ABCDEFGHIJKL");
|
|
}
|
|
}
|
|
|
|
int DrawTextRowCount(){
|
|
return 5;
|
|
}
|
|
|
|
void DrawTextMenuAtRow(const char *v, byte row, bool highlight){
|
|
int x = 0;
|
|
int y = 0;
|
|
int h = 12;
|
|
int w = 128;
|
|
u8g2.setFont(u8g2_font_profont12_tr); //8 pixel height font
|
|
|
|
u8g2.setDrawColor(1);
|
|
|
|
//highlight
|
|
if (highlight){
|
|
x = 0;
|
|
y = row*12;
|
|
u8g2.drawBox(x,y,w,h);
|
|
u8g2.setDrawColor(2); //set to xor
|
|
}
|
|
|
|
//text
|
|
x = 2;
|
|
y = 10 + (row*12);
|
|
u8g2.drawStr(x, y, v);
|
|
}
|
|
|
|
void DrawAbout(){
|
|
u8g2.clearBuffer();
|
|
u8g2.setDrawColor(1); //set to 1
|
|
u8g2.setFont(u8g2_font_helvB08_tr);
|
|
u8g2.drawStr(51, 22, "HYDROZONER");
|
|
u8g2.drawXBMP(6, 4, 42, 56, logo);
|
|
u8g2.setFont(u8g2_font_profont11_tr);
|
|
u8g2.drawStr(55, 35, "PKM-KC 2024");
|
|
u8g2.drawStr(55, 45, "V1.0");
|
|
u8g2.sendBuffer();
|
|
}
|
|
|
|
void DrawUnderConstruction(){
|
|
u8g2.clearBuffer();
|
|
u8g2.setFont(u8g2_font_profont12_tr); //8 pixel height font
|
|
u8g2.setDrawColor(1);
|
|
u8g2.drawStr(5, 35, "<Under Construction>");
|
|
u8g2.sendBuffer();
|
|
}
|
|
|
|
void DrawCenteredText(const char *v, byte row, bool highlight=false, bool arrowLeft = false, bool arrowRight = false, bool horizontalLine=false){
|
|
int x = 0;
|
|
int y = 0;
|
|
int h = 12;
|
|
int w = 128;
|
|
u8g2.setFont(u8g2_font_profont12_tr); //8 pixel height font
|
|
|
|
u8g2.setDrawColor(1);
|
|
|
|
//highlight
|
|
if (highlight){
|
|
x = 0;
|
|
y = row*12;
|
|
u8g2.drawBox(x,y,w,h);
|
|
u8g2.setDrawColor(2); //set to xor
|
|
}
|
|
|
|
//text
|
|
x = (128-u8g2.getStrWidth(v)) / 2;
|
|
y = 10 + (row*12);
|
|
u8g2.drawStr(x, y, v);
|
|
|
|
if (arrowLeft){
|
|
u8g2.setFont(u8g2_font_profont12_tr); //8 pixel height font
|
|
x = 10;
|
|
u8g2.drawStr(x, y, "<");
|
|
}
|
|
|
|
if (arrowRight){
|
|
u8g2.setFont(u8g2_font_profont12_tr); //8 pixel height font
|
|
x = 108;
|
|
u8g2.drawStr(x+u8g2.getStrWidth(">"), y, ">");
|
|
}
|
|
|
|
u8g2.setDrawColor(1);
|
|
if (horizontalLine){
|
|
u8g2.drawHLine(0, y+2, 128);
|
|
}
|
|
}
|
|
|
|
void DrawTank(int x, int y, int w, int h){
|
|
//draw rounded
|
|
u8g2.setDrawColor(1);
|
|
//u8g2.drawRBox(x, y, w, h, 4);
|
|
u8g2.drawRFrame(x, y, w, h, 4);
|
|
}
|
|
|
|
void DrawTankFilled(int x, int y, int w, int h){
|
|
//draw rounded
|
|
//u8g2.drawRBox(x, y, w, h, 4);
|
|
u8g2.setDrawColor(2); //set to xor
|
|
u8g2.drawRBox(x, y, w, h, 4);
|
|
}
|
|
|
|
void DrawTextAt(int x, int y, const char *v){
|
|
u8g2.setFont(u8g2_font_profont10_tr); //6 pixel height font
|
|
u8g2.setDrawColor(1);
|
|
u8g2.drawStr(x, y, v);
|
|
}
|
|
|
|
int DrawTextAtWitdh(const char *v){
|
|
u8g2.setFont(u8g2_font_profont10_tr); //6 pixel height font
|
|
return u8g2.getStrWidth(v);
|
|
}
|
|
|
|
void DrawFrame(int x, int y, int w, int h){
|
|
u8g2.setDrawColor(1);
|
|
u8g2.drawFrame(x, y, w, h);
|
|
}
|
|
|
|
// Function to draw a propeller
|
|
void drawPropeller(int x, int y, int diameter, float angle, bool xorMode=false) {
|
|
int radius = diameter / 2;
|
|
float radAngle = angle * (PI / 180.0); // Convert angle to radians
|
|
|
|
// Calculate positions of the blades
|
|
int x1 = x + radius * cos(radAngle);
|
|
int y1 = y + radius * sin(radAngle);
|
|
int x2 = x - radius * cos(radAngle);
|
|
int y2 = y - radius * sin(radAngle);
|
|
|
|
int x3 = x + radius * cos(radAngle + PI / 2);
|
|
int y3 = y + radius * sin(radAngle + PI / 2);
|
|
int x4 = x - radius * cos(radAngle + PI / 2);
|
|
int y4 = y - radius * sin(radAngle + PI / 2);
|
|
|
|
// Draw the blades
|
|
if (xorMode){
|
|
u8g2.setDrawColor(2);
|
|
}else{
|
|
u8g2.setDrawColor(1);
|
|
}
|
|
u8g2.drawLine(x, y, x1, y1);
|
|
u8g2.drawLine(x, y, x2, y2);
|
|
u8g2.drawLine(x, y, x3, y3);
|
|
u8g2.drawLine(x, y, x4, y4);
|
|
}
|
|
|
|
void DrawCircle(int x, int y, int r){
|
|
u8g2.setDrawColor(1);
|
|
u8g2.drawCircle(x,y,r);
|
|
}
|
|
|