#define redLed 4 // Номер пина красного светодиода
#define yellowLed 3 // Номер пина желтого светодиода
#define greenLed 2 // Номер пина зеленого светодиода
#define NTC A1 // Номер пина терморезистора
#define ALARM 20 // Аварийная граница температуры
#define WARNING 15 // Граница температуры для предупреждения
#define BETA 3950 // Коэффициент для расчета температуры
// Макроопределение для расчета температуры
#define Temperature(x) (1 / (log(1 / (1023.0 / x - 1)) / BETA + 1.0 / 298.15) - 273.15)
int tempBefore; // Переменная для хранения предыдущего значения аналогового входа
void SendMessages(int temp) { // Отправка сообщений в порт
Serial.print("Температура: ");
Serial.print(Temperature(temp));
Serial.println(" 'C");
}
void setup() {
// put your setup code here, to run once:
// Настройка пинов на вход и на выход
pinMode(redLed, OUTPUT);
pinMode(yellowLed, OUTPUT);
pinMode(greenLed, OUTPUT);
pinMode(NTC, INPUT);
// Запуск последовательного порта
Serial.begin(9600);
tempBefore = analogRead(NTC); // считывание показаний аналогового выхода
SendMessages(tempBefore); // Отправка сообщений в порт
}
void loop() {
// put your main code here, to run repeatedly:
// При достижении аварийного значения температуры зажигаем красный светодиод
if (Temperature(analogRead(NTC)) > ALARM) {
digitalWrite(redLed, HIGH);
digitalWrite(yellowLed, LOW);
digitalWrite(greenLed, LOW);
}
// При достижении предупредительного значения зажигаем желтый светодиод
else if (Temperature(analogRead(NTC)) > WARNING) {
digitalWrite(redLed, LOW);
digitalWrite(yellowLed, HIGH);
digitalWrite(greenLed, LOW);
}
// При нормальной температуре зажигаем зеленый светодиод
else {
digitalWrite(redLed, LOW);
digitalWrite(yellowLed, LOW);
digitalWrite(greenLed, HIGH);
}
// При изменении температуры отправляем сообщения в порт
if (tempBefore != analogRead(NTC)) {
tempBefore = analogRead(NTC);
SendMessages(tempBefore);
}
}