#define THERMISTORPIN A0
#define THERMISTORPIN2 A1
#define THERMISTORNOMINAL 10000
#define TEMPERATURENOMINAL 25
#define NUMSAMPLES 5
#define BCOEFFICIENT 3950
#define SERIESRESISTOR 10000
int samples[NUMSAMPLES];
int samples2[NUMSAMPLES];
unsigned long hairdryerStartMillis;
unsigned long tempStartMillis;
unsigned long currentMillis;
const unsigned long onDuration = 2000;
const unsigned long offDuration = 4000;
const unsigned long periodTemp = 1000;
void setup() {
Serial.begin(9600);
pinMode(2, OUTPUT);
analogReference(EXTERNAL);
hairdryerStartMillis = millis();
tempStartMillis = millis();
}
void loop() {
currentMillis = millis();
hairdryerToggle();
temperatureReadings();
}
void temperatureReadings(){
if (currentMillis - tempStartMillis >= periodTemp) {
uint8_t i;
float average;
float average2;
// take N samples in a row, with a slight delay
for (i=0; i< NUMSAMPLES; i++) {
samples[i] = analogRead(THERMISTORPIN);
samples2[i] = analogRead(THERMISTORPIN2);
delay(10);
}
// average all the samples out
average = 0;
average2 = 0;
for (i=0; i< NUMSAMPLES; i++) {
average += samples[i];
average2 += samples2[i];
}
average /= NUMSAMPLES;
average2 /= NUMSAMPLES;
//Serial.print("Average analog reading ");
//Serial.println(average);
// convert the value to resistance
average = 1023 / average - 1;
average = SERIESRESISTOR / average;
average2 = 1023 / average2 - 1;
average2 = SERIESRESISTOR / average2;
//Serial.print("Thermistor resistance ");
// Serial.println(average);
float steinhart;
steinhart = average / THERMISTORNOMINAL; // (R/Ro)
steinhart = log(steinhart); // ln(R/Ro)
steinhart /= BCOEFFICIENT; // 1/B * ln(R/Ro)
steinhart += 1.0 / (TEMPERATURENOMINAL + 273.15); // + (1/To)
steinhart = 1.0 / steinhart; // Invert
steinhart -= 273.15; // convert absolute temp to C
float steinhart2;
steinhart2 = average2 / THERMISTORNOMINAL; // (R/Ro)
steinhart2 = log(steinhart2); // ln(R/Ro)
steinhart2 /= BCOEFFICIENT; // 1/B * ln(R/Ro)
steinhart2 += 1.0 / (TEMPERATURENOMINAL + 273.15); // + (1/To)
steinhart2 = 1.0 / steinhart2; // Invert
steinhart2 -= 273.15; // convert absolute temp to C
Serial.print("Temperature 1 ");
Serial.print(steinhart);
Serial.println(" *C");
Serial.print("Temperature 2 ");
Serial.print(steinhart2);
Serial.println(" *C");
tempStartMillis = currentMillis;
}
}
void hairdryerToggle() {
if (digitalRead(2) == HIGH) {
if(currentMillis - hairdryerStartMillis >= onDuration) {
hairdryerStartMillis += onDuration;
digitalWrite(2, LOW);
}
}
else {
if(currentMillis - hairdryerStartMillis >= offDuration) {
hairdryerStartMillis += offDuration;
digitalWrite(2, HIGH);
}
}
}