/
AsteriX
/
t2
Обзор
Документация
Войти
/
AsteriX
/
t2
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
new_file.cpp
96 строк
3 KB
AsteriX
update: new_file.cpp
02 июн 2026, 16:02
Верифицирован
02 июн 2026, 16:02
572e013
Код
Авторство
О чём код?
#include <OneWire.h> #include <DallasTemperature.h> // Пины #define ONE_WIRE_BUS 2 // Пин для DS18B20 #define DATA_PIN 10 // Пин для DS (74HC595) #define CLOCK_PIN 11 // Пин для SH_CP (74HC595) #define LATCH_PIN 12 // Пин для ST_CP (74HC595) #define RELAY_PIN 9 // Пин для реле // Временные настройки unsigned long previousMillis = 0; const long interval = 1000; // Интервал опроса — 1 с // Температурные настройки const float TARGET_TEMP = 60.0; // Целевая температура (°C) const float HYSTERESIS = 2.0; // Гистерезис (±°C) // Создание объектов OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); // Массив кодов для цифр 0–9 const byte digitCodes[10] = { B00111111, // 0 B00000110, // 1 B01011011, // 2 B01001111, // 3 B01100110, // 4 B01101101, // 5 B01111101, // 6 B00000111, // 7 B01111111, // 8 B01101111 // 9 }; void setup() { // Инициализация пинов pinMode(DATA_PIN, OUTPUT); pinMode(CLOCK_PIN, OUTPUT); pinMode(LATCH_PIN, OUTPUT); pinMode(RELAY_PIN, OUTPUT); // Запуск датчика температуры sensors.begin(); sensors.setResolution(12); // Максимальная точность // Выключение реле при старте digitalWrite(RELAY_PIN, LOW); // Очистка индикатора clearDisplay(); } void loop() { unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; sensors.requestTemperatures(); float currentTemp = sensors.getTempCByIndex(0); if (currentTemp < TARGET_TEMP - HYSTERESIS) { digitalWrite(RELAY_PIN, HIGH); } else if (currentTemp > TARGET_TEMP + HYSTERESIS) { digitalWrite(RELAY_PIN, LOW); } displayTemperature(currentTemp); } } void displayTemperature(float temp) { int temperature = (int)temp; int digit1 = temperature / 10; int digit2 = temperature % 10; digitalWrite(LATCH_PIN, LOW); shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, digitCodes[digit1]); digitalWrite(LATCH_PIN, HIGH); delay(2); clearDisplay(); delay(2); digitalWrite(LATCH_PIN, LOW); shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, digitCodes[digit2]); digitalWrite(LATCH_PIN, HIGH); } void clearDisplay() { digitalWrite(LATCH_PIN, LOW); shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, 0); digitalWrite(LATCH_PIN, HIGH); }