#define DEBUG // show messages like "fan on, mid", "fan off"
#define TEMP_DEBUG // in addition to DEBUG show temp raw value every second
// minor feature. Week influence as I think. Can be 0 or 1
// 1 is better I feel
#define TEMP_CONTROL_TYPE 1
// inputs/outputs
#define INPUT_EN 6 // enable input
#define INPUT_TEMP A3 // temp sensing input. Should be some A pin
#define OUTPUT_PWM 10 // pwm output, DONT CHANGE THIS PIN, connected to specified
#define PWM_DUTY_MIN 65 // minimal pwm %
#define PWM_DUTY_MAX 85 // maximal pwm %( dont set 100, 95 is great for max)
#define STARTUP_DELAY 2 // period for pumping up motor with constant ON output without pwm for better starting, seconds.
#define TEMP_THRESHOLD 620
#define PWM_FREQ 770 // pwm frequency. It is just some value to get desired frequency. 720 is about 22kHz
#define PWM_STEP 7 // when temp is high and rising system increase pwm duty step by step by this value. Higher value - faster it ramp and slow down. 7 is ~1% duty per second.
enum {OFF = 0, RUNNING = 1, STARTUP = 2};
volatile bool _wdtFlag = 0;
byte enButtonTmp = 0;
byte mode = OFF;
byte tempTmp = 0;
byte tempTmp2 = 0;
uint16_t curTemp, prevTemp = 0, tmpTemp;
uint16_t dutyTmp;
byte startUpFlag = 0;
uint16_t dutyMin = PWM_FREQ / (100 / (float)PWM_DUTY_MIN);
uint16_t dutyMax = PWM_FREQ / (100 / (float)PWM_DUTY_MAX);
uint32_t time = 0;
void setup(){
delay(500);
#ifdef DEBUG
Serial.begin(9600);
#endif
digitalWrite(OUTPUT_PWM, LOW);
pinMode(OUTPUT_PWM, OUTPUT);
// 1s timer using WDT
// WDTCSR = (1<<WDCE) | (1<<WDE);
// WDTCSR = (1<<WDCE) | (1<<WDIE) | (1<<WDP2) | (1<<WDP1); // 1s
#ifdef DEBUG
Serial.println("begin...");
Serial.print("Temp control type: ");
Serial.println(TEMP_CONTROL_TYPE, DEC);
Serial.println();
Serial.println();
#endif
stopPwm();
OCR1A = PWM_FREQ;
OCR1B = dutyMin;
TCNT1 = 0;
TCCR1A = (1 << WGM11) | (1 << WGM10) | (1 << COM1B1);
TCCR1B = (1 << WGM13) | (1 << WGM12);
//OCR1A = PWM_FREQ;
//OCR1B = dutyMin;
delay(100);
}
void loop()
{
enableHandler();
if (millis() - time >= 1000) // 1 sec
{
time = millis();
startUpHandler();
tempHandler();
}
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
ntc1:GND
ntc1:VCC
ntc1:OUT
led1:A
led1:C