#include <Arduino.h>
#define TEMP_PIN A0
#define POT_PIN A1
#define FANLED_PIN 9
#define BUTTON_PIN 2
bool manualMode=false;
float temperature=0.0;
int dutyCycle=0;
unsigned long lastTempRead=0;
unsigned long lastPWMUpdate=0;
unsigned long lastSerialSend=0;
unsigned long lastButtonCheck=0;
bool lastButtonState=HIGH;
void setup(){
pinMode(FANLED_PIN,OUTPUT);
pinMode(BUTTON_PIN,INPUT_PULLUP);
Serial.begin(9600);
}
void loop(){
unsigned long currentMillis=millis();
if (currentMillis-lastTempRead>=500) {
int adcValue=analogRead(TEMP_PIN);
temperature=map(adcValue,0,1023,0,50);
lastTempRead=currentMillis;
}
if (currentMillis-lastPWMUpdate>=200){
if (!manualMode){
dutyCycle=map(constrain(temperature,20,40),20,40,0,255);
}else{
int potValue=analogRead(POT_PIN);
dutyCycle=map(potValue,0,1023,0,255);
}
analogWrite(FANLED_PIN,dutyCycle);
lastPWMUpdate=currentMillis;
}
if (currentMillis-lastButtonCheck>=10) {
bool currentState=digitalRead(BUTTON_PIN);
if (currentState==LOW&&lastButtonState==HIGH){
delay(50);
if (digitalRead(BUTTON_PIN)==LOW) {
manualMode=!manualMode;
}
}
lastButtonState=currentState;
lastButtonCheck=currentMillis;
}
if (currentMillis-lastSerialSend>=1000){
String modeStr=manualMode ? "Manual" : "Auto";
Serial.print("Mod:");
Serial.print(modeStr);
Serial.print(",Temp:");
Serial.print(temperature, 2);
Serial.print("C,Duty: ");
Serial.println(dutyCycle);
lastSerialSend=currentMillis;
}
}