Скейч Часы + 2 термомерта. У Термометров есть минимальное значение, у каждого свое выводимое в порт, после перезапуска IDE не сохраняется минимальное значение а записывается заново.
‘’’
#define photo_rez_pin A2 // порт A2
#define CLK 2
#define DIO 3
#include <microDS3231.h>
#include “GyverTM1637.h”
#include “TM1637.h”
#include “GyverFilters.h”
#include <avr/eeprom.h>
#include <microDS18B20.h>
uint8_t s1_addr = {0x28, 0xD2, 0x83, 0x83, 0x0, 0x0, 0x0, 0x60}; //дом
uint8_t s2_addr = {0x28, 0xC, 0x35, 0x76, 0xE0, 0x1, 0x3C, 0x8A}; //Улица
//{0x28, 0x61, 0x64, 0x34, 0x8E, 0x2F, 0xAA, 0x3C};
MicroDS18B20 <A1, s1_addr> ds1;
MicroDS18B20 <A1, s2_addr> ds2;
GFilterRA analog1; // фильтр назовём analog1
GFilterRA analog2; // фильтр назовём analog2
MicroDS3231 rtc;
GyverTM1637 disp(CLK, DIO);
int8_t TimeDisp = {0x00,0x00,0x00,0x00};
int8_t Temp[4];
int minut;
boolean ifPoint;
uint32_t tmr;
boolean flag;
boolean chto;
byte chto_flag = 2;
unsigned long last_time1;
unsigned long last_time2;
unsigned long last_time3;
unsigned long last_time4;
static uint32_t schitat_DS1;
static uint32_t schitat_DS2;
static uint32_t minimum1 = 250;
static uint32_t minimum2 = 250;
void setup() {
Serial.begin(9600);
disp.clear();
disp.brightness(7); // яркость, 0 - 7 (минимум - максимум)
// установка коэффициента фильтрации (0.0… 1.0). Чем меньше, тем плавнее фильтр
analog1.setCoef(0.50);
// установка шага фильтрации (мс). Чем меньше, тем резче фильтр
analog1.setStep(1);
analog2.setCoef(0.50);
analog2.setStep(1);
}
void loop() {
photo_rez();
if(millis() - last_time1 >= 30000 && chto_flag == 0 ) {
last_time2 = millis();
chto_flag = 1;
Serial.println(“chto_flag = 1”);
}
if(millis() - last_time2 >= 30000 && chto_flag == 1 ) {
last_time3 = millis();
chto_flag = 2;
Serial.println(“chto_flag = 2”);
}
if(millis() - last_time3 >= 30000 && chto_flag == 2 ) {
last_time1 = millis();
chto_flag = 0;
Serial.println(“chto_flag = 0”);
}
if (chto_flag == 0) Clock();
if (chto_flag == 1) Temper_DS1();
if (chto_flag == 2) Temper_DS2();
}
void photo_rez() {
int val = analogRead(photo_rez_pin);
val = map(val, 400, 800, 0, 7);
val = constrain(val, 0, 7);
disp.brightness(val);
// Serial.println(val);
}
void Clock() {
TimeDisp[0] = rtc.getHours() / 10;
TimeDisp[1] = rtc.getHours() % 10;
TimeDisp[2] = rtc.getMinutes() / 10;
TimeDisp[3] = rtc.getMinutes() % 10;
tmr = millis();
flag = !flag;
disp.point(flag); // выкл/выкл точки
Serial.print(TimeDisp[0]);
Serial.print(TimeDisp[1]);
Serial.print(“:”);
Serial.print(TimeDisp[2]);
Serial.println(TimeDisp[3]);
disp.twist(TimeDisp, 50); // скорость прокрутки 100
// delay(500);
}
void Temper() {
static uint32_t schitat;
schitat = round (rtc.getTemperatureFloat()) - 2;
// Serial.print(schitat);
schitat = analog1.filteredTime(schitat);
Serial.println(schitat);
Temp[0] = “”;
Temp[1] = schitat / 10;
Temp[2] = schitat % 10;
Temp[3] = “”;
disp.point(0); // выкл/выкл точки
disp.twist(Temp, 50); // скорость прокрутки 100
}
void Temper_DS1() {
//static uint32_t schitat_DS1;
ds1.requestTemp();
schitat_DS1 = ds1.getTemp() * 10;
Temper_Min_DS1();
// schitat_DS1 = round (ds.getTemp());
schitat_DS1 = analog1.filteredTime(schitat_DS1);
if (ds1.readTemp()) {
Serial.println(schitat_DS1);
Temp[0] = schitat_DS1 / 100;
Temp[1] = schitat_DS1 / 10 % 10;
Temp[2] = schitat_DS1 % 10;
Temp[3] = "X";
disp.point(1); // выкл/выкл точки
disp.twist(Temp, 50); // скорость прокрутки 100
}
}
void Temper_Min_DS1() {
if (schitat_DS1 < minimum1) {
minimum1 = schitat_DS1;
Serial.print("minimum = ");
Serial.println(minimum1);
}
if(millis() - last_time4 >= 10000 && chto_flag == 1){
last_time4 = millis();
Serial.print(“min=”);
Serial.println(minimum1);
}
}
void Temper_DS2() {
ds2.requestTemp();
schitat_DS2 = ds2.getTemp() * 10;
Temper_Min_DS2();
// schitat_DS2 = round (ds.getTemp());
schitat_DS2 = analog2.filteredTime(schitat_DS2);
if (ds1.readTemp()) {
Serial.println(schitat_DS2);
Temp[0] = schitat_DS2 / 100;
Temp[1] = schitat_DS2 / 10 % 10;
Temp[2] = schitat_DS2 % 10;
Temp[3] = "X";
tmr = millis();
flag = !flag;
disp.point(flag); // выкл/выкл точки
disp.twist(Temp, 50); // скорость прокрутки 100
}
}
void Temper_Min_DS2() {
if (schitat_DS2 < minimum2) {
minimum2 = schitat_DS2;
Serial.print("minimum2 = ");
Serial.println(minimum2);
}
if(millis() - last_time4 >= 10000 && chto_flag == 2){
last_time4 = millis();
Serial.print(“min=”);
Serial.println(minimum2);
}
}
‘’’