mirror of
https://github.com/SemvdH/OBD2-car-display.git
synced 2025-12-15 20:21:03 +00:00
Add device labels
This commit is contained in:
@@ -31,6 +31,8 @@ Program to create a car monitor display using:
|
||||
#define FLAG_INIT_UPDATE_TEXT_POS 0x01
|
||||
#define FLAG_INIT_CLEAR_POS 0x02
|
||||
#define FLAG_INIT_UPDATE_PERCENT_POS 0x03
|
||||
#define FLAG_DEVICE_LABEL_UPDATE_POS 0x04
|
||||
#define FLAG_DEVICE_LABEL_SHOULD_UPDATE_POS 0x05
|
||||
|
||||
#define LOGO_MIN_STEP 20
|
||||
#define LOGO_MAX_POS_Y 124
|
||||
@@ -38,25 +40,50 @@ Program to create a car monitor display using:
|
||||
|
||||
#define LOGO_TEXT_WIDTH 16
|
||||
|
||||
#define RAM_AMOUNT_KB 96
|
||||
#define DEV_CPU_RAM_TEXT_LENGTH 3
|
||||
#define DEV_DISPLAY_TEXT_LENGTH 7
|
||||
|
||||
enum DeviceLabel
|
||||
{
|
||||
DEV_CPU = 0,
|
||||
DEV_RAM = 1,
|
||||
DEV_DISPLAY = 2,
|
||||
DEV_DONE = 3
|
||||
};
|
||||
|
||||
/* extern fonts */
|
||||
extern uint8_t BigFont[];
|
||||
extern uint8_t SmallFont[];
|
||||
extern uint8_t OCR_A_Extended_M[];
|
||||
|
||||
/* display strings */
|
||||
char init_text[] PROGMEM = "Initialising...";
|
||||
char device_labels[3][10] PROGMEM = {"CPU ", "RAM ", "DISPLAY"};
|
||||
char cpu_text[] PROGMEM = "ATSAM3X8E";
|
||||
char display_size_text[] PROGMEM = "480x320";
|
||||
|
||||
/* initialising... variables */
|
||||
char should_clear = 1;
|
||||
char led_state = LOW;
|
||||
char init_flag = 0;
|
||||
char init_text_i = -1;
|
||||
int init_text_x = 100;
|
||||
char init_text[] PROGMEM = "Initialising...";
|
||||
char text_temp[2] = {'a', '\0'};
|
||||
int init_percent = 0;
|
||||
|
||||
/* logo variables */
|
||||
char logo_text[] PROGMEM = "DS3 OBD2 display";
|
||||
int logo_pos_y = 0;
|
||||
int last_logo_pos_y = 0;
|
||||
int logo_pos_i = 0;
|
||||
char logo_flag = 0;
|
||||
|
||||
/* device info variables */
|
||||
char init_device_info = 0; /* wether we are drawing CPU (0), RAM (1) or DISPLAY (2) */
|
||||
char ram_kb_amount = 0; /* counts up to 96 to show the KB of ram */
|
||||
char device_label_i = -1; /* counter in the current device label */
|
||||
|
||||
void on_init_enter();
|
||||
void on_init_run();
|
||||
void on_init_exit();
|
||||
@@ -97,6 +124,9 @@ void on_init_enter()
|
||||
Timer0.attachInterrupt(update_init_text);
|
||||
Timer0.start(MS(200));
|
||||
|
||||
Timer2.attachInterrupt(update_device_info);
|
||||
Timer2.start(MS(100));
|
||||
|
||||
// TODO change to update when initializing bluetooth..
|
||||
Timer1.attachInterrupt(update_percent_test);
|
||||
Timer1.start(MS(60));
|
||||
@@ -113,13 +143,13 @@ void on_init_run()
|
||||
init_flag &= ~(1 << FLAG_INIT_CLEAR_POS);
|
||||
display.setColor(VGA_BLACK);
|
||||
/*clear only initializing text*/
|
||||
display.print(" ",(display.getDisplayXSize() / 2) - (INIT_TEXT_WIDTH * display.getFontXsize() / 2) - (INIT_PERCENTAGE_WIDTH/2),display.getDisplayYSize() / 2 + 50);
|
||||
display.print(" ", (display.getDisplayXSize() / 2) - (INIT_TEXT_WIDTH * display.getFontXsize() / 2) - (INIT_PERCENTAGE_WIDTH / 2), display.getDisplayYSize() / 2 + 50);
|
||||
}
|
||||
if (init_flag & (1 << FLAG_INIT_UPDATE_TEXT_POS))
|
||||
{
|
||||
init_flag &= ~(1 << FLAG_INIT_UPDATE_TEXT_POS);
|
||||
display.setColor(VGA_AQUA);
|
||||
int x_position = (display.getDisplayXSize() / 2 - (INIT_TEXT_WIDTH * display.getFontXsize() / 2)) + (init_text_i * display.getFontXsize()) - (INIT_PERCENTAGE_WIDTH/2);
|
||||
int x_position = (display.getDisplayXSize() / 2 - (INIT_TEXT_WIDTH * display.getFontXsize() / 2)) + (init_text_i * display.getFontXsize()) - (INIT_PERCENTAGE_WIDTH / 2);
|
||||
// Serial.println(x_position);
|
||||
text_temp[0] = init_text[init_text_i];
|
||||
display.print(text_temp, x_position, display.getDisplayYSize() / 2 + 50); // print as string with one character
|
||||
@@ -127,20 +157,29 @@ void on_init_run()
|
||||
if (init_flag & (1 << FLAG_INIT_UPDATE_PERCENT_POS))
|
||||
{
|
||||
init_flag &= ~(1 << FLAG_INIT_UPDATE_PERCENT_POS);
|
||||
int percent_x_pos = (display.getDisplayXSize() / 2 - (INIT_TEXT_WIDTH * display.getFontXsize() / 2)) + (INIT_TEXT_WIDTH * display.getFontXsize()) - (INIT_PERCENTAGE_WIDTH/2);
|
||||
int percent_x_pos = (display.getDisplayXSize() / 2 - (INIT_TEXT_WIDTH * display.getFontXsize() / 2)) + (INIT_TEXT_WIDTH * display.getFontXsize()) - (INIT_PERCENTAGE_WIDTH / 2);
|
||||
display.setColor(VGA_BLACK);
|
||||
/*clear text region for percent*/
|
||||
display.print(" ", percent_x_pos, display.getDisplayYSize() / 2 + 50);
|
||||
|
||||
display.setColor(VGA_FUCHSIA);
|
||||
char *percent_text = (char *)malloc((INIT_PERCENTAGE_WIDTH-1) * sizeof(char));
|
||||
char *percent_text = (char *)malloc((INIT_PERCENTAGE_WIDTH - 1) * sizeof(char));
|
||||
sprintf(percent_text, "%d", init_percent);
|
||||
display.print(percent_text, percent_x_pos, display.getDisplayYSize() / 2 + 50);
|
||||
display.print("%", percent_x_pos + (INIT_PERCENTAGE_WIDTH-1) * display.getFontXsize(), display.getDisplayYSize() / 2 + 50);
|
||||
display.print("%", percent_x_pos + (INIT_PERCENTAGE_WIDTH - 1) * display.getFontXsize(), display.getDisplayYSize() / 2 + 50);
|
||||
free(percent_text);
|
||||
}
|
||||
|
||||
logo_pos_i+= 3;
|
||||
if (init_flag & (1 << FLAG_DEVICE_LABEL_UPDATE_POS))
|
||||
{
|
||||
init_flag &= ~(1 << FLAG_DEVICE_LABEL_UPDATE_POS);
|
||||
text_temp[0] = device_labels[init_device_info][device_label_i];
|
||||
display.setColor(VGA_AQUA);
|
||||
int x_position = 10 + (device_label_i * display.getFontXsize());
|
||||
display.print(text_temp, x_position, 10 + (init_device_info * display.getFontYsize() + 3));
|
||||
}
|
||||
|
||||
logo_pos_i += 3;
|
||||
last_logo_pos_y = logo_pos_y;
|
||||
logo_pos_y = logo_step(logo_pos_i);
|
||||
|
||||
@@ -157,7 +196,6 @@ void on_init_run()
|
||||
display.setColor(VGA_AQUA);
|
||||
display.print(logo_text, CENTER, logo_pos_y);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -165,7 +203,10 @@ void on_init_exit()
|
||||
{
|
||||
Serial.println("Exiting init state!");
|
||||
display.clrScr();
|
||||
Timer0.detachInterrupt();
|
||||
Timer0.stop();
|
||||
Timer2.detachInterrupt();
|
||||
Timer2.stop();
|
||||
}
|
||||
|
||||
/****************************/
|
||||
@@ -204,6 +245,40 @@ void update_percent_test()
|
||||
init_flag |= (1 << FLAG_INIT_UPDATE_PERCENT_POS);
|
||||
}
|
||||
|
||||
void update_device_info()
|
||||
{
|
||||
switch (init_device_info)
|
||||
{
|
||||
case DEV_CPU:
|
||||
device_label_i++;
|
||||
if (device_label_i > DEV_CPU_RAM_TEXT_LENGTH)
|
||||
{
|
||||
init_device_info++;
|
||||
device_label_i = 0;
|
||||
}
|
||||
break;
|
||||
case DEV_RAM:
|
||||
device_label_i++;
|
||||
if (device_label_i > DEV_CPU_RAM_TEXT_LENGTH)
|
||||
{
|
||||
init_device_info++;
|
||||
device_label_i = 0;
|
||||
}
|
||||
break;
|
||||
case DEV_DISPLAY:
|
||||
device_label_i++;
|
||||
if (device_label_i > DEV_DISPLAY_TEXT_LENGTH)
|
||||
{
|
||||
|
||||
device_label_i = 0;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
init_flag |= (1 << FLAG_DEVICE_LABEL_UPDATE_POS);
|
||||
}
|
||||
|
||||
void setup()
|
||||
{
|
||||
|
||||
|
||||
Reference in New Issue
Block a user