add convert_to_celsius function in the adc module

modify RP2040 adc example to get inside biased bipolar diode voltage,
    then convert this temperature sensor data into Celsius degree,
    according to chapter 4.9.5. Temperature Sensor in RP2040 datasheet.
This commit is contained in:
Aaron Tsui 2022-12-20 09:11:39 +08:00
parent ebc735008f
commit 849a0e174f

View File

@ -27,7 +27,12 @@ async fn main(_spawner: Spawner) {
let level = adc.read(&mut p28).await; let level = adc.read(&mut p28).await;
info!("Pin 28 ADC: {}", level); info!("Pin 28 ADC: {}", level);
let temp = adc.read_temperature().await; let temp = adc.read_temperature().await;
info!("Temp: {}", temp); info!("Temp: {} degrees", convert_to_celsius(temp));
Timer::after(Duration::from_secs(1)).await; Timer::after(Duration::from_secs(1)).await;
} }
} }
fn convert_to_celsius(raw_temp: u16) -> f32 {
// According to chapter 4.9.5. Temperature Sensor in RP2040 datasheet
27.0 - (raw_temp as f32 * 3.3 / 4096.0 -0.706)/0.001721 as f32
}