Compare commits
2 Commits
d25cff82ad
...
f1193eba72
| Author | SHA1 | Date | |
|---|---|---|---|
| f1193eba72 | |||
| 9ad4579879 |
23
src/main.c
23
src/main.c
@ -77,6 +77,12 @@ typedef struct {
|
||||
StStr message;
|
||||
} Tel;
|
||||
|
||||
typedef struct {
|
||||
float wh_used;
|
||||
float wh_total;
|
||||
long previous_ms;
|
||||
} Bat_state;
|
||||
|
||||
void win_init_int(StInt *st) {
|
||||
st->lwin = newwin(st->height, st->width, st->starty, st->startx);
|
||||
box(st->lwin, 0, 0);
|
||||
@ -150,15 +156,20 @@ void read_uart(Tel *t, int fd, SerialParser *uart_str) {
|
||||
}
|
||||
}
|
||||
|
||||
void calc_data(Tel *t) {
|
||||
void calc_data(Tel *t, Bat_state *b, long now) {
|
||||
t->power.data = (int)(t->tens.data * t->amp.data);
|
||||
t->speed.data = (int)(t->rpm.data * 0.017f);
|
||||
t->bat.data = (int)((b->wh_total - b->wh_used) * 100 / b->wh_total);
|
||||
|
||||
if (t->speed.data > 0) {
|
||||
t->eff.data = (float)t->power.data / (float)t->speed.data;
|
||||
} else {
|
||||
t->eff.data = 0.0f;
|
||||
}
|
||||
|
||||
long dt = now - b->previous_ms;
|
||||
b->previous_ms = now;
|
||||
b->wh_used += (float)t->power.data * (float)dt / 3600000.0f;
|
||||
}
|
||||
|
||||
long now_ms(void) {
|
||||
@ -407,6 +418,8 @@ int main(int argc, char **argv) {
|
||||
struct termios uart_str;
|
||||
SerialParser uart_parser = {0};
|
||||
|
||||
Bat_state bat_state = {0, 1000, 0};
|
||||
|
||||
while ((option = getopt(argc, argv, "d:hfcu")) !=-1) {
|
||||
switch (option) {
|
||||
case 'd' :
|
||||
@ -513,7 +526,7 @@ int main(int argc, char **argv) {
|
||||
tel.rpm = (StInt){0 , 0 , 6000 , 4, 1, y2 , x3 , 0 , x3 , NULL, "rpm (tr/min)" };
|
||||
tel.power = (StInt){0 , 0 , 1300 , 4, 1, 2*y6 , 2*x3, y2 , 0 , NULL, "power (W)" };
|
||||
tel.bat = (StInt){0 , 0 , 100 , 3, 0, y4 , x3r , 0 , x-x3r , NULL, "batteries (%)" };
|
||||
tel.eff = (StFlt){0.0f, 0.0f, 300.0f, 5, 0, y4r , x3r , y4 , x-x3r , NULL, "efficiency (Wh/Km)" };
|
||||
tel.eff = (StFlt){0.0f, 0.0f, 300.0f, 5, 1, y4r , x3r , y4 , x-x3r , NULL, "efficiency (Wh/Km)" };
|
||||
tel.tens = (StFlt){0.0f, 0.0f, 55.0f , 4, 1, y2r4 , x3r , y2 , x-x3r , NULL, "tension (V)" };
|
||||
tel.amp = (StFlt){0.0f, 0.0f, 55.0f , 4, 1, y2r4r, x3r , y-y2r4r, x-x3r , NULL, "intensity (A)" };
|
||||
tel.message = (StStr){ y6r , 2*x3, y-y6r , 0 , NULL, "warnings" };
|
||||
@ -531,6 +544,8 @@ int main(int argc, char **argv) {
|
||||
|
||||
long t100 = 0;
|
||||
int ch = ERR;
|
||||
long now = now_ms();
|
||||
bat_state.previous_ms = now;
|
||||
|
||||
while(1) {
|
||||
ch = tolower(getch());
|
||||
@ -544,11 +559,11 @@ int main(int argc, char **argv) {
|
||||
} else {
|
||||
if (use_can) read_can(&tel, soc);
|
||||
if (use_uart) read_uart(&tel, uart_fd, &uart_parser);
|
||||
calc_data(&tel);
|
||||
calc_data(&tel, &bat_state, now);
|
||||
}
|
||||
break;
|
||||
}
|
||||
long now = now_ms();
|
||||
now = now_ms();
|
||||
if (now - t100 >= 100 * delay) {
|
||||
win_int(&tel.speed, use_color);
|
||||
win_int(&tel.rpm, use_color);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user