Re: Часы с календарем
Маленькие цифры тоже под ОК?
Да
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
forum.rcl-radio.ru → Новые идеи для проектов Arduino → Часы с календарем
Страницы Назад 1 … 11 12 13 14 15 16 Далее
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Маленькие цифры тоже под ОК?
Да
// 19 === SCL
// 20 === SDA
#define DIN PD3
#define CS PD4
#define CLK PD5
//// Катоды
#define SEG_A 28
#define SEG_B 29
#define SEG_C 30
#define SEG_D 31
#define SEG_E 23
#define SEG_F 22
#define SEG_G 21
#define SEG_DP 20
//// Аноды
#define AN_Q1 3
#define AN_Q2 2
#define AN_Q3 1
#define AN_Q4 0
#define AN_Q5 24
#define AN_Q6 25
#define AN_Q7 26
#define AN_Q8 27
#define SET 10
#define UP 9
#define DW 8
#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(4); // Вход датчика 18b20 (PD4 44 пин контр)
long oldPosition = -999, newPosition, times,times1,times2;
int a[8],segm,i,an, dp1,dp2;
int old_sec,dp,dp_l;
int hour,minut,secon,data,mon,year,den;
int temp;
long dn1[8],dn2[8];
int hh,mm,ss,dd,mes,gg,set;
void setup() {
Wire.begin();
clock.begin();
DDRD |= (1 << DIN) | (1 << CS) | (1 << CLK);
max7219(0x0F, 0, 0);// тест выкл.
max7219(0x0C, 1, 1);// вкл. индик.
max7219(0x0A, 1, 1);// яркость
max7219(0x09, 0, 0);// дешифраторы выкл.
max7219(0x0B, 7, 7);// кол-во разрядов
// 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_A, OUTPUT);
pinMode(SEG_B, OUTPUT);
pinMode(SEG_C, OUTPUT);
pinMode(SEG_D, OUTPUT);
pinMode(SEG_E, OUTPUT);
pinMode(SEG_F, OUTPUT);
pinMode(SEG_G, OUTPUT);
pinMode(SEG_DP, OUTPUT);
pinMode(AN_Q1, OUTPUT);
pinMode(AN_Q2, OUTPUT);
pinMode(AN_Q3, OUTPUT);
pinMode(AN_Q4, OUTPUT);
pinMode(AN_Q5, OUTPUT);
pinMode(AN_Q6, OUTPUT);
pinMode(AN_Q7, OUTPUT);
pinMode(AN_Q8, OUTPUT);
pinMode (SET,INPUT_PULLUP);
pinMode (UP,INPUT_PULLUP);
pinMode (DW,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)*10;times1=millis();}
if(digitalRead(SET)==LOW){set++;if(set>5){set=0;}delay(200);}
hh=hour;mm=minut;ss=secon;dd=data;mes=mon;gg=year;
if(set==1 && digitalRead(UP)==LOW){hh++;if(hh>23){hh=0;}clock.setDateTime(year, mon, data, hh, minut, secon);delay(200);}
if(set==1 && digitalRead(DW)==LOW){hh--;if(hh<0){hh=23;}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, 0);delay(200);}
if(set==2 && digitalRead(DW)==LOW){mm--;if(mm<0){mm=59;}clock.setDateTime(year, mon, data, hour, mm, 0);delay(200);}
if(set==3 && digitalRead(UP)==LOW){dd++;if(dd>31){dd=1;}clock.setDateTime(year, mon, dd, hour, minut, secon);delay(200);}
if(set==3 && digitalRead(DW)==LOW){dd--;if(dd<1){dd=31;}clock.setDateTime(year, mon, dd, hour, minut, secon);delay(200);}
if(set==4 && digitalRead(UP)==LOW){mes++;if(mes>12){mes=0;}clock.setDateTime(year, mes, data, hour, minut, secon);delay(200);}
if(set==4 && digitalRead(DW)==LOW){mes--;if(mes<1){mes=12;}clock.setDateTime(year, mes, data, hour, minut, secon);delay(200);}
if(set==5 && digitalRead(UP)==LOW){gg++;if(gg>2100){gg=2023;}clock.setDateTime(gg, mon, data, hour, minut, secon);delay(200);}
if(set==5 && digitalRead(DW)==LOW){gg--;if(gg<2023){gg=2100;}clock.setDateTime(gg, mon, data, hour, minut, secon);delay(200);}
if(set==1){a[0] = hour/10%10;a[1] = hour%10; a[2]=10;a[3]=10;a[4]=10;a[5]=10;a[6]=10;a[7]=10;}
if(set==2){a[2] = minut/10%10;a[3] = minut%10; a[0]=10;a[1]=10;a[4]=10;a[5]=10;a[6]=10;a[7]=10;}
if(set==3){a[4] = data/10%10;a[5] = data%10; a[0]=10;a[1]=10;a[2]=10;a[3]=10;a[6]=10;a[7]=10;}
if(set==4){a[6] = mon/10%10;a[7] = mon%10; a[0]=10;a[1]=10;a[2]=10;a[3]=10;a[4]=10;a[5]=10;}
if(set==5){a[4] = year/1000%10;a[5] = year/100%10;a[6] = year/10%10; a[7] = year%10; a[0]=10;a[1]=10;a[2]=10;a[3]=10;}
if(set>0){dp_l=1;dp=1;dp1=1;dp2=1;}
switch(den){
case 1:max7219(1, 126,102);max7219(2, 102,102);max7219(3, 102,102);max7219(4, 102,126);
max7219(5, 102,102);max7219(6, 102,102);max7219(7, 102,102);max7219(8, 0,0);break;// ПH
case 2:max7219(1, 124,126);max7219(2, 102,24);max7219(3, 102,24);max7219(4, 124,24);
max7219(5, 102,24);max7219(6, 102,24);max7219(7, 124,24);max7219(8, 0,0);break;// BT
case 3:max7219(1, 60,124);max7219(2, 102,102);max7219(3, 192,102);max7219(4, 192,124);
max7219(5, 192,96);max7219(6, 102,96);max7219(7, 60,96);max7219(8, 0,0);break;// CP
case 4:max7219(1, 102,126);max7219(2, 102,24);max7219(3, 102,24);max7219(4, 62,24);
max7219(5, 6,24);max7219(6, 6,24);max7219(7, 6,24);max7219(8, 0,0);break; // ЧТ
case 5:max7219(1, 126,0x7e);max7219(2, 102,0x18);max7219(3, 102,0x18);max7219(4, 102,0x18);
max7219(5, 102,0x18);max7219(6, 102,0x18);max7219(7, 102,0x18);max7219(8, 0x00,0x00);break;// ПТ
case 6:max7219(1, 60,127);max7219(2, 102,96);max7219(3, 192,96);max7219(4, 192,124);
max7219(5, 192,102);max7219(6, 102,102);max7219(7, 60,124);max7219(8, 0,0);break;// CБ
case 7:max7219(1, 124,60);max7219(2, 102,102);max7219(3, 102,192);max7219(4, 124,192);
max7219(5, 102,192);max7219(6, 102,102);max7219(7, 124,60);max7219(8, 0,0);break;// BС
}
if(set==0){
if(hour/10%10==0){a[0]=10;}else{a[0]=hour/10%10;}
a[1]=hour%10;
a[2]=minut/10%10;
a[3]=minut%10;
if( (secon>=5&&secon<=10) || (secon>=25&&secon<=30) || (secon>=45&&secon<50)){ dp_l=0;
if(data/10%10==0){a[4]=10;}else{a[4]=data/10%10;}
a[5]=data%10;
if(mon/10%10==0){a[6]=10;}else{a[6]=mon/10%10;}
a[7]=mon%10;
}
else{
if(temp>=0&&temp<100){dp_l=0;a[4]=10;a[5]=temp/10%10;a[6]=temp%10;a[7]=11; } // _1.3C
if(temp>=100){dp_l=0;a[4]=temp/100%10;a[5]=temp/10%10;a[6]=temp%10;a[7]=11; } // 23.5C
if(temp<0&&temp>-100){dp_l=0;a[4]=12;a[5]=abs(temp/10%10);a[6]=abs(temp%10);a[7]=11; } // -1.3C
if(temp<=-100){dp_l=1;a[4]=12;a[5]=abs(temp/100%10);a[6]=abs(temp/10%10);a[7]=11; } // -23C
}
if(millis()-times<500){dp=1;}else{dp=0;}
if(old_sec!=secon){old_sec=secon;times=millis();}
}
delay(100);
}
ISR(TIMER1_COMPA_vect){
switch (i) {
/// SMALL
// Q5
case 4: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[4];ch(SEG_DP,1); segment(); an = 0; anod();break;
// Q6
case 5: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[5];ch(SEG_DP,dp_l); segment(); an = 1; anod();break;
// Q7
case 6: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[6];ch(SEG_DP,1); segment(); an = 2; anod();break;
// Q8
case 7: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[7]; segment(); an = 3; anod();break;
/// BIG
// Q1
case 0: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[0];ch(SEG_DP,1); segment(); an = 4; anod();break;
// Q2
case 1: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[1];ch(SEG_DP,dp); segment(); an = 5; anod();break;
// Q3
case 2: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[2];ch(SEG_DP,dp); segment(); an = 6; anod();break;
// Q4
case 3: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[3];ch(SEG_DP,1); segment(); an = 7; anod();break;
}
i++;if (i > 7) {i = 0;}
}
void segment() {
switch (segm) {
// A B C D E F G
case 0: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 0); break; // 0
case 1: ch(SEG_A, 0); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // 1
case 2: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 1); break; // 2
case 3: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 1); break; // 3
case 4: ch(SEG_A, 0); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 1); ch(SEG_G, 1); break; // 4
case 5: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 0); ch(SEG_F, 1); ch(SEG_G, 1); break; // 5
case 6: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // 6
case 7: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // 7
case 8: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // 8
case 9: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 0); ch(SEG_F, 1); ch(SEG_G, 1); break; // 9
case 10: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // пусто
case 11: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 0);ch(SEG_DP, 1); break; // *C
case 12: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 1); break; // -
}
}
void anod() {
switch (an) {
case 0: ch(AN_Q1, 1); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
case 1: ch(AN_Q1, 0); ch(AN_Q2, 1); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
case 2: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 1); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
case 3: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 1); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
case 4: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 1); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
case 5: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 1); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
case 6: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 1); ch(AN_Q8, 0); break;
case 7: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 1); break;
case 10: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); 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; // Расчет температуры и вывод
}
void max7219(byte reg_n, byte h1, byte h2){
PORTD &=~(1 << CS);WriteBit16(reg_n,h1);WriteBit16(reg_n,h2);PORTD |=(1 << CS);
}
void WriteBit16(byte reg, byte data){
for(char i = 7; i >= 0; i--){
PORTD &= ~(1 << CLK);
if(((reg >> i) & 1) == 1){PORTD |= (1 << DIN);}else{PORTD &= ~(1 << DIN);}
PORTD |=(1 << CLK);}
for(char i = 7; i >= 0; i--){
PORTD &= ~(1 << CLK);
if(((data >> i) & 1) == 1){PORTD |= (1 << DIN);}else{PORTD &= ~(1 << DIN);}
PORTD |=(1 << CLK);}
PORTD &= ~(1 << CLK);PORTD |= (1 << DIN);
}
void cl(){for(char i=1;i<=8;i++){max7219(i, 0, 0);}}
Крайная верхняя точка сверху справа точку убрать надо в букве Б
Найдите строку
case 6:max7219(1, 60,127);max7219(2, 102,96);max7219(3, 192,96);max7219(4, 192,124);
max7219(5, 192,102);max7219(6, 102,102);max7219(7, 60,124);max7219(8, 0,0);break;// CБ
замените ее на
case 6:max7219(1, 60,124);max7219(2, 102,96);max7219(3, 192,96);max7219(4, 192,124);
max7219(5, 192,102);max7219(6, 102,102);max7219(7, 60,124);max7219(8, 0,0);break;// CБ
Найдите строку
case 6:max7219(1, 60,127);max7219(2, 102,96);max7219(3, 192,96);max7219(4, 192,124);
max7219(5, 192,102);max7219(6, 102,102);max7219(7, 60,124);max7219(8, 0,0);break;// CБзамените ее на
case 6:max7219(1, 60,124);max7219(2, 102,96);max7219(3, 192,96);max7219(4, 192,124);
max7219(5, 192,102);max7219(6, 102,102);max7219(7, 60,124);max7219(8, 0,0);break;// CБ
в строчке case 6:max7219(1, 60,127) на case 6:max7219(1, 60,126) надо
У меня в калькуляторе Б такое:
Вот так получилось
В процессе сборки,с ключами пришлось помучится. Большой индикатор 6 В. Снизу дни недели все таки красными сделать или зелёными оставить
Красиво получилось.
Снизу дни недели все таки красными сделать или зелёными оставить
Зеленым не плохо смотрится.
Зеленый все лучше
Время опроса датчика температуры сколько?моментально реагирует на изменения температуры
if(millis()-times1>10){temp=dsRead(0)*10;times1=millis();}
10 мс это мало
надо поменять на
if(millis()-times1>10000){temp=dsRead(0)*10;times1=millis();}
Индикаторы нашел с ОА, теперь можно добавить ночной режим?
С max7219 будут проблемы, сейчас стоит минимальная яркость, есть вариант совсем отключать матрицу с 7 до 22
С max7219 будут проблемы, сейчас стоит минимальная яркость, есть вариант совсем отключать матрицу с 7 до 22
Цифры только регулирировать
max7219 гасить или оставить как есть?
Опубликуйте скетч со всеми изминениями.
Скетч из сообщения 291
// 19 === SCL
// 20 === SDA
#define DIN PD3
#define CS PD4
#define CLK PD5
//// Катоды
#define SEG_A 28
#define SEG_B 29
#define SEG_C 30
#define SEG_D 31
#define SEG_E 23
#define SEG_F 22
#define SEG_G 21
#define SEG_DP 20
//// Аноды
#define AN_Q1 3
#define AN_Q2 2
#define AN_Q3 1
#define AN_Q4 0
#define AN_Q5 24
#define AN_Q6 25
#define AN_Q7 26
#define AN_Q8 27
#define SET 10
#define UP 9
#define DW 8
#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(4); // Вход датчика 18b20 (PD4 44 пин контр)
long oldPosition = -999, newPosition, times,times1,times2;
int a[8],segm,i,an, dp1,dp2;
int old_sec,dp,dp_l;
int hour,minut,secon,data,mon,year,den;
int temp;
long dn1[8],dn2[8];
int hh,mm,ss,dd,mes,gg,set;
int brig = 1500;
int brig_g;
void setup() {
Wire.begin();
clock.begin();
DDRD |= (1 << DIN) | (1 << CS) | (1 << CLK);
max7219(0x0F, 0, 0);// тест выкл.
max7219(0x0C, 1, 1);// вкл. индик.
max7219(0x0A, 1, 1);// яркость
max7219(0x09, 0, 0);// дешифраторы выкл.
max7219(0x0B, 7, 7);// кол-во разрядов
// 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_A, OUTPUT);
pinMode(SEG_B, OUTPUT);
pinMode(SEG_C, OUTPUT);
pinMode(SEG_D, OUTPUT);
pinMode(SEG_E, OUTPUT);
pinMode(SEG_F, OUTPUT);
pinMode(SEG_G, OUTPUT);
pinMode(SEG_DP, OUTPUT);
pinMode(AN_Q1, OUTPUT);
pinMode(AN_Q2, OUTPUT);
pinMode(AN_Q3, OUTPUT);
pinMode(AN_Q4, OUTPUT);
pinMode(AN_Q5, OUTPUT);
pinMode(AN_Q6, OUTPUT);
pinMode(AN_Q7, OUTPUT);
pinMode(AN_Q8, OUTPUT);
pinMode (SET,INPUT_PULLUP);
pinMode (UP,INPUT_PULLUP);
pinMode (DW,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>10000){temp=dsRead(0)*10;times1=millis();}
if(hour<7||hour>=22){brig_g=brig;}else{brig_g=200;}
if(digitalRead(SET)==LOW){set++;if(set>5){set=0;}delay(200);}
hh=hour;mm=minut;ss=secon;dd=data;mes=mon;gg=year;
if(set==1 && digitalRead(UP)==LOW){hh++;if(hh>23){hh=0;}clock.setDateTime(year, mon, data, hh, minut, secon);delay(200);}
if(set==1 && digitalRead(DW)==LOW){hh--;if(hh<0){hh=23;}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, 0);delay(200);}
if(set==2 && digitalRead(DW)==LOW){mm--;if(mm<0){mm=59;}clock.setDateTime(year, mon, data, hour, mm, 0);delay(200);}
if(set==3 && digitalRead(UP)==LOW){dd++;if(dd>31){dd=1;}clock.setDateTime(year, mon, dd, hour, minut, secon);delay(200);}
if(set==3 && digitalRead(DW)==LOW){dd--;if(dd<1){dd=31;}clock.setDateTime(year, mon, dd, hour, minut, secon);delay(200);}
if(set==4 && digitalRead(UP)==LOW){mes++;if(mes>12){mes=0;}clock.setDateTime(year, mes, data, hour, minut, secon);delay(200);}
if(set==4 && digitalRead(DW)==LOW){mes--;if(mes<1){mes=12;}clock.setDateTime(year, mes, data, hour, minut, secon);delay(200);}
if(set==5 && digitalRead(UP)==LOW){gg++;if(gg>2100){gg=2023;}clock.setDateTime(gg, mon, data, hour, minut, secon);delay(200);}
if(set==5 && digitalRead(DW)==LOW){gg--;if(gg<2023){gg=2100;}clock.setDateTime(gg, mon, data, hour, minut, secon);delay(200);}
if(set==1){a[0] = hour/10%10;a[1] = hour%10; a[2]=10;a[3]=10;a[4]=10;a[5]=10;a[6]=10;a[7]=10;}
if(set==2){a[2] = minut/10%10;a[3] = minut%10; a[0]=10;a[1]=10;a[4]=10;a[5]=10;a[6]=10;a[7]=10;}
if(set==3){a[4] = data/10%10;a[5] = data%10; a[0]=10;a[1]=10;a[2]=10;a[3]=10;a[6]=10;a[7]=10;}
if(set==4){a[6] = mon/10%10;a[7] = mon%10; a[0]=10;a[1]=10;a[2]=10;a[3]=10;a[4]=10;a[5]=10;}
if(set==5){a[4] = year/1000%10;a[5] = year/100%10;a[6] = year/10%10; a[7] = year%10; a[0]=10;a[1]=10;a[2]=10;a[3]=10;}
if(set>0){dp_l=1;dp=1;dp1=1;dp2=1;}
switch(den){
case 1:max7219(1, 126,102);max7219(2, 102,102);max7219(3, 102,102);max7219(4, 102,126);
max7219(5, 102,102);max7219(6, 102,102);max7219(7, 102,102);max7219(8, 0,0);break;// ПH
case 2:max7219(1, 124,126);max7219(2, 102,24);max7219(3, 102,24);max7219(4, 124,24);
max7219(5, 102,24);max7219(6, 102,24);max7219(7, 124,24);max7219(8, 0,0);break;// BT
case 3:max7219(1, 60,124);max7219(2, 102,102);max7219(3, 192,102);max7219(4, 192,124);
max7219(5, 192,96);max7219(6, 102,96);max7219(7, 60,96);max7219(8, 0,0);break;// CP
case 4:max7219(1, 102,126);max7219(2, 102,24);max7219(3, 102,24);max7219(4, 62,24);
max7219(5, 6,24);max7219(6, 6,24);max7219(7, 6,24);max7219(8, 0,0);break; // ЧТ
case 5:max7219(1, 126,0x7e);max7219(2, 102,0x18);max7219(3, 102,0x18);max7219(4, 102,0x18);
max7219(5, 102,0x18);max7219(6, 102,0x18);max7219(7, 102,0x18);max7219(8, 0x00,0x00);break;// ПТ
case 6:max7219(1, 60,126);max7219(2, 102,96);max7219(3, 192,96);max7219(4, 192,124);
max7219(5, 192,102);max7219(6, 102,102);max7219(7, 60,124);max7219(8, 0,0);break;// CБ
case 7:max7219(1, 124,60);max7219(2, 102,102);max7219(3, 102,192);max7219(4, 124,192);
max7219(5, 102,192);max7219(6, 102,102);max7219(7, 124,60);max7219(8, 0,0);break;// BС
}
if(set==0){
if(hour/10%10==0){a[0]=10;}else{a[0]=hour/10%10;}
a[1]=hour%10;
a[2]=minut/10%10;
a[3]=minut%10;
if( (secon>=5&&secon<=10) || (secon>=25&&secon<=30) || (secon>=45&&secon<50)){ dp_l=0;
if(data/10%10==0){a[4]=10;}else{a[4]=data/10%10;}
a[5]=data%10;
if(mon/10%10==0){a[6]=10;}else{a[6]=mon/10%10;}
a[7]=mon%10;
}
else{
if(temp>=0&&temp<100){dp_l=0;a[4]=10;a[5]=temp/10%10;a[6]=temp%10;a[7]=11; } // _1.3C
if(temp>=100){dp_l=0;a[4]=temp/100%10;a[5]=temp/10%10;a[6]=temp%10;a[7]=11; } // 23.5C
if(temp<0&&temp>-100){dp_l=0;a[4]=12;a[5]=abs(temp/10%10);a[6]=abs(temp%10);a[7]=11; } // -1.3C
if(temp<=-100){dp_l=1;a[4]=12;a[5]=abs(temp/100%10);a[6]=abs(temp/10%10);a[7]=11; } // -23C
}
if(millis()-times<500){dp=1;}else{dp=0;}
if(old_sec!=secon){old_sec=secon;times=millis();}
}
delay(100);
}
ISR(TIMER1_COMPA_vect){
switch (i) {
/// SMALL
// Q5
case 4: segm = 10; segment(); an = 10; anod(); delayMicroseconds(brig_g);segm = a[4];ch(SEG_DP,1); segment(); an = 0; anod();break;
// Q6
case 5: segm = 10; segment(); an = 10; anod(); delayMicroseconds(brig_g);segm = a[5];ch(SEG_DP,dp_l); segment(); an = 1; anod();break;
// Q7
case 6: segm = 10; segment(); an = 10; anod(); delayMicroseconds(brig_g);segm = a[6];ch(SEG_DP,1); segment(); an = 2; anod();break;
// Q8
case 7: segm = 10; segment(); an = 10; anod(); delayMicroseconds(brig_g);segm = a[7]; segment(); an = 3; anod();break;
/// BIG
// Q1
case 0: segm = 10; segment(); an = 10; anod(); delayMicroseconds(brig_g);segm = a[0];ch(SEG_DP,1); segment(); an = 4; anod();break;
// Q2
case 1: segm = 10; segment(); an = 10; anod(); delayMicroseconds(brig_g);segm = a[1];ch(SEG_DP,dp); segment(); an = 5; anod();break;
// Q3
case 2: segm = 10; segment(); an = 10; anod(); delayMicroseconds(brig_g);segm = a[2];ch(SEG_DP,dp); segment(); an = 6; anod();break;
// Q4
case 3: segm = 10; segment(); an = 10; anod(); delayMicroseconds(brig_g);segm = a[3];ch(SEG_DP,1); segment(); an = 7; anod();break;
}
i++;if (i > 7) {i = 0;}
}
void segment() {
switch (segm) {
// A B C D E F G
case 0: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 1); break; // 0
case 1: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // 1
case 2: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 1); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 1); ch(SEG_G, 0); break; // 2
case 3: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 0); break; // 3
case 4: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 0); break; // 4
case 5: ch(SEG_A, 0); ch(SEG_B, 1); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 0); break; // 5
case 6: ch(SEG_A, 0); ch(SEG_B, 1); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // 6
case 7: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // 7
case 8: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // 8
case 9: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 0); break; // 9
case 10: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // пусто
case 11: ch(SEG_A, 0); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 1);ch(SEG_DP, 0); break; // *C
case 12: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 0); break; // -
}
}
void anod() {
switch (an) {
case 0: ch(AN_Q1, 1); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
case 1: ch(AN_Q1, 0); ch(AN_Q2, 1); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
case 2: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 1); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
case 3: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 1); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
case 4: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 1); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
case 5: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 1); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
case 6: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 1); ch(AN_Q8, 0); break;
case 7: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 1); break;
case 10: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); 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; // Расчет температуры и вывод
}
void max7219(byte reg_n, byte h1, byte h2){
PORTD &=~(1 << CS);WriteBit16(reg_n,h1);WriteBit16(reg_n,h2);PORTD |=(1 << CS);
}
void WriteBit16(byte reg, byte data){
for(char i = 7; i >= 0; i--){
PORTD &= ~(1 << CLK);
if(((reg >> i) & 1) == 1){PORTD |= (1 << DIN);}else{PORTD &= ~(1 << DIN);}
PORTD |=(1 << CLK);}
for(char i = 7; i >= 0; i--){
PORTD &= ~(1 << CLK);
if(((data >> i) & 1) == 1){PORTD |= (1 << DIN);}else{PORTD &= ~(1 << DIN);}
PORTD |=(1 << CLK);}
PORTD &= ~(1 << CLK);PORTD |= (1 << DIN);
}
void cl(){for(char i=1;i<=8;i++){max7219(i, 0, 0);}}
С тонировкой в корпусе,камера конечно не передаёт всю красотень) Есть ещё 1,8 дюйма синий цвет,как нибудь если найду похожий корпус соберу вариант такой.На дату, температуру желтенькие попробовать.
Очень красиво получилось!!!
Очень красиво получилось!!!
Вам большое спасибо за реализацию! На зелёном цвете мне кажется заметно мерцание
Пожалуйста! Если что обращайтесь.
На зелёном цвете заметно мерцание,на красных не так заметно
Поднимите частоту
OCR1A = 300;
замените на
OCR1A = 150;
Динамическая индикация будет работать на 800 Гц
Страницы Назад 1 … 11 12 13 14 15 16 Далее
Чтобы отправить ответ, вы должны войти или зарегистрироваться
forum.rcl-radio.ru → Новые идеи для проектов Arduino → Часы с календарем
Форум работает на PunBB, при поддержке Informer Technologies, Inc
|