#define temp_data A1 //константа с номером пина для получения данных с термистора
#define ledg 2 //константа с номером пина для зеленого светодиода
#define ledy 3 //константа с номером пина для желтого светодиода
#define ledr 4 //константа с номером пина для красного светодиода
const float betac = 3950; //B-коэффициент термистора
void setup() {
pinMode(temp_data, INPUT); //определение режима для пина термистора как входа
pinMode(ledg, OUTPUT); //определение режима для пина зеленого светодиода как выхода
pinMode(ledy, OUTPUT); //определение режима для пина желтого светодиода как выхода
pinMode(ledr, OUTPUT); //определение режима для пина красного светодиода как выхода
Serial.begin(9600); //инициализация последовательного порта
}
void loop() {
int analog_value = analogRead(temp_data); //чтение аналоговых данных с пина термистора
float celsius_temp = 1 / (log(1 / (1023. / analog_value - 1)) / betac + 1.0 / 298.15) - 273.15; //пересчет значения ацп в градусы цельсия
Serial.print("Температура "); //
Serial.print(celsius_temp); //Вывод в терминал текущего сигнала с термистора в градусах цельсия
Serial.print(" ℃\n"); //
bool sp1 = celsius_temp >= 10 && celsius_temp <=15; //задание уставки "норма"
bool sp2 = celsius_temp > 15; //задание уставки "предупреждение"
bool sp3 = celsius_temp > 20; //задание уставки "авария"
if (sp1) { //условие если температура в пределах нормы
digitalWrite(ledr, LOW); //низкий уровень на пин красного светодиода (отключение)
digitalWrite(ledy, LOW); //низкий уровень на пин желтого светодиода (отключение)
digitalWrite(ledg, HIGH); //высокий уровень на пин зеленого светодиода (включение)
}
else if (sp2 && sp3) { //условие если температура превысила аварийный уровень
digitalWrite(ledg, LOW); //низкий уровень на пин зеленого светодиода (отключение)
digitalWrite(ledy, HIGH); //высокий уровень на пин желтого светодиода (включение)
digitalWrite(ledr, !digitalRead(ledr)); //попытка помигать красным светодиодом (просьба не пинать ногами)
// инверсия состояния пина красного светодиода с каждым повторением цикла
// при выполнении условия
}
else if (sp2 && !sp3) { //условие если температура превысила уровень предупреждения
digitalWrite(ledg, LOW); //низкий уровень на пин зеленого светодиода (отключение)
digitalWrite(ledr, LOW); //низкий уровень на пин красного светодиода (отключение)
digitalWrite(ledy, HIGH); //высокий уровень на пин желтого светодиода (включение)
}
else { //условие если температура ниже нормы
digitalWrite(ledg, LOW); //низкий уровень на пин зеленого светодиода (отключение)
digitalWrite(ledr, LOW); //низкий уровень на пин красного светодиода (отключение)
digitalWrite(ledy, !digitalRead(ledy)); //мигаем желтым светодиодом
Serial.print("Низкая температура!\n"); //вывод в терминал сообщения о низкой температуре
}
delay(500); //задержка повторения цикла на 0,5 секунды
}