Ini adalah prototipe mekanisme pengaturan waktu dan alarm yang saya rencanakan untuk digunakan dalam proyek jam digital saya berikutnya. Saya harap ini berguna bagi Anda. Jika Anda memikirkan perbaikan apa pun, beri tahu saya. Saya akan lebih senang untuk melihat ke dalamnya dan berpotensi memasukkannya ke dalam kode saya.
Jika Anda menyukai konten ini dan Anda ingin mendukung saya dalam membuat video serupa, kunjungi halaman web Patreon saya
https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=7PD67JWZ9S3EJ&source=url
Kode
- Menampilkan waktu dari modul RTC ditambah pengaturan waktu dan fungsi pengaturan Alarm
Menampilkan waktu dari modul RTC ditambah pengaturan waktu dan fungsi pengaturan AlarmArduino
Kode ini membaca waktu saat ini dari modul RTC. Kemudian juga memungkinkan untuk memperbarui waktu saat ini dan juga mengatur waktu Alarm.
Tindakan penyetelan dilakukan menggunakan 3 tombol.// Mario's Ideas// Jam Digital TM1637 dengan Fungsi Penyetelan dan Alarm#include #include #include //// Deklarasi modul RTC// PIN CLK, DAT, RSTvirtuabotixRTC myRTC(A1,A2,A3);// Variabel untuk menyimpan nilai sebelumnya membaca modul RTC menit;int jam;// Variabel untuk menyimpan waktu di mana Alarm harus berbunyi int Alarm_minutes=05;int Alarm_hours=18;uint8_t Blank[] ={0x0};int POSITION=0;//Tabel untuk menyimpan 4 digit, digunakan dalam waktu dan prosedur pengaturan Alarmint digit[3];int interval=0;#define Alarm 9 // Tombol untuk mengaktifkan atau menonaktifkan mode alarm#define Buzer 13#define Led 8//Statusboolean Alarm_set=false;boolean Alarm_in_progress=false;boolean Setup_on=false;// 4digit display connection pins (Digital Pins)#define CLK 4#define DIO 5// Deklarasi tampilan 4 digitTM1637Jam tampilan(CLK, DIO);void setup() { attachInterrupt(digitalPinToInterrupt(2), Press_A_Button,RISING); attachInterrupt(digitalPinToInterrupt(3), Tekan_B_Button,RISING); pinMode(Alarm, INPUT); pinMode(Buzer, OUTPUT); pinMode(Led, OUTPUT); digitalWrite(Buzer,RENDAH); clock.setBrightness(0x0f); Serial.begin(9600);}void Tekan_A_Button(){ if (interval>3){ if (Setup_on==false){ Setup_on=true; if (Alarm_set==true){ digit[0]=(int)Alarm_hours/10; digit[1]=Alarm_hours-((int)Alarm_hours/10)*10; digit[2]=(int)Alarm_minutes/10; digit[3]=Alarm_minutes-((int)Alarm_minutes/10)*10; } else { digit[0]=(int)myRTC.hours/10; digit[1]=myRTC.hours-((int)myRTC.hours/10)*10; digit[2]=(int)myRTC.minutes/10; digit[3]=myRTC.minutes-((int)myRTC.minutes/10)*10; } } else{ POSISI++; if (POSITION==4){ if (Alarm_set==true){ Alarm_minutes=digits[3]+digits[2]*10; Alarm_hours=digit[1]+digit[0]*10; } else { myRTC.setDS1302Time( 0, digits[3]+digits[2]*10, digits[1]+digits[0]*10,myRTC.dayofweek, myRTC.dayofmonth, myRTC.month, myRTC.year); clock.showNumberDec(digit[0],false,1,0); clock.showNumberDec(digit[1],false,1,1); clock.showNumberDec(digit[2],false,1,2); clock.showNumberDec(digit[3],false,1,3); } POSISI=0; Setup_on=salah; } } } interval=0;}void Tekan_B_Button(){ if (interval>3){ if(Setup_on){ digits[POSITION]=digits[POSITION]+1; jika (POSITION==0 dan digit[POSITION]==3) digit[POSITION]=0; jika (POSISI!=0 dan angka[POSISI]==10) angka[POSISI]=0; interval=0; } } interval=0;}void loop() { if (digitalRead(Alarm)==HIGH dan Alarm_set==false ){ if (interval>30){ digitalWrite(Led,HIGH); Alarm_set=benar; penundaan (300); } } else{ if (digitalRead(Alarm)==HIGH dan Alarm_set==true){ if (interval>30){ Alarm_set=false; Alarm_in_progress=salah; digitalWrite(Led,RENDAH); penundaan (300); } } } myRTC.updateTime(); if (Setup_on==true){ clock.showNumberDec(digit[0],false,1,0); clock.showNumberDec(digit[1],false,1,1); clock.showNumberDec(digit[2],false,1,2); clock.showNumberDec(digit[3],false,1,3); penundaan (200); clock.setSegments(Kosong, 1,POSISI); penundaan (200); clock.showNumberDec(digit[0],false,1,0); clock.showNumberDec(digit[1],false,1,1); clock.showNumberDec(digit[2],false,1,2); clock.showNumberDec(digit[3],false,1,3); } else{ if (myRTC.minutes==Alarm_minutes dan myRTC.hours==Alarm_hours dan Alarm_set==true dan Setup_on==false){ Alarm_in_progress=true; } if (Alarm_in_progress){ digitalWrite(Buzer,HIGH); penundaan (1000); digitalWrite(Buzer,RENDAH); penundaan (1000); } if (myRTC.minutes!=minutes){ clock.showNumberDecEx((int)myRTC.hours/10*1000+(myRTC.hours-((int)myRTC.hours/10)*10)*100+ (int) myRTC.minutes/10*10+myRTC.minutes-((int)myRTC.minutes/10)*10, (0x80>> 1), benar); menit=myRTC.menit; jam=myRTC.jam; } } if (interval<200) interval++;}
Skema