From c8003fde24debc458032b77a0dbbbbf41b80e455 Mon Sep 17 00:00:00 2001 From: smayzy Date: Mon, 29 Dec 2025 13:21:38 +0100 Subject: [PATCH] add win_float --- src/main.c | 74 +++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 65 insertions(+), 9 deletions(-) diff --git a/src/main.c b/src/main.c index ee05838..751dcdc 100644 --- a/src/main.c +++ b/src/main.c @@ -23,7 +23,7 @@ void get_fake_data(int *speed, int *power, int *bat, float *tq, int *rpm, int *e *speed = rand() % 201; *power = rand() % 1251; *bat = rand() % 101; - *tq = 1.8 + (float)rand() / 3.5f * 1.7f; + *tq = 1.8f + ((float)rand() / (float)RAND_MAX) * (3.5f - 1.8f); *rpm = rand() % 6000; *eff = rand() % 100; *bat_temp = (float)rand() / (float)RAND_MAX * 150.0f; @@ -50,7 +50,7 @@ int smaller_of(int a, int b) { return (a < b) ? a : b; } -void win_number(WINDOW *lwin, int data, int digits){ +void win_int(WINDOW *lwin, int data, int digits){ int lwiny, lwinx, len; char buf[16]; getmaxyx(lwin, lwiny, lwinx); @@ -90,6 +90,62 @@ void win_number(WINDOW *lwin, int data, int digits){ wrefresh(lwin); } +void win_float(WINDOW *lwin, float data, int digits) +{ + int lwiny, lwinx, len; + char buf[16]; + + getmaxyx(lwin, lwiny, lwinx); + + snprintf(buf , sizeof(buf), "%.1f", data); + len = strlen(buf); + + int bh = 5; // bitmap height + int bw = 3; // bitmap width + + int size = smaller_of((lwiny - 2) / bh, (lwinx - 2 - (digits - 1)) / (bw * digits)); + + int total_width = digits * (bw * size) + (digits - 1); + int startx = (lwinx - total_width) / 2; + int starty = (lwiny - bh * size) / 2; + int offset = (bw * size + 1) * (digits - len); + + win_clear(lwin); + + for (int d = 0; d < len; d++) { + int dx = startx + d * (bw * size + 1) + offset; + + if (buf[d] == '.') { + for (int yy = 0; yy < size; yy++) + for (int xx = 0; xx < size; xx++) + mvwaddch( + lwin, + starty + (bh - 1) * size + yy, + dx + xx, + ACS_CKBOARD + ); + continue; + } + + int digit = buf[d] - '0'; + + for (int y = 0; y < bh; y++) { + for (int x = 0; x < bw; x++) { + if (digit_bitmaps[digit][y][x]) { + for (int yy = 0; yy < size; yy++) + for (int xx = 0; xx < size; xx++) + mvwaddch(lwin, + starty + y * size + yy, + dx + x * size + xx, + ACS_CKBOARD); + } + } + } + } + + wrefresh(lwin); +} + int main(int argc, char **argv) { int option; @@ -180,18 +236,18 @@ int main(int argc, char **argv) long now = now_ms(); if (now - t100 >= 100 * delay) { - win_number(win[0], speed, 3); - win_number(win[1], power, 4); - //win[3] + win_int(win[0], speed, 3); + win_int(win[1], power, 4); + win_float(win[3], tq, 3); //win[4] //win[5] t100 = now; } if (now - t1000 >= 1000 * delay){ - win_number(win[2], bat, 3); - //win[6] - //win[7] - //win[8] + win_int(win[2], bat, 3); + win_float(win[6], bat_temp, 5); + win_float(win[7], var_temp, 5); + win_float(win[8], mot_temp, 5); t1000 = now; } //win[9];