Re: Часы с календарем
Здравствуйте. Ночной режим можно добавить? С 22:00 до 7:00.
Полное гашение индикаторов или затемнение?
Двоеточие и год 20 затемнить не получится.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
forum.rcl-radio.ru → Новые идеи для проектов Arduino → Часы с календарем
Страницы Назад 1 … 6 7 8 9 10 … 16 Далее
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Здравствуйте. Ночной режим можно добавить? С 22:00 до 7:00.
Полное гашение индикаторов или затемнение?
Двоеточие и год 20 затемнить не получится.
Нужно будет провести эксперимент, Яркость индикаторов можно изменить.
При загорании индикатора в коде предусмотренно полное гашение всех сегментов и отключение анодов. Это сделано для устранения засветки сегментов. Я изменил скетч, теперь можно изменить время гашения, тем самым регулируя яркость свечения.
Каждый индикатор загорается с частотой 400 Гц, то есть период свечения 2,5 мс
Я вывел в скетч параметр :
int brig = 1500;
Это время гашения в мкс, Вам нужно подобрать это значение для оптимальной яркости свечения в ночном режиме
// 19 === SCL
// 20 === SDA
//// Катоды 1 группа
#define SEG_A1 28 // 33
#define SEG_B1 29 // 32
#define SEG_C1 30 // 31
#define SEG_D1 31 // 30
#define SEG_E1 23 // 26
#define SEG_F1 22 // 25
#define SEG_G1 21 // 24
//// Катоды 2 группа
#define SEG_A2 11 // 13
#define SEG_B2 12 // 14
#define SEG_C2 13 // 15
#define SEG_D2 14 // 16
#define SEG_E2 15 // 17
#define SEG_F2 18 // 21
#define SEG_G2 19 // 22
//// Катоды 3 группа
#define SEG_A3 1 // 44
#define SEG_B3 2 // 43
#define SEG_C3 3 // 42
#define SEG_D3 4 // 41
#define SEG_E3 5 // 1
#define SEG_F3 6 // 2
#define SEG_G3 7 // 3
//// Аноды
#define AN_1 27 // 34
#define AN_2 26 // 35
#define AN_3 25 // 36
#define AN_4 24 // 37
#define AN_5 0 // 40
#define MENU 8 // 9
#define UP 9 // 10
#define EXIT 10 // 11
#include <Wire.h>
#include <DS3231.h> // http://rcl-radio.ru/wp-content/uploads/2022/10/DS3231.zip
#include <OneWire.h> // http://rcl-radio.ru/wp-content/uploads/2018/07/OneWire.zip
DS3231 clock;RTCDateTime DateTime;
OneWire ds(20); // Вход датчика 18b20 (PC4 23 пин контр)
long oldPosition = -999, newPosition, times,times1;
int an, segm1, segm2, segm3, i, set;
byte d1, d0, h1, h0, m1, m0, s1, s0, t1, t0, ms1, ms0, g0, g1, dn;
int hour,minut,secon,data,mon,year,den,temp;
int hh, mm , ss , dd , mes, god;
int brig = 1500;
void setup() {
Wire.begin();
clock.begin();
// clock.setDateTime(2023, 8, 26, 20, 40, 0);
cli();
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 0;
// (8000000/((300+1)x64))=415.28239202658 Hz
OCR1A = 300;
TCCR1B |= (1 << WGM12);
// Prescaler 64
TCCR1B |= (1 << CS11) | (1 << CS10);
TIMSK |= (1 << OCIE1A);
sei();
pinMode(SEG_A1, OUTPUT);
pinMode(SEG_B1, OUTPUT);
pinMode(SEG_C1, OUTPUT);
pinMode(SEG_D1, OUTPUT);
pinMode(SEG_E1, OUTPUT);
pinMode(SEG_F1, OUTPUT);
pinMode(SEG_G1, OUTPUT);
pinMode(AN_1, OUTPUT);
pinMode(AN_2, OUTPUT);
pinMode(AN_3, OUTPUT);
pinMode(AN_4, OUTPUT);
pinMode(AN_5, OUTPUT);
pinMode(SEG_A2, OUTPUT);
pinMode(SEG_B2, OUTPUT);
pinMode(SEG_C2, OUTPUT);
pinMode(SEG_D2, OUTPUT);
pinMode(SEG_E2, OUTPUT);
pinMode(SEG_F2, OUTPUT);
pinMode(SEG_G2, OUTPUT);
pinMode(SEG_A3, OUTPUT);
pinMode(SEG_B3, OUTPUT);
pinMode(SEG_C3, OUTPUT);
pinMode(SEG_D3, OUTPUT);
pinMode(SEG_E3, OUTPUT);
pinMode(SEG_F3, OUTPUT);
pinMode(SEG_G3, OUTPUT);
pinMode (MENU,INPUT_PULLUP);
pinMode (UP,INPUT_PULLUP);
pinMode (EXIT,INPUT_PULLUP);
}
void loop() {
DateTime = clock.getDateTime();hour = DateTime.hour;minut = DateTime.minute;secon = DateTime.second;
data = DateTime.day;mon = DateTime.month;year = DateTime.year;
den=DateTime.dayOfWeek;
if(millis()-times1>10){temp=dsRead(0);times1=millis();}
// temp=clock.readTemperature();
hh=hour;mm=minut;ss=secon;dd=data;mes=mon;god=year;
if(digitalRead(MENU)==LOW){set++;if(set>6){set=0;}delay(200);}
if(digitalRead(EXIT)==LOW){set=0;delay(200);}
if(set==1 && digitalRead(UP)==LOW){hh++;if(hh>23){hh=0;}clock.setDateTime(year, mon, data, hh, minut, secon);delay(200);}
if(set==2 && digitalRead(UP)==LOW){mm++;if(mm>59){mm=0;}clock.setDateTime(year, mon, data, hour, mm, secon);delay(200);}
if(set==3 && digitalRead(UP)==LOW){ss=0; clock.setDateTime(year, mon, data, hour, minut, ss);delay(200);}
if(set==4 && digitalRead(UP)==LOW){dd++;if(dd>31){dd=1;}clock.setDateTime(year, mon, dd, hour, minut, secon);delay(200);}
if(set==5 && digitalRead(UP)==LOW){mes++;if(mes>12){mes=1;}clock.setDateTime(year, mes, data, hour, minut, secon);delay(200);}
if(set==6 && digitalRead(UP)==LOW){god++;if(god>2099){god=2023;}clock.setDateTime(god, mon, data, hour, minut, secon);delay(200);}
if(set==1&&millis()-times<200){h1=10;h0=10;}
else{ if(hour/10%10==0){h1=10;}else{h1 = hour/10%10;}h0 = hour%10; }
if(set==2&&millis()-times<200){m1=10;m0=10;}
else{ m1 = minut/10%10; m0 = minut%10; }
if(set==3&&millis()-times<200){s1=10;s0=10;}
else{ s1 = secon/10%10;s0 = secon%10; }
if(set==4&&millis()-times<200){d1=10;d0=10;}
else{ if(data/10%10==0){d1=10;}else{d1 = data/10%10;}d0 = data%10; }
if(set==5&&millis()-times<200){ms1=10;ms0=10;}
else{ if(mon/10%10==0){ms1=10;}else{ms1 = mon/10%10;}ms0 = mon%10; }
if(set==6&&millis()-times<200){g1=10;g0=10;}
else{ g1 = (year-2000)/10%10; g0 = (year-2000)%10; }
dn = den+10;
// ds > 1пн 2вт 3ср 4чт 5пт 6сб 7вс
// jh > 1вс 2пн 3вт 4ср 5чт 6ст 7сб
t1 = temp/10%10;
t0 = temp%10;
if(millis()-times>400){times=millis();}
delay(100);
}
ISR(TIMER1_COMPA_vect){
switch (i) {
// Q1
case 0: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig);
segm2 = m0; segm1 = d0; segm3 = g1; segment_1(); segment_2(); segment_3();an = 0; anod();break;
// Q2
case 1: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig);
segm2 = s1; segm1 = dn; segm3 = g0;segment_1(); segment_2(); segment_3();an = 1; anod();break;
// Q3
case 2: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig);
segm1 = h1; segm2 = s0; segm3 = ms1;segment_1(); segment_2(); segment_3();an = 2; anod();break;
// Q4
case 3: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig);
segm1 = h0; segm2 = t1; segm3 = ms0; segment_1(); segment_2(); segment_3();an = 3; anod();break;
// Q5
case 4: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig);
segm1 = m1; segm2 = t0; segm3 = d1; segment_1(); segment_2(); segment_3();an = 4; anod();break;
}
i++;if (i > 4) {i = 0;}
}
void segment_1() {
switch (segm1) {
// A B C D E F G
case 0: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // 0
case 1: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 1
case 2: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 2
case 3: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 3
case 4: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 4
case 5: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 5
case 6: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 6
case 7: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 7
case 8: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 8
case 9: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 9
case 10: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // пусто
case 17: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВС
case 11: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ПН
case 12: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВТ
case 13: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // СР
case 14: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ЧТ
case 15: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // ПТ
case 16: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // СБ
}
}
void segment_2() {
switch (segm2) {
// A B C D E F G
case 0: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 1); break; // 0
case 1: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 1
case 2: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 1); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 2
case 3: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 3
case 4: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 4
case 5: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 5
case 6: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 6
case 7: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 7
case 8: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 8
case 9: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 9
case 10: ch(SEG_A2, 1); ch(SEG_B2, 1); ch(SEG_C2, 1); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // пусто
}
}
void segment_3() {
switch (segm3) {
// A B C D E F G
case 0: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 1); break; // 0
case 1: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 1
case 2: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 1); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 2
case 3: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 3
case 4: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 4
case 5: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 5
case 6: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 6
case 7: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 7
case 8: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 8
case 9: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 9
case 10: ch(SEG_A3, 1); ch(SEG_B3, 1); ch(SEG_C3, 1); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // пусто
}
}
void anod() {
switch (an) {
case 0: ch(AN_1, 0); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
case 1: ch(AN_1, 1); ch(AN_2, 0); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
case 2: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 0); ch(AN_4, 1); ch(AN_5, 1); break;
case 3: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 0); ch(AN_5, 1); break;
case 4: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 0); break;
case 5: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
}
}
void ch(int pin, int logic) {
digitalWrite(pin, logic);
}
float dsRead(byte x) {
byte data[2], addr[8][8], kol = 0;
while (ds.search(addr[kol])) { // поиск датчиков, определение адреса и кол-ва датчиков
kol++;
}
ds.reset_search(); // Сброс поиска датчика
ds.reset(); // Инициализация, выполняется сброс шины
ds.select(addr[x]); // Обращение к датчику по адресу
ds.write(0x44, 0); // Измерение температуры с переносом данных в память
ds.reset(); // Инициализация, выполняется сброс шины
ds.select(addr[x]); // Обращение к датчику по адресу
ds.write(0xBE); // Обращение памяти
data[0] = ds.read();// Чтение памяти byte low
data[1] = ds.read();// Чтение памяти byte high
float value = ((data[1] << 8) | data[0]) / 16.0; return (float)value; // Расчет температуры и вывод
}
Нужно будет провести эксперимент, Яркость индикаторов можно изменить.
При загорании индикатора в коде предусмотренно полное гашение всех сегментов и отключение анодов. Это сделано для устранения засветки сегментов. Я изменил скетч, теперь можно изменить время гашения, тем самым регулируя яркость свечения.Каждый индикатор загорается с частотой 400 Гц, то есть период свечения 2,5 мс
Я вывел в скетч параметр :
int brig = 1500;
Это время гашения в мкс, Вам нужно подобрать это значение для оптимальной яркости свечения в ночном режиме
// 19 === SCL // 20 === SDA //// Катоды 1 группа #define SEG_A1 28 // 33 #define SEG_B1 29 // 32 #define SEG_C1 30 // 31 #define SEG_D1 31 // 30 #define SEG_E1 23 // 26 #define SEG_F1 22 // 25 #define SEG_G1 21 // 24 //// Катоды 2 группа #define SEG_A2 11 // 13 #define SEG_B2 12 // 14 #define SEG_C2 13 // 15 #define SEG_D2 14 // 16 #define SEG_E2 15 // 17 #define SEG_F2 18 // 21 #define SEG_G2 19 // 22 //// Катоды 3 группа #define SEG_A3 1 // 44 #define SEG_B3 2 // 43 #define SEG_C3 3 // 42 #define SEG_D3 4 // 41 #define SEG_E3 5 // 1 #define SEG_F3 6 // 2 #define SEG_G3 7 // 3 //// Аноды #define AN_1 27 // 34 #define AN_2 26 // 35 #define AN_3 25 // 36 #define AN_4 24 // 37 #define AN_5 0 // 40 #define MENU 8 // 9 #define UP 9 // 10 #define EXIT 10 // 11 #include <Wire.h> #include <DS3231.h> // http://rcl-radio.ru/wp-content/uploads/2022/10/DS3231.zip #include <OneWire.h> // http://rcl-radio.ru/wp-content/uploads/2018/07/OneWire.zip DS3231 clock;RTCDateTime DateTime; OneWire ds(20); // Вход датчика 18b20 (PC4 23 пин контр) long oldPosition = -999, newPosition, times,times1; int an, segm1, segm2, segm3, i, set; byte d1, d0, h1, h0, m1, m0, s1, s0, t1, t0, ms1, ms0, g0, g1, dn; int hour,minut,secon,data,mon,year,den,temp; int hh, mm , ss , dd , mes, god; int brig = 1500; void setup() { Wire.begin(); clock.begin(); // clock.setDateTime(2023, 8, 26, 20, 40, 0); cli(); TCCR1A = 0; TCCR1B = 0; TCNT1 = 0; // (8000000/((300+1)x64))=415.28239202658 Hz OCR1A = 300; TCCR1B |= (1 << WGM12); // Prescaler 64 TCCR1B |= (1 << CS11) | (1 << CS10); TIMSK |= (1 << OCIE1A); sei(); pinMode(SEG_A1, OUTPUT); pinMode(SEG_B1, OUTPUT); pinMode(SEG_C1, OUTPUT); pinMode(SEG_D1, OUTPUT); pinMode(SEG_E1, OUTPUT); pinMode(SEG_F1, OUTPUT); pinMode(SEG_G1, OUTPUT); pinMode(AN_1, OUTPUT); pinMode(AN_2, OUTPUT); pinMode(AN_3, OUTPUT); pinMode(AN_4, OUTPUT); pinMode(AN_5, OUTPUT); pinMode(SEG_A2, OUTPUT); pinMode(SEG_B2, OUTPUT); pinMode(SEG_C2, OUTPUT); pinMode(SEG_D2, OUTPUT); pinMode(SEG_E2, OUTPUT); pinMode(SEG_F2, OUTPUT); pinMode(SEG_G2, OUTPUT); pinMode(SEG_A3, OUTPUT); pinMode(SEG_B3, OUTPUT); pinMode(SEG_C3, OUTPUT); pinMode(SEG_D3, OUTPUT); pinMode(SEG_E3, OUTPUT); pinMode(SEG_F3, OUTPUT); pinMode(SEG_G3, OUTPUT); pinMode (MENU,INPUT_PULLUP); pinMode (UP,INPUT_PULLUP); pinMode (EXIT,INPUT_PULLUP); } void loop() { DateTime = clock.getDateTime();hour = DateTime.hour;minut = DateTime.minute;secon = DateTime.second; data = DateTime.day;mon = DateTime.month;year = DateTime.year; den=DateTime.dayOfWeek; if(millis()-times1>10){temp=dsRead(0);times1=millis();} // temp=clock.readTemperature(); hh=hour;mm=minut;ss=secon;dd=data;mes=mon;god=year; if(digitalRead(MENU)==LOW){set++;if(set>6){set=0;}delay(200);} if(digitalRead(EXIT)==LOW){set=0;delay(200);} if(set==1 && digitalRead(UP)==LOW){hh++;if(hh>23){hh=0;}clock.setDateTime(year, mon, data, hh, minut, secon);delay(200);} if(set==2 && digitalRead(UP)==LOW){mm++;if(mm>59){mm=0;}clock.setDateTime(year, mon, data, hour, mm, secon);delay(200);} if(set==3 && digitalRead(UP)==LOW){ss=0; clock.setDateTime(year, mon, data, hour, minut, ss);delay(200);} if(set==4 && digitalRead(UP)==LOW){dd++;if(dd>31){dd=1;}clock.setDateTime(year, mon, dd, hour, minut, secon);delay(200);} if(set==5 && digitalRead(UP)==LOW){mes++;if(mes>12){mes=1;}clock.setDateTime(year, mes, data, hour, minut, secon);delay(200);} if(set==6 && digitalRead(UP)==LOW){god++;if(god>2099){god=2023;}clock.setDateTime(god, mon, data, hour, minut, secon);delay(200);} if(set==1&&millis()-times<200){h1=10;h0=10;} else{ if(hour/10%10==0){h1=10;}else{h1 = hour/10%10;}h0 = hour%10; } if(set==2&&millis()-times<200){m1=10;m0=10;} else{ m1 = minut/10%10; m0 = minut%10; } if(set==3&&millis()-times<200){s1=10;s0=10;} else{ s1 = secon/10%10;s0 = secon%10; } if(set==4&&millis()-times<200){d1=10;d0=10;} else{ if(data/10%10==0){d1=10;}else{d1 = data/10%10;}d0 = data%10; } if(set==5&&millis()-times<200){ms1=10;ms0=10;} else{ if(mon/10%10==0){ms1=10;}else{ms1 = mon/10%10;}ms0 = mon%10; } if(set==6&&millis()-times<200){g1=10;g0=10;} else{ g1 = (year-2000)/10%10; g0 = (year-2000)%10; } dn = den+10; // ds > 1пн 2вт 3ср 4чт 5пт 6сб 7вс // jh > 1вс 2пн 3вт 4ср 5чт 6ст 7сб t1 = temp/10%10; t0 = temp%10; if(millis()-times>400){times=millis();} delay(100); } ISR(TIMER1_COMPA_vect){ switch (i) { // Q1 case 0: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig); segm2 = m0; segm1 = d0; segm3 = g1; segment_1(); segment_2(); segment_3();an = 0; anod();break; // Q2 case 1: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig); segm2 = s1; segm1 = dn; segm3 = g0;segment_1(); segment_2(); segment_3();an = 1; anod();break; // Q3 case 2: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig); segm1 = h1; segm2 = s0; segm3 = ms1;segment_1(); segment_2(); segment_3();an = 2; anod();break; // Q4 case 3: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig); segm1 = h0; segm2 = t1; segm3 = ms0; segment_1(); segment_2(); segment_3();an = 3; anod();break; // Q5 case 4: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig); segm1 = m1; segm2 = t0; segm3 = d1; segment_1(); segment_2(); segment_3();an = 4; anod();break; } i++;if (i > 4) {i = 0;} } void segment_1() { switch (segm1) { // A B C D E F G case 0: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // 0 case 1: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 1 case 2: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 2 case 3: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 3 case 4: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 4 case 5: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 5 case 6: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 6 case 7: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 7 case 8: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 8 case 9: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 9 case 10: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // пусто case 17: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВС case 11: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ПН case 12: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВТ case 13: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // СР case 14: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ЧТ case 15: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // ПТ case 16: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // СБ } } void segment_2() { switch (segm2) { // A B C D E F G case 0: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 1); break; // 0 case 1: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 1 case 2: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 1); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 2 case 3: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 3 case 4: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 4 case 5: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 5 case 6: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 6 case 7: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 7 case 8: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 8 case 9: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 9 case 10: ch(SEG_A2, 1); ch(SEG_B2, 1); ch(SEG_C2, 1); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // пусто } } void segment_3() { switch (segm3) { // A B C D E F G case 0: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 1); break; // 0 case 1: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 1 case 2: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 1); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 2 case 3: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 3 case 4: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 4 case 5: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 5 case 6: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 6 case 7: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 7 case 8: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 8 case 9: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 9 case 10: ch(SEG_A3, 1); ch(SEG_B3, 1); ch(SEG_C3, 1); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // пусто } } void anod() { switch (an) { case 0: ch(AN_1, 0); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break; case 1: ch(AN_1, 1); ch(AN_2, 0); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break; case 2: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 0); ch(AN_4, 1); ch(AN_5, 1); break; case 3: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 0); ch(AN_5, 1); break; case 4: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 0); break; case 5: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break; } } void ch(int pin, int logic) { digitalWrite(pin, logic); } float dsRead(byte x) { byte data[2], addr[8][8], kol = 0; while (ds.search(addr[kol])) { // поиск датчиков, определение адреса и кол-ва датчиков kol++; } ds.reset_search(); // Сброс поиска датчика ds.reset(); // Инициализация, выполняется сброс шины ds.select(addr[x]); // Обращение к датчику по адресу ds.write(0x44, 0); // Измерение температуры с переносом данных в память ds.reset(); // Инициализация, выполняется сброс шины ds.select(addr[x]); // Обращение к датчику по адресу ds.write(0xBE); // Обращение памяти data[0] = ds.read();// Чтение памяти byte low data[1] = ds.read();// Чтение памяти byte high float value = ((data[1] << 8) | data[0]) / 16.0; return (float)value; // Расчет температуры и вывод }
После работы проверю. Это просто тест?
Я дописал изминение яркости по времени
// 19 === SCL
// 20 === SDA
//// Катоды 1 группа
#define SEG_A1 28 // 33
#define SEG_B1 29 // 32
#define SEG_C1 30 // 31
#define SEG_D1 31 // 30
#define SEG_E1 23 // 26
#define SEG_F1 22 // 25
#define SEG_G1 21 // 24
//// Катоды 2 группа
#define SEG_A2 11 // 13
#define SEG_B2 12 // 14
#define SEG_C2 13 // 15
#define SEG_D2 14 // 16
#define SEG_E2 15 // 17
#define SEG_F2 18 // 21
#define SEG_G2 19 // 22
//// Катоды 3 группа
#define SEG_A3 1 // 44
#define SEG_B3 2 // 43
#define SEG_C3 3 // 42
#define SEG_D3 4 // 41
#define SEG_E3 5 // 1
#define SEG_F3 6 // 2
#define SEG_G3 7 // 3
//// Аноды
#define AN_1 27 // 34
#define AN_2 26 // 35
#define AN_3 25 // 36
#define AN_4 24 // 37
#define AN_5 0 // 40
#define MENU 8 // 9
#define UP 9 // 10
#define EXIT 10 // 11
#include <Wire.h>
#include <DS3231.h> // http://rcl-radio.ru/wp-content/uploads/2022/10/DS3231.zip
#include <OneWire.h> // http://rcl-radio.ru/wp-content/uploads/2018/07/OneWire.zip
DS3231 clock;RTCDateTime DateTime;
OneWire ds(20); // Вход датчика 18b20 (PC4 23 пин контр)
long oldPosition = -999, newPosition, times,times1;
int an, segm1, segm2, segm3, i, set;
byte d1, d0, h1, h0, m1, m0, s1, s0, t1, t0, ms1, ms0, g0, g1, dn;
int hour,minut,secon,data,mon,year,den,temp;
int hh, mm , ss , dd , mes, god;
int brig_g;
int brig = 1500;
void setup() {
Wire.begin();
clock.begin();
// clock.setDateTime(2023, 8, 26, 20, 40, 0);
cli();
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 0;
// (8000000/((300+1)x64))=415.28239202658 Hz
OCR1A = 300;
TCCR1B |= (1 << WGM12);
// Prescaler 64
TCCR1B |= (1 << CS11) | (1 << CS10);
TIMSK |= (1 << OCIE1A);
sei();
pinMode(SEG_A1, OUTPUT);
pinMode(SEG_B1, OUTPUT);
pinMode(SEG_C1, OUTPUT);
pinMode(SEG_D1, OUTPUT);
pinMode(SEG_E1, OUTPUT);
pinMode(SEG_F1, OUTPUT);
pinMode(SEG_G1, OUTPUT);
pinMode(AN_1, OUTPUT);
pinMode(AN_2, OUTPUT);
pinMode(AN_3, OUTPUT);
pinMode(AN_4, OUTPUT);
pinMode(AN_5, OUTPUT);
pinMode(SEG_A2, OUTPUT);
pinMode(SEG_B2, OUTPUT);
pinMode(SEG_C2, OUTPUT);
pinMode(SEG_D2, OUTPUT);
pinMode(SEG_E2, OUTPUT);
pinMode(SEG_F2, OUTPUT);
pinMode(SEG_G2, OUTPUT);
pinMode(SEG_A3, OUTPUT);
pinMode(SEG_B3, OUTPUT);
pinMode(SEG_C3, OUTPUT);
pinMode(SEG_D3, OUTPUT);
pinMode(SEG_E3, OUTPUT);
pinMode(SEG_F3, OUTPUT);
pinMode(SEG_G3, OUTPUT);
pinMode (MENU,INPUT_PULLUP);
pinMode (UP,INPUT_PULLUP);
pinMode (EXIT,INPUT_PULLUP);
}
void loop() {
DateTime = clock.getDateTime();hour = DateTime.hour;minut = DateTime.minute;secon = DateTime.second;
data = DateTime.day;mon = DateTime.month;year = DateTime.year;
den=DateTime.dayOfWeek;
if(millis()-times1>10){temp=dsRead(0);times1=millis();}
// temp=clock.readTemperature();
hh=hour;mm=minut;ss=secon;dd=data;mes=mon;god=year;
if(hour<7&&hour>=22){brig_g=brig;}else{brig_g=200;}
if(digitalRead(MENU)==LOW){set++;if(set>6){set=0;}delay(200);}
if(digitalRead(EXIT)==LOW){set=0;delay(200);}
if(set==1 && digitalRead(UP)==LOW){hh++;if(hh>23){hh=0;}clock.setDateTime(year, mon, data, hh, minut, secon);delay(200);}
if(set==2 && digitalRead(UP)==LOW){mm++;if(mm>59){mm=0;}clock.setDateTime(year, mon, data, hour, mm, secon);delay(200);}
if(set==3 && digitalRead(UP)==LOW){ss=0; clock.setDateTime(year, mon, data, hour, minut, ss);delay(200);}
if(set==4 && digitalRead(UP)==LOW){dd++;if(dd>31){dd=1;}clock.setDateTime(year, mon, dd, hour, minut, secon);delay(200);}
if(set==5 && digitalRead(UP)==LOW){mes++;if(mes>12){mes=1;}clock.setDateTime(year, mes, data, hour, minut, secon);delay(200);}
if(set==6 && digitalRead(UP)==LOW){god++;if(god>2099){god=2023;}clock.setDateTime(god, mon, data, hour, minut, secon);delay(200);}
if(set==1&&millis()-times<200){h1=10;h0=10;}
else{ if(hour/10%10==0){h1=10;}else{h1 = hour/10%10;}h0 = hour%10; }
if(set==2&&millis()-times<200){m1=10;m0=10;}
else{ m1 = minut/10%10; m0 = minut%10; }
if(set==3&&millis()-times<200){s1=10;s0=10;}
else{ s1 = secon/10%10;s0 = secon%10; }
if(set==4&&millis()-times<200){d1=10;d0=10;}
else{ if(data/10%10==0){d1=10;}else{d1 = data/10%10;}d0 = data%10; }
if(set==5&&millis()-times<200){ms1=10;ms0=10;}
else{ if(mon/10%10==0){ms1=10;}else{ms1 = mon/10%10;}ms0 = mon%10; }
if(set==6&&millis()-times<200){g1=10;g0=10;}
else{ g1 = (year-2000)/10%10; g0 = (year-2000)%10; }
dn = den+10;
// ds > 1пн 2вт 3ср 4чт 5пт 6сб 7вс
// jh > 1вс 2пн 3вт 4ср 5чт 6ст 7сб
t1 = temp/10%10;
t0 = temp%10;
if(millis()-times>400){times=millis();}
delay(100);
}
ISR(TIMER1_COMPA_vect){
switch (i) {
// Q1
case 0: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig_g);
segm2 = m0; segm1 = d0; segm3 = g1; segment_1(); segment_2(); segment_3();an = 0; anod();break;
// Q2
case 1: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig_g);
segm2 = s1; segm1 = dn; segm3 = g0;segment_1(); segment_2(); segment_3();an = 1; anod();break;
// Q3
case 2: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig_g);
segm1 = h1; segm2 = s0; segm3 = ms1;segment_1(); segment_2(); segment_3();an = 2; anod();break;
// Q4
case 3: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig_g);
segm1 = h0; segm2 = t1; segm3 = ms0; segment_1(); segment_2(); segment_3();an = 3; anod();break;
// Q5
case 4: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig_g);
segm1 = m1; segm2 = t0; segm3 = d1; segment_1(); segment_2(); segment_3();an = 4; anod();break;
}
i++;if (i > 4) {i = 0;}
}
void segment_1() {
switch (segm1) {
// A B C D E F G
case 0: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // 0
case 1: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 1
case 2: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 2
case 3: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 3
case 4: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 4
case 5: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 5
case 6: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 6
case 7: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 7
case 8: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 8
case 9: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 9
case 10: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // пусто
case 17: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВС
case 11: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ПН
case 12: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВТ
case 13: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // СР
case 14: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ЧТ
case 15: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // ПТ
case 16: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // СБ
}
}
void segment_2() {
switch (segm2) {
// A B C D E F G
case 0: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 1); break; // 0
case 1: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 1
case 2: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 1); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 2
case 3: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 3
case 4: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 4
case 5: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 5
case 6: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 6
case 7: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 7
case 8: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 8
case 9: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 9
case 10: ch(SEG_A2, 1); ch(SEG_B2, 1); ch(SEG_C2, 1); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // пусто
}
}
void segment_3() {
switch (segm3) {
// A B C D E F G
case 0: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 1); break; // 0
case 1: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 1
case 2: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 1); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 2
case 3: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 3
case 4: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 4
case 5: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 5
case 6: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 6
case 7: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 7
case 8: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 8
case 9: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 9
case 10: ch(SEG_A3, 1); ch(SEG_B3, 1); ch(SEG_C3, 1); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // пусто
}
}
void anod() {
switch (an) {
case 0: ch(AN_1, 0); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
case 1: ch(AN_1, 1); ch(AN_2, 0); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
case 2: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 0); ch(AN_4, 1); ch(AN_5, 1); break;
case 3: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 0); ch(AN_5, 1); break;
case 4: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 0); break;
case 5: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
}
}
void ch(int pin, int logic) {
digitalWrite(pin, logic);
}
float dsRead(byte x) {
byte data[2], addr[8][8], kol = 0;
while (ds.search(addr[kol])) { // поиск датчиков, определение адреса и кол-ва датчиков
kol++;
}
ds.reset_search(); // Сброс поиска датчика
ds.reset(); // Инициализация, выполняется сброс шины
ds.select(addr[x]); // Обращение к датчику по адресу
ds.write(0x44, 0); // Измерение температуры с переносом данных в память
ds.reset(); // Инициализация, выполняется сброс шины
ds.select(addr[x]); // Обращение к датчику по адресу
ds.write(0xBE); // Обращение памяти
data[0] = ds.read();// Чтение памяти byte low
data[1] = ds.read();// Чтение памяти byte high
float value = ((data[1] << 8) | data[0]) / 16.0; return (float)value; // Расчет температуры и вывод
}
Чё то я не догоняю чё делать в скетче,меняю значение с 1500 меньше яркость не меняется. Время выставляю 6:59 должно быть пониженное свечение,затем оттикало 7:00 и должна яркость Макс появится,так ли я думаю?
Загрузите пока этот скетч - http://forum.rcl-radio.ru/viewtopic.php?pid=8398#p8398
Значение int brig = 1500; надо менять до 2300 2400 примерно
Загрузите пока этот скетч - http://forum.rcl-radio.ru/viewtopic.php?pid=8398#p8398
Значение int brig = 1500; надо менять до 2300 2400 примерно
1500 и надо,больше начинает мерцание
Если мерцание то измените параметр
OCR1A = 300;
на
OCR1A = 150;
Затемнение по времени должно работать
// 19 === SCL
// 20 === SDA
//// Катоды 1 группа
#define SEG_A1 28 // 33
#define SEG_B1 29 // 32
#define SEG_C1 30 // 31
#define SEG_D1 31 // 30
#define SEG_E1 23 // 26
#define SEG_F1 22 // 25
#define SEG_G1 21 // 24
//// Катоды 2 группа
#define SEG_A2 11 // 13
#define SEG_B2 12 // 14
#define SEG_C2 13 // 15
#define SEG_D2 14 // 16
#define SEG_E2 15 // 17
#define SEG_F2 18 // 21
#define SEG_G2 19 // 22
//// Катоды 3 группа
#define SEG_A3 1 // 44
#define SEG_B3 2 // 43
#define SEG_C3 3 // 42
#define SEG_D3 4 // 41
#define SEG_E3 5 // 1
#define SEG_F3 6 // 2
#define SEG_G3 7 // 3
//// Аноды
#define AN_1 27 // 34
#define AN_2 26 // 35
#define AN_3 25 // 36
#define AN_4 24 // 37
#define AN_5 0 // 40
#define MENU 8 // 9
#define UP 9 // 10
#define EXIT 10 // 11
#include <Wire.h>
#include <DS3231.h> // http://rcl-radio.ru/wp-content/uploads/2022/10/DS3231.zip
#include <OneWire.h> // http://rcl-radio.ru/wp-content/uploads/2018/07/OneWire.zip
DS3231 clock;RTCDateTime DateTime;
OneWire ds(20); // Вход датчика 18b20 (PC4 23 пин контр)
long oldPosition = -999, newPosition, times,times1;
int an, segm1, segm2, segm3, i, set;
byte d1, d0, h1, h0, m1, m0, s1, s0, t1, t0, ms1, ms0, g0, g1, dn;
int hour,minut,secon,data,mon,year,den,temp;
int hh, mm , ss , dd , mes, god;
int brig_g;
int brig = 1500;
void setup() {
Wire.begin();
clock.begin();
// clock.setDateTime(2023, 8, 26, 20, 40, 0);
cli();
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 0;
// (8000000/((300+1)x64))=415.28239202658 Hz
OCR1A = 300;
TCCR1B |= (1 << WGM12);
// Prescaler 64
TCCR1B |= (1 << CS11) | (1 << CS10);
TIMSK |= (1 << OCIE1A);
sei();
pinMode(SEG_A1, OUTPUT);
pinMode(SEG_B1, OUTPUT);
pinMode(SEG_C1, OUTPUT);
pinMode(SEG_D1, OUTPUT);
pinMode(SEG_E1, OUTPUT);
pinMode(SEG_F1, OUTPUT);
pinMode(SEG_G1, OUTPUT);
pinMode(AN_1, OUTPUT);
pinMode(AN_2, OUTPUT);
pinMode(AN_3, OUTPUT);
pinMode(AN_4, OUTPUT);
pinMode(AN_5, OUTPUT);
pinMode(SEG_A2, OUTPUT);
pinMode(SEG_B2, OUTPUT);
pinMode(SEG_C2, OUTPUT);
pinMode(SEG_D2, OUTPUT);
pinMode(SEG_E2, OUTPUT);
pinMode(SEG_F2, OUTPUT);
pinMode(SEG_G2, OUTPUT);
pinMode(SEG_A3, OUTPUT);
pinMode(SEG_B3, OUTPUT);
pinMode(SEG_C3, OUTPUT);
pinMode(SEG_D3, OUTPUT);
pinMode(SEG_E3, OUTPUT);
pinMode(SEG_F3, OUTPUT);
pinMode(SEG_G3, OUTPUT);
pinMode (MENU,INPUT_PULLUP);
pinMode (UP,INPUT_PULLUP);
pinMode (EXIT,INPUT_PULLUP);
}
void loop() {
DateTime = clock.getDateTime();hour = DateTime.hour;minut = DateTime.minute;secon = DateTime.second;
data = DateTime.day;mon = DateTime.month;year = DateTime.year;
den=DateTime.dayOfWeek;
if(millis()-times1>10){temp=dsRead(0);times1=millis();}
// temp=clock.readTemperature();
hh=hour;mm=minut;ss=secon;dd=data;mes=mon;god=year;
if(hour<7||hour>=22){brig_g=brig;}else{brig_g=200;}
if(digitalRead(MENU)==LOW){set++;if(set>6){set=0;}delay(200);}
if(digitalRead(EXIT)==LOW){set=0;delay(200);}
if(set==1 && digitalRead(UP)==LOW){hh++;if(hh>23){hh=0;}clock.setDateTime(year, mon, data, hh, minut, secon);delay(200);}
if(set==2 && digitalRead(UP)==LOW){mm++;if(mm>59){mm=0;}clock.setDateTime(year, mon, data, hour, mm, secon);delay(200);}
if(set==3 && digitalRead(UP)==LOW){ss=0; clock.setDateTime(year, mon, data, hour, minut, ss);delay(200);}
if(set==4 && digitalRead(UP)==LOW){dd++;if(dd>31){dd=1;}clock.setDateTime(year, mon, dd, hour, minut, secon);delay(200);}
if(set==5 && digitalRead(UP)==LOW){mes++;if(mes>12){mes=1;}clock.setDateTime(year, mes, data, hour, minut, secon);delay(200);}
if(set==6 && digitalRead(UP)==LOW){god++;if(god>2099){god=2023;}clock.setDateTime(god, mon, data, hour, minut, secon);delay(200);}
if(set==1&&millis()-times<200){h1=10;h0=10;}
else{ if(hour/10%10==0){h1=10;}else{h1 = hour/10%10;}h0 = hour%10; }
if(set==2&&millis()-times<200){m1=10;m0=10;}
else{ m1 = minut/10%10; m0 = minut%10; }
if(set==3&&millis()-times<200){s1=10;s0=10;}
else{ s1 = secon/10%10;s0 = secon%10; }
if(set==4&&millis()-times<200){d1=10;d0=10;}
else{ if(data/10%10==0){d1=10;}else{d1 = data/10%10;}d0 = data%10; }
if(set==5&&millis()-times<200){ms1=10;ms0=10;}
else{ if(mon/10%10==0){ms1=10;}else{ms1 = mon/10%10;}ms0 = mon%10; }
if(set==6&&millis()-times<200){g1=10;g0=10;}
else{ g1 = (year-2000)/10%10; g0 = (year-2000)%10; }
dn = den+10;
// ds > 1пн 2вт 3ср 4чт 5пт 6сб 7вс
// jh > 1вс 2пн 3вт 4ср 5чт 6ст 7сб
t1 = temp/10%10;
t0 = temp%10;
if(millis()-times>400){times=millis();}
delay(100);
}
ISR(TIMER1_COMPA_vect){
switch (i) {
// Q1
case 0: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig_g);
segm2 = m0; segm1 = d0; segm3 = g1; segment_1(); segment_2(); segment_3();an = 0; anod();break;
// Q2
case 1: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig_g);
segm2 = s1; segm1 = dn; segm3 = g0;segment_1(); segment_2(); segment_3();an = 1; anod();break;
// Q3
case 2: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig_g);
segm1 = h1; segm2 = s0; segm3 = ms1;segment_1(); segment_2(); segment_3();an = 2; anod();break;
// Q4
case 3: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig_g);
segm1 = h0; segm2 = t1; segm3 = ms0; segment_1(); segment_2(); segment_3();an = 3; anod();break;
// Q5
case 4: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig_g);
segm1 = m1; segm2 = t0; segm3 = d1; segment_1(); segment_2(); segment_3();an = 4; anod();break;
}
i++;if (i > 4) {i = 0;}
}
void segment_1() {
switch (segm1) {
// A B C D E F G
case 0: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // 0
case 1: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 1
case 2: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 2
case 3: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 3
case 4: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 4
case 5: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 5
case 6: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 6
case 7: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 7
case 8: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 8
case 9: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 9
case 10: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // пусто
case 17: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВС
case 11: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ПН
case 12: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВТ
case 13: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // СР
case 14: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ЧТ
case 15: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // ПТ
case 16: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // СБ
}
}
void segment_2() {
switch (segm2) {
// A B C D E F G
case 0: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 1); break; // 0
case 1: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 1
case 2: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 1); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 2
case 3: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 3
case 4: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 4
case 5: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 5
case 6: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 6
case 7: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 7
case 8: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 8
case 9: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 9
case 10: ch(SEG_A2, 1); ch(SEG_B2, 1); ch(SEG_C2, 1); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // пусто
}
}
void segment_3() {
switch (segm3) {
// A B C D E F G
case 0: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 1); break; // 0
case 1: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 1
case 2: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 1); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 2
case 3: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 3
case 4: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 4
case 5: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 5
case 6: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 6
case 7: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 7
case 8: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 8
case 9: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 9
case 10: ch(SEG_A3, 1); ch(SEG_B3, 1); ch(SEG_C3, 1); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // пусто
}
}
void anod() {
switch (an) {
case 0: ch(AN_1, 0); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
case 1: ch(AN_1, 1); ch(AN_2, 0); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
case 2: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 0); ch(AN_4, 1); ch(AN_5, 1); break;
case 3: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 0); ch(AN_5, 1); break;
case 4: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 0); break;
case 5: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
}
}
void ch(int pin, int logic) {
digitalWrite(pin, logic);
}
float dsRead(byte x) {
byte data[2], addr[8][8], kol = 0;
while (ds.search(addr[kol])) { // поиск датчиков, определение адреса и кол-ва датчиков
kol++;
}
ds.reset_search(); // Сброс поиска датчика
ds.reset(); // Инициализация, выполняется сброс шины
ds.select(addr[x]); // Обращение к датчику по адресу
ds.write(0x44, 0); // Измерение температуры с переносом данных в память
ds.reset(); // Инициализация, выполняется сброс шины
ds.select(addr[x]); // Обращение к датчику по адресу
ds.write(0xBE); // Обращение памяти
data[0] = ds.read();// Чтение памяти byte low
data[1] = ds.read();// Чтение памяти byte high
float value = ((data[1] << 8) | data[0]) / 16.0; return (float)value; // Расчет температуры и вывод
}
У меня температура с ds3231
Нет, с Ds18B20
Часы про которые писал с буквенной дня недели в силе?
Да, в силе.
Я про эти часы имел виду
Как скажите. Программно добавить датчик достаточно просто.
Потом к себе добавите в копилку проект.Может кому то понравится.
Проект интересный, я обязательно статью напишу.
Температура с DS3231
// 19 === SCL
// 20 === SDA
//// Катоды 1 группа
#define SEG_A1 28 // 33
#define SEG_B1 29 // 32
#define SEG_C1 30 // 31
#define SEG_D1 31 // 30
#define SEG_E1 23 // 26
#define SEG_F1 22 // 25
#define SEG_G1 21 // 24
//// Катоды 2 группа
#define SEG_A2 11 // 13
#define SEG_B2 12 // 14
#define SEG_C2 13 // 15
#define SEG_D2 14 // 16
#define SEG_E2 15 // 17
#define SEG_F2 18 // 21
#define SEG_G2 19 // 22
//// Катоды 3 группа
#define SEG_A3 1 // 44
#define SEG_B3 2 // 43
#define SEG_C3 3 // 42
#define SEG_D3 4 // 41
#define SEG_E3 5 // 1
#define SEG_F3 6 // 2
#define SEG_G3 7 // 3
//// Аноды
#define AN_1 27 // 34
#define AN_2 26 // 35
#define AN_3 25 // 36
#define AN_4 24 // 37
#define AN_5 0 // 40
#define MENU 8 // 9
#define UP 9 // 10
#define EXIT 10 // 11
#include <Wire.h>
#include <DS3231.h> // http://rcl-radio.ru/wp-content/uploads/2022/10/DS3231.zip
#include <OneWire.h> // http://rcl-radio.ru/wp-content/uploads/2018/07/OneWire.zip
DS3231 clock;RTCDateTime DateTime;
OneWire ds(20); // Вход датчика 18b20 (PC4 23 пин контр)
long oldPosition = -999, newPosition, times,times1;
int an, segm1, segm2, segm3, i, set;
byte d1, d0, h1, h0, m1, m0, s1, s0, t1, t0, ms1, ms0, g0, g1, dn;
int hour,minut,secon,data,mon,year,den,temp;
int hh, mm , ss , dd , mes, god;
int brig_g;
int brig = 1500;
void setup() {
Wire.begin();
clock.begin();
// clock.setDateTime(2023, 8, 26, 20, 40, 0);
cli();
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 0;
// (8000000/((300+1)x64))=415.28239202658 Hz
OCR1A = 300;
TCCR1B |= (1 << WGM12);
// Prescaler 64
TCCR1B |= (1 << CS11) | (1 << CS10);
TIMSK |= (1 << OCIE1A);
sei();
pinMode(SEG_A1, OUTPUT);
pinMode(SEG_B1, OUTPUT);
pinMode(SEG_C1, OUTPUT);
pinMode(SEG_D1, OUTPUT);
pinMode(SEG_E1, OUTPUT);
pinMode(SEG_F1, OUTPUT);
pinMode(SEG_G1, OUTPUT);
pinMode(AN_1, OUTPUT);
pinMode(AN_2, OUTPUT);
pinMode(AN_3, OUTPUT);
pinMode(AN_4, OUTPUT);
pinMode(AN_5, OUTPUT);
pinMode(SEG_A2, OUTPUT);
pinMode(SEG_B2, OUTPUT);
pinMode(SEG_C2, OUTPUT);
pinMode(SEG_D2, OUTPUT);
pinMode(SEG_E2, OUTPUT);
pinMode(SEG_F2, OUTPUT);
pinMode(SEG_G2, OUTPUT);
pinMode(SEG_A3, OUTPUT);
pinMode(SEG_B3, OUTPUT);
pinMode(SEG_C3, OUTPUT);
pinMode(SEG_D3, OUTPUT);
pinMode(SEG_E3, OUTPUT);
pinMode(SEG_F3, OUTPUT);
pinMode(SEG_G3, OUTPUT);
pinMode (MENU,INPUT_PULLUP);
pinMode (UP,INPUT_PULLUP);
pinMode (EXIT,INPUT_PULLUP);
}
void loop() {
DateTime = clock.getDateTime();hour = DateTime.hour;minut = DateTime.minute;secon = DateTime.second;
data = DateTime.day;mon = DateTime.month;year = DateTime.year;
den=DateTime.dayOfWeek;
// if(millis()-times1>10){temp=dsRead(0);times1=millis();}
temp=clock.readTemperature();
hh=hour;mm=minut;ss=secon;dd=data;mes=mon;god=year;
if(hour<7||hour>=22){brig_g=brig;}else{brig_g=200;}
if(digitalRead(MENU)==LOW){set++;if(set>6){set=0;}delay(200);}
if(digitalRead(EXIT)==LOW){set=0;delay(200);}
if(set==1 && digitalRead(UP)==LOW){hh++;if(hh>23){hh=0;}clock.setDateTime(year, mon, data, hh, minut, secon);delay(200);}
if(set==2 && digitalRead(UP)==LOW){mm++;if(mm>59){mm=0;}clock.setDateTime(year, mon, data, hour, mm, secon);delay(200);}
if(set==3 && digitalRead(UP)==LOW){ss=0; clock.setDateTime(year, mon, data, hour, minut, ss);delay(200);}
if(set==4 && digitalRead(UP)==LOW){dd++;if(dd>31){dd=1;}clock.setDateTime(year, mon, dd, hour, minut, secon);delay(200);}
if(set==5 && digitalRead(UP)==LOW){mes++;if(mes>12){mes=1;}clock.setDateTime(year, mes, data, hour, minut, secon);delay(200);}
if(set==6 && digitalRead(UP)==LOW){god++;if(god>2099){god=2023;}clock.setDateTime(god, mon, data, hour, minut, secon);delay(200);}
if(set==1&&millis()-times<200){h1=10;h0=10;}
else{ if(hour/10%10==0){h1=10;}else{h1 = hour/10%10;}h0 = hour%10; }
if(set==2&&millis()-times<200){m1=10;m0=10;}
else{ m1 = minut/10%10; m0 = minut%10; }
if(set==3&&millis()-times<200){s1=10;s0=10;}
else{ s1 = secon/10%10;s0 = secon%10; }
if(set==4&&millis()-times<200){d1=10;d0=10;}
else{ if(data/10%10==0){d1=10;}else{d1 = data/10%10;}d0 = data%10; }
if(set==5&&millis()-times<200){ms1=10;ms0=10;}
else{ if(mon/10%10==0){ms1=10;}else{ms1 = mon/10%10;}ms0 = mon%10; }
if(set==6&&millis()-times<200){g1=10;g0=10;}
else{ g1 = (year-2000)/10%10; g0 = (year-2000)%10; }
dn = den+10;
// ds > 1пн 2вт 3ср 4чт 5пт 6сб 7вс
// jh > 1вс 2пн 3вт 4ср 5чт 6ст 7сб
t1 = temp/10%10;
t0 = temp%10;
if(millis()-times>400){times=millis();}
delay(100);
}
ISR(TIMER1_COMPA_vect){
switch (i) {
// Q1
case 0: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig_g);
segm2 = m0; segm1 = d0; segm3 = g1; segment_1(); segment_2(); segment_3();an = 0; anod();break;
// Q2
case 1: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig_g);
segm2 = s1; segm1 = dn; segm3 = g0;segment_1(); segment_2(); segment_3();an = 1; anod();break;
// Q3
case 2: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig_g);
segm1 = h1; segm2 = s0; segm3 = ms1;segment_1(); segment_2(); segment_3();an = 2; anod();break;
// Q4
case 3: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig_g);
segm1 = h0; segm2 = t1; segm3 = ms0; segment_1(); segment_2(); segment_3();an = 3; anod();break;
// Q5
case 4: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig_g);
segm1 = m1; segm2 = t0; segm3 = d1; segment_1(); segment_2(); segment_3();an = 4; anod();break;
}
i++;if (i > 4) {i = 0;}
}
void segment_1() {
switch (segm1) {
// A B C D E F G
case 0: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // 0
case 1: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 1
case 2: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 2
case 3: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 3
case 4: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 4
case 5: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 5
case 6: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 6
case 7: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 7
case 8: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 8
case 9: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 9
case 10: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // пусто
case 17: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВС
case 11: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ПН
case 12: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВТ
case 13: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // СР
case 14: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ЧТ
case 15: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // ПТ
case 16: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // СБ
}
}
void segment_2() {
switch (segm2) {
// A B C D E F G
case 0: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 1); break; // 0
case 1: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 1
case 2: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 1); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 2
case 3: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 3
case 4: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 4
case 5: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 5
case 6: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 6
case 7: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 7
case 8: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 8
case 9: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 9
case 10: ch(SEG_A2, 1); ch(SEG_B2, 1); ch(SEG_C2, 1); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // пусто
}
}
void segment_3() {
switch (segm3) {
// A B C D E F G
case 0: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 1); break; // 0
case 1: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 1
case 2: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 1); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 2
case 3: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 3
case 4: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 4
case 5: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 5
case 6: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 6
case 7: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 7
case 8: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 8
case 9: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 9
case 10: ch(SEG_A3, 1); ch(SEG_B3, 1); ch(SEG_C3, 1); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // пусто
}
}
void anod() {
switch (an) {
case 0: ch(AN_1, 0); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
case 1: ch(AN_1, 1); ch(AN_2, 0); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
case 2: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 0); ch(AN_4, 1); ch(AN_5, 1); break;
case 3: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 0); ch(AN_5, 1); break;
case 4: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 0); break;
case 5: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
}
}
void ch(int pin, int logic) {
digitalWrite(pin, logic);
}
float dsRead(byte x) {
byte data[2], addr[8][8], kol = 0;
while (ds.search(addr[kol])) { // поиск датчиков, определение адреса и кол-ва датчиков
kol++;
}
ds.reset_search(); // Сброс поиска датчика
ds.reset(); // Инициализация, выполняется сброс шины
ds.select(addr[x]); // Обращение к датчику по адресу
ds.write(0x44, 0); // Измерение температуры с переносом данных в память
ds.reset(); // Инициализация, выполняется сброс шины
ds.select(addr[x]); // Обращение к датчику по адресу
ds.write(0xBE); // Обращение памяти
data[0] = ds.read();// Чтение памяти byte low
data[1] = ds.read();// Чтение памяти byte high
float value = ((data[1] << 8) | data[0]) / 16.0; return (float)value; // Расчет температуры и вывод
}
Здравствуйте. Ещё просьба в версии DS3231 с DS18B20 можно добавить знак минус к температуре отдельно светодиод?
Макет готов,осталось подключение к пинам контроллера mega16
Здравствуйте. Ещё просьба в версии DS3231 с DS18B20 можно добавить знак минус к температуре отдельно светодиод?
Светодиод будет встроен в часы? Под него нужен свободный пин.
Здравствуйте. Ещё просьба в версии DS3231 с DS18B20 можно добавить знак минус к температуре отдельно светодиод?
Светодиод будет встроен в часы? Под него нужен свободный пин.
Отдельный светодиод под знак минус
23 вывод Atmega16 свободен?
23 вывод Atmega16 свободен?
Там же датчик DS18B20
// 19 === SCL
// 20 === SDA
//// Катоды 1 группа
#define SEG_A1 28 // 33
#define SEG_B1 29 // 32
#define SEG_C1 30 // 31
#define SEG_D1 31 // 30
#define SEG_E1 23 // 26
#define SEG_F1 22 // 25
#define SEG_G1 21 // 24
//// Катоды 2 группа
#define SEG_A2 11 // 13
#define SEG_B2 12 // 14
#define SEG_C2 13 // 15
#define SEG_D2 14 // 16
#define SEG_E2 15 // 17
#define SEG_F2 18 // 21
#define SEG_G2 19 // 22
//// Катоды 3 группа
#define SEG_A3 1 // 44
#define SEG_B3 2 // 43
#define SEG_C3 3 // 42
#define SEG_D3 4 // 41
#define SEG_E3 5 // 1
#define SEG_F3 6 // 2
#define SEG_G3 7 // 3
//// Аноды
#define AN_1 27 // 34
#define AN_2 26 // 35
#define AN_3 25 // 36
#define AN_4 24 // 37
#define AN_5 0 // 40
#define MENU 8 // 9
#define UP 9 // 10
#define EXIT 10 // 11
#define LED_MIN 20 // 23
#include <Wire.h>
#include <DS3231.h> // http://rcl-radio.ru/wp-content/uploads/2022/10/DS3231.zip
#include <OneWire.h> // http://rcl-radio.ru/wp-content/uploads/2018/07/OneWire.zip
DS3231 clock;RTCDateTime DateTime;
OneWire ds(20); // Вход датчика 18b20 (PC4 23 пин контр)
long oldPosition = -999, newPosition, times,times1;
int an, segm1, segm2, segm3, i, set;
byte d1, d0, h1, h0, m1, m0, s1, s0, t1, t0, ms1, ms0, g0, g1, dn;
int hour,minut,secon,data,mon,year,den,temp;
int hh, mm , ss , dd , mes, god;
int brig_g;
int brig = 1500;
void setup() {
Wire.begin();
clock.begin();
// clock.setDateTime(2023, 8, 26, 20, 40, 0);
cli();
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 0;
// (8000000/((300+1)x64))=415.28239202658 Hz
OCR1A = 300;
TCCR1B |= (1 << WGM12);
// Prescaler 64
TCCR1B |= (1 << CS11) | (1 << CS10);
TIMSK |= (1 << OCIE1A);
sei();
pinMode(SEG_A1, OUTPUT);
pinMode(SEG_B1, OUTPUT);
pinMode(SEG_C1, OUTPUT);
pinMode(SEG_D1, OUTPUT);
pinMode(SEG_E1, OUTPUT);
pinMode(SEG_F1, OUTPUT);
pinMode(SEG_G1, OUTPUT);
pinMode(AN_1, OUTPUT);
pinMode(AN_2, OUTPUT);
pinMode(AN_3, OUTPUT);
pinMode(AN_4, OUTPUT);
pinMode(AN_5, OUTPUT);
pinMode(SEG_A2, OUTPUT);
pinMode(SEG_B2, OUTPUT);
pinMode(SEG_C2, OUTPUT);
pinMode(SEG_D2, OUTPUT);
pinMode(SEG_E2, OUTPUT);
pinMode(SEG_F2, OUTPUT);
pinMode(SEG_G2, OUTPUT);
pinMode(SEG_A3, OUTPUT);
pinMode(SEG_B3, OUTPUT);
pinMode(SEG_C3, OUTPUT);
pinMode(SEG_D3, OUTPUT);
pinMode(SEG_E3, OUTPUT);
pinMode(SEG_F3, OUTPUT);
pinMode(SEG_G3, OUTPUT);
pinMode (MENU,INPUT_PULLUP);
pinMode (UP,INPUT_PULLUP);
pinMode (EXIT,INPUT_PULLUP);
pinMode(LED_MIN, OUTPUT);
}
void loop() {
DateTime = clock.getDateTime();hour = DateTime.hour;minut = DateTime.minute;secon = DateTime.second;
data = DateTime.day;mon = DateTime.month;year = DateTime.year;
den=DateTime.dayOfWeek;
if(millis()-times1>10){temp=dsRead(0);times1=millis();}
if(temp<0){temp = abs(temp);digitalWrite(LED_MIN,HIGH);}else{digitalWrite(LED_MIN,LOW);}
// temp=clock.readTemperature();
hh=hour;mm=minut;ss=secon;dd=data;mes=mon;god=year;
if(hour<7||hour>=22){brig_g=brig;}else{brig_g=200;}
if(digitalRead(MENU)==LOW){set++;if(set>6){set=0;}delay(200);}
if(digitalRead(EXIT)==LOW){set=0;delay(200);}
if(set==1 && digitalRead(UP)==LOW){hh++;if(hh>23){hh=0;}clock.setDateTime(year, mon, data, hh, minut, secon);delay(200);}
if(set==2 && digitalRead(UP)==LOW){mm++;if(mm>59){mm=0;}clock.setDateTime(year, mon, data, hour, mm, secon);delay(200);}
if(set==3 && digitalRead(UP)==LOW){ss=0; clock.setDateTime(year, mon, data, hour, minut, ss);delay(200);}
if(set==4 && digitalRead(UP)==LOW){dd++;if(dd>31){dd=1;}clock.setDateTime(year, mon, dd, hour, minut, secon);delay(200);}
if(set==5 && digitalRead(UP)==LOW){mes++;if(mes>12){mes=1;}clock.setDateTime(year, mes, data, hour, minut, secon);delay(200);}
if(set==6 && digitalRead(UP)==LOW){god++;if(god>2099){god=2023;}clock.setDateTime(god, mon, data, hour, minut, secon);delay(200);}
if(set==1&&millis()-times<200){h1=10;h0=10;}
else{ if(hour/10%10==0){h1=10;}else{h1 = hour/10%10;}h0 = hour%10; }
if(set==2&&millis()-times<200){m1=10;m0=10;}
else{ m1 = minut/10%10; m0 = minut%10; }
if(set==3&&millis()-times<200){s1=10;s0=10;}
else{ s1 = secon/10%10;s0 = secon%10; }
if(set==4&&millis()-times<200){d1=10;d0=10;}
else{ if(data/10%10==0){d1=10;}else{d1 = data/10%10;}d0 = data%10; }
if(set==5&&millis()-times<200){ms1=10;ms0=10;}
else{ if(mon/10%10==0){ms1=10;}else{ms1 = mon/10%10;}ms0 = mon%10; }
if(set==6&&millis()-times<200){g1=10;g0=10;}
else{ g1 = (year-2000)/10%10; g0 = (year-2000)%10; }
dn = den+10;
// ds > 1пн 2вт 3ср 4чт 5пт 6сб 7вс
// jh > 1вс 2пн 3вт 4ср 5чт 6ст 7сб
t1 = temp/10%10;
t0 = temp%10;
if(millis()-times>400){times=millis();}
delay(100);
}
ISR(TIMER1_COMPA_vect){
switch (i) {
// Q1
case 0: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig_g);
segm2 = m0; segm1 = d0; segm3 = g1; segment_1(); segment_2(); segment_3();an = 0; anod();break;
// Q2
case 1: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig_g);
segm2 = s1; segm1 = dn; segm3 = g0;segment_1(); segment_2(); segment_3();an = 1; anod();break;
// Q3
case 2: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig_g);
segm1 = h1; segm2 = s0; segm3 = ms1;segment_1(); segment_2(); segment_3();an = 2; anod();break;
// Q4
case 3: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig_g);
segm1 = h0; segm2 = t1; segm3 = ms0; segment_1(); segment_2(); segment_3();an = 3; anod();break;
// Q5
case 4: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig_g);
segm1 = m1; segm2 = t0; segm3 = d1; segment_1(); segment_2(); segment_3();an = 4; anod();break;
}
i++;if (i > 4) {i = 0;}
}
void segment_1() {
switch (segm1) {
// A B C D E F G
case 0: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // 0
case 1: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 1
case 2: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 2
case 3: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 3
case 4: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 4
case 5: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 5
case 6: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 6
case 7: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 7
case 8: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 8
case 9: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 9
case 10: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // пусто
case 17: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВС
case 11: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ПН
case 12: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВТ
case 13: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // СР
case 14: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ЧТ
case 15: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // ПТ
case 16: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // СБ
}
}
void segment_2() {
switch (segm2) {
// A B C D E F G
case 0: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 1); break; // 0
case 1: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 1
case 2: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 1); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 2
case 3: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 3
case 4: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 4
case 5: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 5
case 6: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 6
case 7: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 7
case 8: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 8
case 9: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 9
case 10: ch(SEG_A2, 1); ch(SEG_B2, 1); ch(SEG_C2, 1); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // пусто
}
}
void segment_3() {
switch (segm3) {
// A B C D E F G
case 0: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 1); break; // 0
case 1: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 1
case 2: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 1); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 2
case 3: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 3
case 4: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 4
case 5: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 5
case 6: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 6
case 7: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 7
case 8: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 8
case 9: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 9
case 10: ch(SEG_A3, 1); ch(SEG_B3, 1); ch(SEG_C3, 1); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // пусто
}
}
void anod() {
switch (an) {
case 0: ch(AN_1, 0); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
case 1: ch(AN_1, 1); ch(AN_2, 0); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
case 2: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 0); ch(AN_4, 1); ch(AN_5, 1); break;
case 3: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 0); ch(AN_5, 1); break;
case 4: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 0); break;
case 5: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
}
}
void ch(int pin, int logic) {
digitalWrite(pin, logic);
}
float dsRead(byte x) {
byte data[2], addr[8][8], kol = 0;
while (ds.search(addr[kol])) { // поиск датчиков, определение адреса и кол-ва датчиков
kol++;
}
ds.reset_search(); // Сброс поиска датчика
ds.reset(); // Инициализация, выполняется сброс шины
ds.select(addr[x]); // Обращение к датчику по адресу
ds.write(0x44, 0); // Измерение температуры с переносом данных в память
ds.reset(); // Инициализация, выполняется сброс шины
ds.select(addr[x]); // Обращение к датчику по адресу
ds.write(0xBE); // Обращение памяти
data[0] = ds.read();// Чтение памяти byte low
data[1] = ds.read();// Чтение памяти byte high
float value = ((data[1] << 8) | data[0]) / 16.0; return (float)value; // Расчет температуры и вывод
}
А свободные пины есть?
А свободные пины есть?
7 ,8 пин свободны
7 ,8 пин свободны
Они под кварц, у них нет другого назначения
7 ,8 пин свободны
Они под кварц, у них нет другого назначения
Ну 11 пин можно,он под кнопку EXIT,
В индикаторе под десятки месяцев есть же неиспользуемые выводы
Страницы Назад 1 … 6 7 8 9 10 … 16 Далее
Чтобы отправить ответ, вы должны войти или зарегистрироваться
forum.rcl-radio.ru → Новые идеи для проектов Arduino → Часы с календарем
Форум работает на PunBB, при поддержке Informer Technologies, Inc
|