что бы управлять 4 выходами 6 нагрузками нужен дешифратор
хотя можно использовать 3 выхода используя метод Чарлиплексинг
#define T_SET 24
#define DIFF 2
#define T_MIN (T_SET - DIFF)
int pins[3] = {2, 3, 4}; // Пины, к которым подключены тэны
float lastTemperature = T_SET; // Последняя измеренная температура
unsigned long lastTime = millis(); // Время последнего измерения температуры
void setup() {
// Начальная настройка пинов
for (int i = 0; i < 3; i++) {
pinMode(pins, INPUT);
}
}
void loop() {
float Tdch = readTemperature(); // Функция для чтения температуры с датчика
float diff = DIFF;
// Если температура быстро падает, увеличиваем дифференциал
if ((Tdch - lastTemperature) / ((millis() - lastTime) / 60000.0) < -1) {
diff += 1;
}
int numActiveTens = (T_SET - Tdch) / diff;
if (numActiveTens < 0) numActiveTens = 0;
if (numActiveTens > NUM_TENS) numActiveTens = NUM_TENS;
for (int i = 0; i < NUM_TENS; i++) {
if (i < numActiveTens) {
setTen(i);
delay(1000); // Задержка между переключением тэнов
}
}
lastTemperature = Tdch; // Обновляем последнюю измеренную температуру
lastTime = millis(); // Обновляем время последнего измерения температуры
}
void setTen(int ten) {
// Сначала устанавливаем все пины в состояние INPUT
for (int i = 0; i < 3; i++) {
pinMode(pins, INPUT);
}
// Затем устанавливаем нужные пины в состояние HIGH и LOW
pinMode(pins[ten / 2], OUTPUT);
digitalWrite(pins[ten / 2], ten % 2 == 0 ? HIGH : LOW);
pinMode(pins[(ten / 2 + 1) % 3], OUTPUT);
digitalWrite(pins[(ten / 2 + 1) % 3], ten % 2 == 0 ? LOW : HIGH);
}
float readTemperature() {
// Здесь должен быть код для чтения температуры с датчика
// Возвращаемое значение должно быть в градусах Цельсия
}