Reworked the compass screen to work for both possible platforms (breadboard and PCB)

This commit is contained in:
anschrammh 2023-03-24 14:56:16 +01:00
parent 86be55b404
commit 728394ff22

View File

@ -3,6 +3,7 @@
#include "lvgl.h"
#include "compass_screen.h"
#include "menu_screen.h"
#include "app_config.h"
static const char *cardinals[] =
{
@ -71,9 +72,13 @@ static void rotate_cardinal(CompassCardinal_t *cardinal, uint16_t azimuth)
{
lv_coord_t rotated_x, rotated_y;
float azimuth_in_rads = (float)azimuth*M_PI/180.0;
#if HARDWARE_PLATFORM == SMART_WATCH_BREADBOARD
rotated_x = (float)(cardinal->position.x-120+cardinal->offset.x)*cos(azimuth_in_rads) - (float)(cardinal->position.y-120+cardinal->offset.y)*sin(azimuth_in_rads) + 120-cardinal->offset.x;
rotated_y = (float)(cardinal->position.y-120+cardinal->offset.y)*cos(azimuth_in_rads) + (float)(cardinal->position.x-120+cardinal->offset.x)*sin(azimuth_in_rads) + 120-cardinal->offset.y;
#elif HARDWARE_PLATFORM == SMART_WATCH_PCB
rotated_x = (float)(cardinal->position.x-120+cardinal->offset.x)*cos(azimuth_in_rads) + (float)(cardinal->position.y-120+cardinal->offset.y)*sin(azimuth_in_rads) + 120-cardinal->offset.x;
rotated_y = (float)(cardinal->position.y-120+cardinal->offset.y)*cos(azimuth_in_rads) - (float)(cardinal->position.x-120+cardinal->offset.x)*sin(azimuth_in_rads) + 120-cardinal->offset.y;
#endif
lv_obj_set_pos(cardinal->label, rotated_x, rotated_y);
}
@ -102,7 +107,11 @@ void compass_screen_set_azimuth(CompassScreen_t * const compassScreen, uint16_t
//We make sure the azimuth is in the right range ie 0 to 359
azimuth %= 360;
#if HARDWARE_PLATFORM == SMART_WATCH_BREADBOARD
uint16_t azimuthAdjusted = 359 - azimuth;
#elif HARDWARE_PLATFORM == SMART_WATCH_PCB
uint16_t azimuthAdjusted = azimuth;
#endif
uint8_t index;
@ -129,7 +138,11 @@ void compass_screen_set_azimuth(CompassScreen_t * const compassScreen, uint16_t
//Rotate each cardinal with the current azimuth
rotate_cardinal(&compassScreen->northCardinal, azimuth);
#if HARDWARE_PLATFORM == SMART_WATCH_BREADBOARD
lv_img_set_angle(compassScreen->northMarker, azimuth*10);
#elif HARDWARE_PLATFORM == SMART_WATCH_PCB
lv_img_set_angle(compassScreen->northMarker, -azimuth*10);
#endif
//lv_meter_set_scale_range(compassScreen->compassGraduation.meter, compassScreen->compassGraduation.scale, 0, 330, 330, azimuth-90);
rotate_cardinal(&compassScreen->eastCardinal, azimuth);