Skip to content

Commit

Permalink
Tidy main loop and enable screen switching
Browse files Browse the repository at this point in the history
Signed-off-by: Ricardo Lanziano <[email protected]>
  • Loading branch information
arpunk committed Feb 21, 2024
1 parent bcf8506 commit 09b5f27
Showing 1 changed file with 43 additions and 21 deletions.
64 changes: 43 additions & 21 deletions src/c3card.erl
Original file line number Diff line number Diff line change
Expand Up @@ -26,32 +26,54 @@ start() ->
{ok, _} = c3card_app:start(normal, []),

?LOG_NOTICE("entering loop..."),
ok = c3card_screen:draw_text("card started"),
loop(#{}).
loop(#{sleep_ms => 50, screen => c3card_screen:default_screen()}).

%% Internal functions

%% @hidden
loop(State) ->
_ = timer:sleep(500),
#{sleep_ms := SleepMs, screen := CurrentScreen} = State,
_ = timer:sleep(SleepMs),
{ok, Readings} = c3card_sensor:read_sensors(),
{ok, Buttons} = c3card_buttons:button_status(),
Payload = #{readings => Readings,
platform => esp32c3,
system_info => c3card_system:info(),
control => c3card_comm:get_port(),
buttons => Buttons},

handle_buttons(Buttons),

case c3card_data:send_data(Payload) of
ok ->
ok;
Error ->
?LOG_ERROR("error sending data: ~p", [Error])
CardInfo = #{readings => Readings,
platform => esp32c3,
screen => CurrentScreen,
system_info => c3card_system:info(),
control => c3card_comm:get_port(),
buttons => Buttons},
NextScreen = btn_to_screen(Buttons, CurrentScreen),
spawn(fun() -> handle_buttons(Buttons, NextScreen) end),
case CurrentScreen == NextScreen of
false -> c3card_screen:clear();
true -> ok
end,
loop(State).
ok = c3card_screen:render_screen(NextScreen, CardInfo),
spawn(fun() -> maybe_send_info(CardInfo) end),
loop(State#{screen => NextScreen}).

handle_buttons(#{1 := low}) ->
c3card_screen:draw_text("button 1 was pressed");
handle_buttons(_Buttons) ->
noop.
%% @hidden
btn_to_screen(#{1 := low}, CurrentScreen) ->
c3card_screen:switch_screen(CurrentScreen);
btn_to_screen(_Buttons, CurrentScreen) ->
CurrentScreen.

%% @hidden
handle_buttons(#{1 := low}, _Screen) ->
c3card_neopixel:toggle_led(0, 350),
c3card_neopixel:clear_all();
handle_buttons(_Buttons, _Screen) ->
ok.

%% @hidden
maybe_send_info(CardInfo) ->
case c3card_data:send_data(CardInfo) of
ok ->
c3card_neopixel:toggle_led(2, 200);
{error, offline} ->
c3card_neopixel:toggle_led(2, 50);
Error ->
c3card_neopixel:toggle_led(2, 350),
?LOG_ERROR("error sending data: ~p", [Error])
end,
c3card_neopixel:clear_all().

0 comments on commit 09b5f27

Please sign in to comment.