From dda09ca009e8a6d9db86e78ddeb76221b6acd3ca Mon Sep 17 00:00:00 2001 From: Gabe Venberg Date: Tue, 28 Nov 2023 20:48:53 -0600 Subject: [PATCH] lcd now displays the temperature. --- Cargo.toml | 3 ++- src/main.rs | 40 +++++++++++++++++++++++++++++++++------- wiring.fzz | Bin 54153 -> 52264 bytes 3 files changed, 35 insertions(+), 8 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 435cb3a..40e4b95 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,7 +5,7 @@ version = "0.1.0" license = "MIT OR Apache-2.0" [dependencies] -cortex-m = "0.7" +cortex-m = {version = "0.7"} cortex-m-rt = "0.7" embedded-hal = { version = "0.2.5", features = ["unproven"] } @@ -17,6 +17,7 @@ panic-probe = { version = "0.3", features = ["print-defmt"] } rp-pico = "0.8" max31855 = "0.1.0" hd44780-driver = "0.4.0" +embedded-alloc = "0.5.1" # cargo build/run [profile.dev] diff --git a/src/main.rs b/src/main.rs index 1b82560..3d8364a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,8 @@ #![no_std] #![no_main] +extern crate alloc; +use alloc::format; use bsp::{ entry, hal::{ @@ -9,7 +11,9 @@ use bsp::{ }, }; use core::fmt::Write; +use cortex_m::delay::Delay; use defmt_rtt as _; +use embedded_alloc::Heap; use embedded_hal::digital::v2::OutputPin; use embedded_hal::spi::MODE_0; use panic_probe as _; @@ -30,6 +34,19 @@ use bsp::hal::{ use hd44780_driver as hd44780; use max31855::{Max31855, Unit}; +#[global_allocator] +static HEAP: Heap = Heap::empty(); + +fn write_lcd( + lcd: &mut hd44780::HD44780, + delay: &mut Delay, + string: &str, +) { + lcd.reset(delay).unwrap(); + lcd.clear(delay).unwrap(); + lcd.write_str(string, delay).unwrap(); +} + #[entry] fn main() -> ! { let mut pac = pac::Peripherals::take().unwrap(); @@ -51,6 +68,14 @@ fn main() -> ! { .ok() .unwrap(); + //initalize the heap + { + use core::mem::MaybeUninit; + const HEAP_SIZE: usize = 1024; + static mut HEAP_MEM: [MaybeUninit; HEAP_SIZE] = [MaybeUninit::uninit(); HEAP_SIZE]; + unsafe { HEAP.init(HEAP_MEM.as_ptr() as usize, HEAP_SIZE) } + } + let mut delay = cortex_m::delay::Delay::new(core.SYST, clocks.system_clock.freq().to_Hz()); let pins = bsp::Pins::new( @@ -100,18 +125,16 @@ fn main() -> ! { let mut lcd = hd44780::HD44780::new_4bit( pins.gpio16.into_push_pull_output(), //rs - pins.gpio17.into_push_pull_output(), // enable + pins.gpio17.into_push_pull_output(), //enable pins.gpio18.into_push_pull_output(), //d4 pins.gpio19.into_push_pull_output(), //d5 pins.gpio20.into_push_pull_output(), //d6 pins.gpio21.into_push_pull_output(), //d6 &mut delay, - ).unwrap(); - - lcd.reset(&mut delay).unwrap(); - lcd.clear(&mut delay).unwrap(); - lcd.write_str("lcd initalized", &mut delay).unwrap(); + ) + .unwrap(); + write_lcd(&mut lcd, &mut delay, "Starting"); loop { led_pin.set_high().unwrap(); external_led_pin.set_low().unwrap(); @@ -120,7 +143,10 @@ fn main() -> ! { external_led_pin.set_high().unwrap(); delay.delay_ms(500); match spi.read_thermocouple(&mut thermometer_spi_csn, Unit::Celsius) { - Ok(v) => writeln!(uart, "Temp: {} \r", v).unwrap(), + Ok(v) => { + writeln!(uart, "Current: {} \r", v).unwrap(); + write_lcd(&mut lcd, &mut delay, &format!("{:02.2} C", v)) + } Err(e) => defmt::error!("error reading temp {}", defmt::Debug2Format(&e)), }; } diff --git a/wiring.fzz b/wiring.fzz index c8fdb59f5c900d35d24f944b291338a61146a878..bf2ede4b2768741cfdef0066de303ed6857743ba 100644 GIT binary patch delta 13051 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