Reworked the compass screen to work for both possible platforms (breadboard and PCB)
This commit is contained in:
parent
86be55b404
commit
728394ff22
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user