#include <OneButton.h>
#define ntc_pin A0
#define nominal_resistance 10000
#define nominal_temeprature 25
#define samplingrate 5
#define beta 3950
#define Rref 10000
#define keypin 2
#define FAN 3
OneButton key(keypin,true,true);//低电平有效,开启内部拉高 INPUT_PULLUP
int samples = 0 ,state = 0, number = 0, flag = 0;
void singleClick()
{
number++;
if(number > 2) number = 0;
Serial.println(number);
}
void longPress()
{
state++;
if(state > 1) state = 0;
Serial.println(state);
}
void setup(void) {
Serial.begin(9600);
pinMode(FAN, OUTPUT);
key.setDebounceTicks(30);//按键消抖时间
key.attachClick(singleClick);//单击
key.setPressTicks(1500);//按键长按时间
key.attachDuringLongPress(longPress);//长按触发
}
void loop(void) {
key.tick();
uint8_t i;
float average = 0.0;
samples = 0;
for (i = 0; i < samplingrate; i++) {
samples += analogRead(ntc_pin);
delay(10);}
average = samples / samplingrate;
//Serial.print("ADC readings ");
//Serial.println(average);
average = 1023 / average - 1;
average = Rref / average;
//Serial.print("Thermistor resistance ");
//Serial.println(average);
float temperature;
temperature = average / nominal_resistance;
temperature = log(temperature);
temperature /= beta;
temperature += 1.0 / (nominal_temeprature + 273.15);
temperature = 1.0 / temperature;
temperature -= 273.15;
Serial.print("Temperature ");
Serial.print(temperature);
Serial.println(" *C");
if(state == 0){
if(number == 0){
if(temperature < 45){
digitalWrite(FAN, HIGH);
}else{
digitalWrite(FAN, LOW);
}
}
if(number == 1){
if(temperature < 50){
digitalWrite(FAN, HIGH);
}else{
digitalWrite(FAN, LOW);
}
}
if(number == 2){
if(temperature < 55){
digitalWrite(FAN, HIGH);
}else{
digitalWrite(FAN, LOW);
}
}
}else{
digitalWrite(FAN, LOW);
}
delay(100);
}