1111
1212#include " Utils/Cards.h"
1313
14+ #include < chrono>
15+
1416#define MAX_SPEED 45
1517
18+ uint32_t lapTimer = 0 ;
19+ uint8_t stopCounter = 0 ;
20+ uint32_t lastRpm = 0 ;
21+
1622DualCardInfo HomeView::speedCards = DualCardInfo();
1723DualCardInfo HomeView::lapCards = DualCardInfo();
1824DualCardInfo HomeView::efficiencyCards = DualCardInfo();
@@ -25,10 +31,30 @@ static void set_value(lv_obj_t * obj, int32_t v)
2531 lv_label_set_text (obj, buf);
2632}
2733
34+ static void update_lap_time (lv_obj_t * obj) {
35+ uint32_t minutes = lapTimer / 60 ;
36+ uint32_t seconds = lapTimer % 60 ;
37+
38+ static char buf[16 ]; // Buffer for formatted text
39+ snprintf (buf, sizeof (buf), " %02d:%02d" , minutes, seconds);
40+ DebugPrint (buf);
41+ lv_label_set_text (obj, buf);
42+ }
43+
44+ static void reset_lap_timer () {
45+ lapTimer = 0 ;
46+ DebugPrint (" Lap timer reset\n " );
47+ update_lap_time (HomeView::lapCards.get_card1 ()->get_value_label ());
48+ }
49+
50+ static void reset_lap_timer (lv_event_t * e) {
51+ reset_lap_timer ();
52+ }
53+
2854static void set_speed (lv_obj_t * obj, int32_t v)
2955{
3056 static char buf[16 ]; // Buffer for formatted text
31- snprintf (buf, sizeof (buf), " %d km/h" , v );
57+ snprintf (buf, sizeof (buf), " %d km/h" , (v/ 1000 ) );
3258 lv_label_set_text (obj, buf);
3359 if (v > MAX_SPEED) {
3460 lv_obj_set_style_bg_color (obj, lv_color_hex (0xFF0000 ), 0 );
@@ -107,6 +133,7 @@ HomeView::HomeView(lv_obj_t* parent, DataAggregator& aggregator) : View(parent,
107133 LV_GRID_ALIGN_STRETCH, 0 , 1 );
108134 lv_obj_set_scroll_dir (obj, LV_DIR_NONE);
109135 // lv_obj_add_event_cb(obj, lv_event_cb_t(event_handler), LV_EVENT_SCROLL, NULL);
136+ lv_obj_add_event_cb (obj, reset_lap_timer, LV_EVENT_CLICKED, NULL );
110137
111138 efficiencyCards = create_efficienty_section (cont, SCREEN_WIDTH/2 , SCREEN_HEIGHT/2 );
112139 obj = efficiencyCards.get_dualCard ();
@@ -154,10 +181,22 @@ HomeView::HomeView(lv_obj_t* parent, DataAggregator& aggregator) : View(parent,
154181 });
155182
156183 aggregator.rpmSpeed .addListener ([&](int32_t rpm) {
184+ if (rpm == 0 && lastRpm != 0 ) {
185+ stopCounter++;
186+ if (stopCounter >= 2 ) {
187+ reset_lap_timer ();
188+ stopCounter = 0 ;
189+ }
190+ }
157191 set_value (speedCards.get_card2 ()->get_value_label (), rpm);
158192 });
159193
160194 aggregator.temperature .addListener ([&](temperature_t temperature) {
161195 set_value (lapCards.get_card2 ()->get_value_label (), temperature);
162196 });
197+
198+ __attribute__ ((__unused__)) lv_timer_t * timer = lv_timer_create ([](lv_timer_t * timer) {
199+ lapTimer++;
200+ update_lap_time (lapCards.get_card1 ()->get_value_label ());
201+ }, 1000 , NULL );
163202}
0 commit comments