This commit is contained in:
Daniel Bulant 2026-05-13 10:57:22 +02:00
parent ea1f1a3358
commit 40f6c0dffd
No known key found for this signature in database
4 changed files with 21 additions and 5 deletions

View file

@ -227,8 +227,10 @@ impl DeviceState {
let question = self.question.as_ref()?; let question = self.question.as_ref()?;
let title_line = if question.text.len() > 16 { let title_line = if question.text.len() > 16 {
self.title_offset %= question.text.len() - 16; // overscroll, should show spaces after the end
OwnedStr::from_str(&question.text[self.title_offset..self.title_offset + 16]).unwrap() self.title_offset %= question.text.len() - 31;
let end = usize::min(self.title_offset + 16, question.text.len());
OwnedStr::from_str(&question.text[self.title_offset..end]).unwrap()
} else { } else {
OwnedStr::from_str(&question.text).unwrap() OwnedStr::from_str(&question.text).unwrap()
}; };

View file

@ -3,6 +3,8 @@
extern crate alloc; extern crate alloc;
use alloc::borrow::ToOwned;
use alloc::string::String;
use device_state::DeviceState; use device_state::DeviceState;
use embassy_executor::Spawner; use embassy_executor::Spawner;
use embassy_futures::select::{Either, select}; use embassy_futures::select::{Either, select};
@ -133,8 +135,9 @@ pub async fn tcp_write_loop(
#[embassy_executor::task] #[embassy_executor::task]
pub async fn main_loop() { pub async fn main_loop() {
println!("Main loop started"); println!("Main loop started");
let mut last = (String::new(), String::new());
loop { loop {
embassy_time::Timer::after_millis(50).await; embassy_time::Timer::after_millis(100).await;
let mut state = STATE.lock().await; let mut state = STATE.lock().await;
state.tick(); state.tick();
let lines = state.render_lines(); let lines = state.render_lines();
@ -143,7 +146,15 @@ pub async fn main_loop() {
let Some((title_line, second_line)) = lines else { let Some((title_line, second_line)) = lines else {
continue; continue;
}; };
println!("lcd: {} {}", title_line, second_line); let rendered = (
title_line.as_str().to_owned(),
second_line.as_str().to_owned(),
);
if rendered == last {
continue;
}
last = rendered;
println!("lcd1: {}\nlcd2: {}", title_line, second_line);
screen::overwrite_lcd(&title_line, &second_line).await; screen::overwrite_lcd(&title_line, &second_line).await;
} }
} }

View file

@ -14,7 +14,7 @@ use esp_radio::wifi::sta::StationConfig;
use esp_radio::wifi::{Config, ControllerConfig, scan::ScanConfig}; use esp_radio::wifi::{Config, ControllerConfig, scan::ScanConfig};
use crate::screen::overwrite_lcd; use crate::screen::overwrite_lcd;
use crate::{WIFI_NETWORK, WIFI_PASSWORD}; use crate::{WIFI_NETWORK, WIFI_PASSWORD, main_loop};
use crate::{buffer::wait_for_config, tcp_read_loop, tcp_write_loop}; use crate::{buffer::wait_for_config, tcp_read_loop, tcp_write_loop};
use crate::{reconnecting_state, reset_state}; use crate::{reconnecting_state, reset_state};
@ -68,6 +68,7 @@ pub async fn network_setup_task(
seed, seed,
); );
spawner.spawn(net_task(runner).expect("spawn net task")); spawner.spawn(net_task(runner).expect("spawn net task"));
spawner.spawn(main_loop().expect("spawn main loop"));
loop { loop {
loop { loop {

View file

@ -89,7 +89,9 @@ pub async fn lcd_display_task(config: LcdConfig) {
for byte in &buffer.line1 { for byte in &buffer.line1 {
lcd.write(*byte); lcd.write(*byte);
} }
Timer::after_micros(500).await;
lcd.set_position(0, 1); lcd.set_position(0, 1);
Timer::after_micros(500).await;
for byte in &buffer.line2 { for byte in &buffer.line2 {
lcd.write(*byte); lcd.write(*byte);
} }