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 "lvgl.h"
|
||||||
#include "compass_screen.h"
|
#include "compass_screen.h"
|
||||||
#include "menu_screen.h"
|
#include "menu_screen.h"
|
||||||
|
#include "app_config.h"
|
||||||
|
|
||||||
static const char *cardinals[] =
|
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;
|
lv_coord_t rotated_x, rotated_y;
|
||||||
float azimuth_in_rads = (float)azimuth*M_PI/180.0;
|
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_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;
|
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);
|
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
|
//We make sure the azimuth is in the right range ie 0 to 359
|
||||||
azimuth %= 360;
|
azimuth %= 360;
|
||||||
|
#if HARDWARE_PLATFORM == SMART_WATCH_BREADBOARD
|
||||||
uint16_t azimuthAdjusted = 359 - azimuth;
|
uint16_t azimuthAdjusted = 359 - azimuth;
|
||||||
|
#elif HARDWARE_PLATFORM == SMART_WATCH_PCB
|
||||||
|
uint16_t azimuthAdjusted = azimuth;
|
||||||
|
#endif
|
||||||
|
|
||||||
uint8_t index;
|
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 each cardinal with the current azimuth
|
||||||
rotate_cardinal(&compassScreen->northCardinal, azimuth);
|
rotate_cardinal(&compassScreen->northCardinal, azimuth);
|
||||||
|
#if HARDWARE_PLATFORM == SMART_WATCH_BREADBOARD
|
||||||
lv_img_set_angle(compassScreen->northMarker, azimuth*10);
|
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);
|
//lv_meter_set_scale_range(compassScreen->compassGraduation.meter, compassScreen->compassGraduation.scale, 0, 330, 330, azimuth-90);
|
||||||
|
|
||||||
rotate_cardinal(&compassScreen->eastCardinal, azimuth);
|
rotate_cardinal(&compassScreen->eastCardinal, azimuth);
|
||||||
|
Loading…
Reference in New Issue
Block a user