From fde6588a5bd3c6f42f540bc45c81c9b38ca75d97 Mon Sep 17 00:00:00 2001 From: Weird Constructor Date: Tue, 8 Mar 2022 05:03:34 +0100 Subject: [PATCH] debugging serial problems --- ws2812_bl_ctrl/src/main.rs | 36 ++++++++++++++++++++++++++++++------ ws2812_led_cube/src/main.rs | 19 ++++++++----------- 2 files changed, 38 insertions(+), 17 deletions(-) diff --git a/ws2812_bl_ctrl/src/main.rs b/ws2812_bl_ctrl/src/main.rs index b3fefb3..245948a 100644 --- a/ws2812_bl_ctrl/src/main.rs +++ b/ws2812_bl_ctrl/src/main.rs @@ -189,11 +189,19 @@ pub fn get_color(code: &[u8]) -> Result<((f32, f32, f32), usize), ()> { } pub fn rd_val(code: &[u8], led_idx: u16, r: u32) -> Result<(u32, usize), ()> { + if code.len() == 0 { + return Err(()); + } + let res = match code[0] { b'r' => (r, 1), b'l' => (led_idx as u32, 1), - b'_' => (hex2u16(&code[1..])? as u32, 5), + b'_' => if code.len() > 0 { + (hex2u16(&code[1..])? as u32, 5) + } else { + return Err(()); + }, _ => (hex2u8(&code[0..])? as u32, 2), }; Ok(res) @@ -245,7 +253,7 @@ pub fn exec_wledcode(dt: f32, code: &[u8], strip: &mut [RGB8]) -> Result<(), ()> let op = code[pc]; pc += 1; - info!("[{}] {}", led_idx, core::char::from_u32(op as u32).unwrap()); + //d// info!("[{}] {}", led_idx, core::char::from_u32(op as u32).unwrap()); match op { b'%' => { let (a, len) = rd_val(&code[pc..], led_idx, r)?; @@ -402,18 +410,34 @@ fn main() -> ! { let mut code_accum : [u8; 1024] = [0u8; 1024]; let mut wcode_ptr = 0; let mut wcode_len = 0; + + let mut ping_cnt = 0; loop { + ping_cnt += 1; + if ping_cnt > 100 { + uart.write_full_blocking("ping\n".as_bytes()); + info!("Sent ping"); + ping_cnt = 0; + } + if uart.uart_is_readable() { let mut buf = [0u8; 100]; if let Ok(len) = uart.read_raw(&mut buf) { - let s = core::str::from_utf8(&buf[0..len]).unwrap(); - info!("Recv({}): [{}]", len, s); + if let Ok(s) = core::str::from_utf8(&buf[0..len]) { + info!("Recv({}): [{}]", len, s); + } for b in buf[0..len].iter() { match *b { b'#' => { wcode_len = 0; wcode_ptr = 0; }, b'!' => { wcode_len = wcode_ptr; }, - _ => { code_accum[wcode_ptr] = *b; wcode_ptr += 1; } + _ => { code_accum[wcode_ptr] = *b; wcode_ptr += 1; } + } + + if wcode_ptr >= code_accum.len() { + error!("INPUT OVERFLOW!"); + wcode_ptr = 0; + wcode_len = 0; } } @@ -431,7 +455,7 @@ fn main() -> ! { //d// info!("Bright={}", vbrightness); ws.write(brightness(leds.iter().copied(), vbrightness)).unwrap(); - delay.start((2 * 16).milliseconds()); + delay.start((5).milliseconds()); let _ = nb::block!(delay.wait()); } } diff --git a/ws2812_led_cube/src/main.rs b/ws2812_led_cube/src/main.rs index 7e7aa85..333dd27 100644 --- a/ws2812_led_cube/src/main.rs +++ b/ws2812_led_cube/src/main.rs @@ -27,7 +27,7 @@ use ws2812_pio::Ws2812; #[used] pub static BOOT2: [u8; 256] = rp2040_boot2::BOOT_LOADER_W25Q080; -const LEN : usize = 302; +const LEN : usize = 27; struct MovingAvg { buf: [u16; 30], @@ -123,17 +123,13 @@ fn main() -> ! { let (mut pio, sm0, _, _, _) = pac.PIO0.split(&mut pac.RESETS); let mut ws = Ws2812::new( - pins.gpio16.into_mode(), + pins.gpio3.into_mode(), &mut pio, sm0, clocks.peripheral_clock.freq(), timer.count_down(), ); - let mut adc = Adc::new(pac.ADC, &mut pac.RESETS); - let mut adc_pin_0 = pins.gpio26.into_floating_input(); - - let mut n: u8 = 0; let mut leds_off : [RGB8; LEN] = [(0,0,0).into(); LEN]; let mut leds : [RGB8; LEN] = [(0,0,0).into(); LEN]; @@ -151,7 +147,7 @@ fn main() -> ! { (0, 0, 255).into(), ]; - let amperes = 8.0; + let amperes = 5.0; let all_on_amp = (LEN as f32 * 3.0 * 60.0) / 1000.0; let vbrightness = ((amperes / all_on_amp) * 255.0) as u8; @@ -169,11 +165,12 @@ fn main() -> ! { loop { cnt += 1; - if cnt > 400 { - cnt = 0; - } +// if cnt > 400 { +// cnt = 0; +// } - let clr = hsv2rgb_u8((cnt as f32 / 400.0) * 360.0, 0.0, 1.0); +// let clr = hsv2rgb_u8((cnt % 360) as f32, 1.0, 1.0); + let clr = hsv2rgb_u8(175.0, 1.0, 1.0); // info!("[{}] clr : {}", cnt, clr); for i in 0..LEN { leds[i] = clr.into();