Control fan speed by temperature sensor reading. Set point can be adjusted by buttons.
Dependencies: mbed DebounceIn TextLCD DS1820
Diff: main.cpp
- Revision:
- 0:af20639f9907
- Child:
- 1:d6ceed323d25
diff -r 000000000000 -r af20639f9907 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Dec 02 11:43:48 2021 +0000 @@ -0,0 +1,63 @@ +#include "mbed.h" +#include "TextLCD.h" +#include "DebounceIn.h" + +/* + This basic example just shows how to read the ADC internal channels raw values. + Please look in the corresponding device reference manual for a complete + description of how to make a temperature sensor, VBat or Vref measurement. +*/ + +// Temperature input +AnalogIn adc_temp1(A0); +AnalogIn adc_temp2(A1); +AnalogIn adc_temp3(A2); + +// Switch input +DebounceIn tempUp(A3); +DebounceIn tempDown(A4); +DebounceIn onOff(A5); + +// LCD +TextLCD lcd(D0, D1, D2, D3, D4, D5); // rs, e, d4-d7 + +// LED +DigitalOut led(LED1); + +// PWM +PwmOut fan(D12); + +uint8_t tempSetValue = 25; // degree +bool fanOn = false; +float fanDutyCycle = 0.0f; + +//const uint8_t PRESS_DURATION = 5; + +int main() +{ + // Configure + tempUp.mode(PullUp); + tempDown.mode(PullUp); + onOff.mode(PullUp); + fan.period(4.0f); // period + fan.write(fanDutyCycle); // duty cycle + + // Loop + while(1) { + float temp1 = (adc_temp1.read()*3.3f*100.0f); + lcd.printf("Temp1 = %.1f\n", temp1); + lcd.printf(""); + printf("\033[2A"); + + if(tempUp == 0) tempSetValue++; + if(tempDown == 0) tempSetValue--; + if(onOff == 0) fanOn = !fanOn; + //if(temp1 > tempSetValue && fanOn) { + // fan.write(fanDutyCycle); + //} else { + // fan.write(0.0); + //} + led = !led; + wait(0.020); + } +}