/*
Соберите световую колонну (tower light) из трёх светодиодов (LED),
подключите их к контроллеру — зелёный на пин 2, жёлтый на пин 3 и красный на пин 4.
Изменить цвета можно в diagram.json.
Подключите к контроллеру на пин A1 датчик температуры — Analog Temperature Sensor, NTC.
Напишите программу, при выполнении которой в терминал будет выводиться значение температуры.
Световая колонна должна работать по принципу норма — предупреждение — тревога.
Необходимо задать уставки (Setpoint, SP) — три диапазона по температуре хладагента:
от 10 до 15 градусов — норма;
> 15 градусов — предупреждение;
> 20 градусов — тревога.
Программа должна иметь комментарии.
*/
//Определение констант для номеров пинов
#define green_pin 2
#define yellow_pin 3
#define red_pin 4
//Определение констант для уставок
#define SP_norm 10
#define SP_wrn 15
#define SP_alarm 20
//Определения для работы модуля температуры
const float BETA = 3950; // should match the Beta Coefficient of the thermistor
int analogValue;
float celsius;
void setup() {
// Объявление работы с последоватлеьным портом
Serial.begin(9600);
//Установка режимов пинов
pinMode(green_pin, OUTPUT);
pinMode(yellow_pin, OUTPUT);
pinMode(red_pin, OUTPUT);
}
void loop() {
// преобразование аналогового значения напряжения в градусы цельсия:
analogValue = analogRead(A1);
celsius = 1 / (log(1 / (1023. / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15;
//Вывод текущего значения температуры
Serial.print("temperature:");
Serial.println(celsius);
if((celsius >= SP_norm) && (celsius <= SP_wrn)) //вкл зеленый, если норма
{
digitalWrite(green_pin, HIGH);
digitalWrite(yellow_pin, LOW);
digitalWrite(red_pin, LOW);
}
else if((celsius > SP_wrn) && (celsius < SP_alarm)) //вкл желтый, если внимание
{
digitalWrite(green_pin, LOW);
digitalWrite(yellow_pin, HIGH);
digitalWrite(red_pin, LOW);
}
else if(celsius > SP_alarm) //вкл красный, если тревога
{
digitalWrite(green_pin, LOW);
digitalWrite(yellow_pin, LOW);
digitalWrite(red_pin, HIGH);
}
else //откл все, если ниже нормы
{
digitalWrite(green_pin, LOW);
digitalWrite(yellow_pin, LOW);
digitalWrite(red_pin, LOW);
}
}