Jam Digital Alarm Arduino Display Seven Segment 4 Digits
Untuk anda yang ingin membuat sebuah jam digital canggih lengkap dengan jam, menit, serta alarm, disini saya akan membagikan salah satu proyek arduino yang sangat berguna dan cocok digunakan untuk tugas akhir sekolah maupun skripsi elektronika bagi yang sudah kuliah.
Jam digital kali ini berbasiskan arduino yang menggunakan IC ATMEGA328. Dalam proyek ini saya menggunakan IC Arduino yang mudah didapatkan. Jam digital ini sudah dilengkapi dengan sebuah IC RTC, yaitu sebuah IC yang dapat menyimpan data waktu maupun tanggal walaupun power supply untuk jam itu sendiri mati.
Agar jam digital ini dapat terus meng-counter waktu pada saat listrik padam, maka diperlukan nya sebuah battery backup untuk tenaga cadangan bagi IC RTC hingga berbulan bulan lamanya tanpa ada arus listrik ke rangkaian jam digital.
Jam digital ini bisa menggunakan display seven segmen common anoda maupun common catoda tergantung dari pemasangan driver terhadap seven segmen.
Pada jam digital ini dilengkapi dengan 3 tombol yang dapat digunakan untuk mengatur jam, menit serta alarm.
Karena Untuk mempermudah bagi yang ingin membuat saya menyediakan 2 Source Program. Kerana seperti yang anda ketahui seven segment memiliki dua jenis, yaitu Common Anoda dan Common Catoda.
Bahan yang dibutuhkan:
1. Arduino Uno
2. Module RTC DS1307
3. Seven Segment 4 buah 1" (Inch) (Bebas “CA/CC”)
4.Tombol 4 buah
5. Komponen Pendukung.

Di postingan ini saya membuatnya kedalam PCB double layer. dan bagi teman teman yang ingin membuatnya ke dalam single layer maupun langsung menggunakan module arduino bisa menggunakan rangkaian skematik diatas.


Program Utama
=================================Source Code================================
#include "EEPROM.h"
#include "Wire.h"
#include "RTClib.h"
#include "DHT.h"
#define DHTPIN A3 // Pin DHT 11 to pin A3 arduino
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
RTC_DS1307 RTC;
int digit1 = 10; //PWM pin for control digit 1 (left side)
int digit2 = 11; //PWM pin for control digit 2
int digit3 = 12; //PWM pin for control digit 3
int digit4 = 13; //PWM pin for control digit 4 (right side)
int segA = 2; // pin for control "a" segment
int segB = 3; // pin for control "b" segment
int segC = 4; // pin for control "c" segment
int segD = 5; // pin for control "d" segment
int segE = 6; // pin for control "e" segment
int segF = 7; // pin for control "f" segment
int segG = 8; // pin for control "g" segment
int segDP = 9; // pin for control led DOT
#define SW0 A0 // pin for MENU/change
#define SW1 A1 // pin for increase value
#define Buzzer A2 // pin for control Alarm
#define LDR 0 // pin for photoresistor
int DISPLAY_BRIGHTNESS = 15;
//for common anoda
#define DIGIT_ON HIGH
#define DIGIT_OFF LOW
#define SEGMENT_ON LOW
#define SEGMENT_OFF HIGH
/*// for common catoda
#define DIGIT_ON LOW
#define DIGIT_OFF HIGH
#define SEGMENT_ON HIGH
#define SEGMENT_OFF LOW
*/
byte Tunda = 30;
int t, h;
int waktu;
byte menu = 0; // 0 = usual state
// 1 - adjust jam
// 2 - adjust menit
// 3 - adjust tahun
// 4 - adjust bulan
// 5 - adjust tanggal
// 6 - activate /deactivate alarm
// 7 - adjust jam alarm
// 8 - adjust menit alarm
// 9 - Simpan data
byte menit = 0;
byte jam = 0;
int tahun = 0;
byte bulan = 0;
byte tanggal = 0;
byte Tanggal_Max = 0;
byte Alarm = 0;
byte Menit = 0;
byte Jam = 0;
byte Alarm_Aktif = 0;
byte Alarm_Mati = 0;
unsigned long Selesai = 0;
int maxbright = 1030;
int Line = 0;
void setup() {
Wire.begin();
RTC.begin();
dht.begin();
Wire.beginTransmission(0x68);
Wire.write(0x07); // move pointer to SQW address
Wire.write(0x10); // sends 0x10 (hex) 00010000 (binary) to control register - turns on square wave at 1Hz
Wire.endTransmission();
if (! RTC.isrunning()) {
// following line sets the RTC to the date & time this sketch was compiled
RTC.adjust(DateTime(__DATE__, __TIME__));
}
pinMode(segA, OUTPUT);
pinMode(segB, OUTPUT);
pinMode(segC, OUTPUT);
pinMode(segD, OUTPUT);
pinMode(segE, OUTPUT);
pinMode(segF, OUTPUT);
pinMode(segG, OUTPUT);
pinMode(segDP, OUTPUT);
pinMode(digit1, OUTPUT);
pinMode(digit2, OUTPUT);
pinMode(digit3, OUTPUT);
pinMode(digit4, OUTPUT);
pinMode(SW0, INPUT); // for this use a slide switch
pinMode(SW1, INPUT); // N.O. push button switch
digitalWrite(SW0, HIGH); // pull-ups on
digitalWrite(SW1, HIGH);
pinMode(LDR, INPUT); // for photoresistor
pinMode(Buzzer, OUTPUT); // control buzzer
digitalWrite(Buzzer, HIGH);
delay(200);
digitalWrite(Buzzer, LOW);
Alarm = EEPROM.read(100);
Jam = EEPROM.read(101);
Menit = EEPROM.read(102);
}
void loop() {
if (menu == 0)
{
digitalWrite(segDP, SEGMENT_OFF);
DateTime now = RTC.now();
// waktu = now.hour()*100+now.minute();
jam = now.hour();
menit = now.minute();
waktu = jam*100+menit;
tahun = now.year();
bulan = now.month();
tanggal = now.day();
if ((menit == Menit) && (jam == Jam))
{
Alarm_Aktif = 1;
}
else Alarm_Aktif = 0;
if ((millis() - Selesai) > 100000) Alarm_Mati = 0;
//JAM
for (byte Tampil = 0; Tampil < 20; Tampil++)
{
DISPLAY_BRIGHTNESS = analogRead(LDR);
// if ((Alarm_Aktif == 1) && (Alarm%2 == 1))
if ((Alarm_Aktif == 1) && (Alarm%2 == 1) && (Alarm_Mati == 0))
{
digitalWrite(Buzzer, HIGH);
}
else
digitalWrite(Buzzer, LOW);
DISPLAY_BRIGHTNESS = analogRead(LDR);
// display parts
for(int i = 125 ; i >0 ; i--) {
if (waktu >= 1000) displayNumber01(waktu);
else displayNumber02(waktu);
}
if (!(digitalRead(SW0)))
{
menu = 1; //go to menu for change hour
}
if (!(digitalRead(SW1)))
{
Alarm_Mati = 1; // mute the alarm
Selesai = millis(); // store push time for mute alarm
}
digitalWrite(Buzzer, LOW);
for(int i = 125 ; i >0 ; i--) {
if (waktu >= 1000) displayNumber03(waktu);
else displayNumber04(waktu);
}
if (!(digitalRead(SW0)))
{
menu = 1; //go to menu for change hour
}
if (!(digitalRead(SW1)))
{
Alarm_Mati = 1; // mute the alarm
Selesai = millis(); // store push time for mute alarm
}
}
// date (day and month)
for (byte Tampil = 0; Tampil < 2; Tampil++)
{
DISPLAY_BRIGHTNESS = analogRead(LDR);
// if ((Alarm_Aktif == 1) && (Alarm%2 == 1))
if ((Alarm_Aktif == 1) && (Alarm%2 == 1) && (Alarm_Mati == 0))
{
digitalWrite(Buzzer, HIGH);
}
else
digitalWrite(Buzzer, LOW);
for(int i = 125 ; i >0 ; i--) {
displayNumber01(tanggal*100+bulan); // this is number to diplay
}
digitalWrite(Buzzer, LOW);
for(int i = 125 ; i >0 ; i--) {
displayNumber01(tanggal*100+bulan); // this is number to diplay
}
if (!(digitalRead(SW0)))
{
menu = 1; //go to menu for change hour
delay(1000);
}
if (!(digitalRead(SW1)))
{
Alarm_Mati = 1; // mute the alarm
Selesai = millis(); // store push time for mute alarm
}
}
// year
for (byte Tampil = 0; Tampil < 2; Tampil++)
{
DISPLAY_BRIGHTNESS = analogRead(LDR);
// if ((Alarm_Aktif == 1) && (Alarm%2 == 1))
if ((Alarm_Aktif == 1) && (Alarm%2 == 1) && (Alarm_Mati == 0))
{
digitalWrite(Buzzer, HIGH);
}
else
digitalWrite(Buzzer, LOW);
for(int i = 125 ; i >0 ; i--) {
displayNumber03(tahun); // this is number to diplay
}
digitalWrite(Buzzer, LOW);
for(int i = 125 ; i >0 ; i--) {
displayNumber03(tahun); // this is number to diplay
}
if (!(digitalRead(SW0)))
{
menu = 1; //go to menu for change hour
delay(1000);
}
if (!(digitalRead(SW1)))
{
Alarm_Mati = 1; // mute the alarm
Selesai = millis(); // store push time for mute alarm
}
}
if (Tunda > 20)
{
h = dht.readHumidity();
t = dht.readTemperature();
Tunda = 0;
}
for (byte Tampil = 0; Tampil < 2; Tampil++)
{
DISPLAY_BRIGHTNESS = analogRead(LDR);
// if ((Alarm_Aktif == 1) && (Alarm%2 == 1))
if ((Alarm_Aktif == 1) && (Alarm%2 == 1) && (Alarm_Mati == 0))
{
digitalWrite(Buzzer, HIGH);
}
else
digitalWrite(Buzzer, LOW);
for(int i = 125 ; i >0 ; i--) {
displayNumber(t); // this is number to diplay
}
digitalWrite(Buzzer, LOW);
for(int i = 125 ; i >0 ; i--) {
displayNumber(t); // this is number to diplay
}
if (!(digitalRead(SW0)))
{
menu = 1; //go to menu for change hour
}
if (!(digitalRead(SW1)))
{
Alarm_Mati = 1; // mute the alarm
Selesai = millis(); // store push time for mute alarm
}
}
for (byte Tampil = 0; Tampil < 2; Tampil++)
{
DISPLAY_BRIGHTNESS = analogRead(LDR);
// if ((Alarm_Aktif == 1) && (Alarm%2 == 1))
if ((Alarm_Aktif == 1) && (Alarm%2 == 1) && (Alarm_Mati == 0))
{
digitalWrite(Buzzer, HIGH);
}
else
digitalWrite(Buzzer, LOW);
for(int i = 125 ; i >0 ; i--) {
displayNumber1(h); // this is number to diplay
}
digitalWrite(Buzzer, LOW);
for(int i = 125 ; i >0 ; i--) {
displayNumber1(h); // this is number to diplay
}
if (!(digitalRead(SW0)))
{
menu = 1; //go to menu for change hour
delay(1000);
}
if (!(digitalRead(SW1)))
{
Alarm_Mati = 1; // mute the alarm
Selesai = millis(); // store push time for mute alarm
}
}
Tunda = Tunda+1;
} // end usual menu (display hour, temperature and humidity)
if (menu == 1)
{
if (!digitalRead(SW1)) // set jam ++
{
jam++;
if (jam > 23) jam = 0;
delay(100);
}
for(int i = 20 ; i >0 ; i--)
{
displayNumber20(jam);
}
delay(1);
if (!(digitalRead(SW0)))
{
menu = 2; //go to menu for change minute
delay(1000);
}
} // end menu for change hour
if (menu == 2)
{
if (!digitalRead(SW1)) // set menit ++
{
menit++;
if (menit > 59) menit = 0;
delay(100);
}
for(int i = 20 ; i >0 ; i--)
{
displayNumber21(menit);
}
delay(1);
if (!(digitalRead(SW0)))
{
menu = 3; //go to menu for usual style
delay(500);
}
} // end menu for change menit
if (menu == 9) // store data in RTC
{
// date and jam
RTC.adjust(DateTime(tahun, bulan, tanggal, jam, menit, 0));
EEPROM.write(100,Alarm%2);
EEPROM.write(101,Jam);
EEPROM.write(102,Menit);
delay(500);
menu = 0;
}
} // end main program
//Given a number, turns on those segments
//If number == 10, then turn off number
void lightNumber(int numberToDisplay) {
switch (numberToDisplay){
case 0:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_OFF);
break;
case 1:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_OFF);
break;
case 2:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_OFF);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_ON);
break;
case 3:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_ON);
break;
case 4:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 5:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 6:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 7:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_OFF);
break;
case 8:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 9:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
// all segment are ON
case 10:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC, SEGMENT_OFF);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_OFF);
break;
// degree symbol made by B_Mz
case 11:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_OFF);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
// C letter made by B_Mz
case 12:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC, SEGMENT_OFF);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_OFF);
break;
// H letter made by B_Mz
case 13:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
// L letter made by B_Mz
case 14:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC, SEGMENT_OFF);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_OFF);
break;
// A letter made by B_Mz
case 15:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
// F letter made by B_Mz
case 16:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC, SEGMENT_OFF);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
// n letter made by B_Mz
case 17:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_OFF);
break;
// O letter made by B_Mz
case 18:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_OFF);
break;
// "Y" letter made by B_Mz
case 19:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
// "r" letter made by B_Mz
case 20:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC, SEGMENT_OFF);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_OFF);
break;
// "d" letter made by B_Mz
case 21:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_ON);
break;
// "=" letter made by B_Mz
case 22:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC, SEGMENT_OFF);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_ON);
break;
}
}
// display DATE/DAY
void displayNumber01(int toDisplay) {
for(int digit = 4 ; digit > 0 ; digit--) {
//Turn on a digit for a short amount of time
switch(digit) {
case 1:
digitalWrite(digit1, DIGIT_ON);
digitalWrite(segDP, SEGMENT_OFF);
break;
case 2:
digitalWrite(digit2, DIGIT_ON);
digitalWrite(segDP, SEGMENT_OFF);
break;
case 3:
digitalWrite(digit3, DIGIT_ON);
digitalWrite(segDP, SEGMENT_OFF);
break;
case 4:
digitalWrite(digit4, DIGIT_ON);
if (Alarm%2 == 1) digitalWrite(segDP, SEGMENT_OFF);
else digitalWrite(segDP, SEGMENT_OFF);
break;
}
lightNumber(toDisplay % 10);
toDisplay /= 10;
delayMicroseconds(DISPLAY_BRIGHTNESS);
//Turn off all segments
lightNumber(10);
digitalWrite(segDP, SEGMENT_ON);
Line = maxbright - DISPLAY_BRIGHTNESS;
delayMicroseconds(Line);
//Turn off all digits
digitalWrite(digit1, DIGIT_OFF);
digitalWrite(digit2, DIGIT_OFF);
digitalWrite(digit3, DIGIT_OFF);
digitalWrite(digit4, DIGIT_OFF);
digitalWrite(segDP, SEGMENT_OFF);
}
}
// display clock wih small hour (8:31) with second on
void displayNumber02(int toDisplay) {
for(int digit = 4 ; digit > 0 ; digit--) {
//Turn on a digit for a short amount of time
switch(digit) {
case 1:
lightNumber(10);
digitalWrite(digit1, DIGIT_ON);
digitalWrite(segDP,SEGMENT_ON);
break;
case 2:
digitalWrite(digit2, DIGIT_ON);
digitalWrite(segDP, SEGMENT_ON);
break;
case 3:
digitalWrite(digit3, DIGIT_ON);
digitalWrite(segDP, SEGMENT_ON);
break;
case 4:
digitalWrite(digit4, DIGIT_ON);
if (Alarm%2 == 1) digitalWrite(segDP, SEGMENT_OFF);
else digitalWrite(segDP, SEGMENT_OFF);
break;
}
lightNumber(toDisplay % 10);
toDisplay /= 10;
delayMicroseconds(DISPLAY_BRIGHTNESS);
//Turn off all segments
lightNumber(10);
digitalWrite(segDP, SEGMENT_ON);
Line = maxbright - DISPLAY_BRIGHTNESS;
delayMicroseconds(Line);
//Turn off all digits
digitalWrite(digit1, DIGIT_OFF);
digitalWrite(digit2, DIGIT_OFF);
digitalWrite(digit3, DIGIT_OFF);
digitalWrite(digit4, DIGIT_OFF);
digitalWrite(segDP, SEGMENT_OFF);
}
}
// display clock with second off
void displayNumber03(int toDisplay) {
for(int digit = 4 ; digit > 0 ; digit--) {
//Turn on a digit for a short amount of time
switch(digit) {
case 1:
digitalWrite(digit1, DIGIT_ON);
digitalWrite(segDP, SEGMENT_OFF);
break;
case 2:
digitalWrite(digit2, DIGIT_ON);
digitalWrite(segDP, SEGMENT_OFF);
break;
case 3:
digitalWrite(digit3, DIGIT_ON);
digitalWrite(segDP, SEGMENT_OFF);
break;
case 4:
digitalWrite(digit4, DIGIT_ON);
if (Alarm%2 == 1) digitalWrite(segDP, SEGMENT_OFF);
else digitalWrite(segDP, SEGMENT_ON);
break;
}
lightNumber(toDisplay % 10);
toDisplay /= 10;
delayMicroseconds(DISPLAY_BRIGHTNESS);
//Turn off all segments
lightNumber(10);
digitalWrite(segDP, SEGMENT_OFF);
Line = maxbright - DISPLAY_BRIGHTNESS;
delayMicroseconds(Line);
//Turn off all digits
digitalWrite(digit1, DIGIT_OFF);
digitalWrite(digit2, DIGIT_OFF);
digitalWrite(digit3, DIGIT_OFF);
digitalWrite(digit4, DIGIT_OFF);
digitalWrite(segDP, SEGMENT_OFF);
}
}
// display clock for small hour (8:31) with second off
void displayNumber04(int toDisplay) {
for(int digit = 4 ; digit > 0 ; digit--) {
//Turn on a digit for a short amount of time
switch(digit) {
case 1:
lightNumber(10);
digitalWrite(digit1, DIGIT_ON);
digitalWrite(segDP,SEGMENT_OFF);
break;
case 2:
digitalWrite(digit2, DIGIT_ON);
digitalWrite(segDP, SEGMENT_OFF);
break;
case 3:
digitalWrite(digit3, DIGIT_ON);
digitalWrite(segDP, SEGMENT_OFF);
break;
case 4:
digitalWrite(digit4, DIGIT_ON);
if (Alarm%2 == 1) digitalWrite(segDP, SEGMENT_OFF);
else digitalWrite(segDP, SEGMENT_ON);
break;
}
lightNumber(toDisplay % 10);
toDisplay /= 10;
delayMicroseconds(DISPLAY_BRIGHTNESS);
digitalWrite(segDP, SEGMENT_OFF);
//Turn off all segments
lightNumber(10);
digitalWrite(segDP, SEGMENT_OFF);
Line = maxbright - DISPLAY_BRIGHTNESS;
delayMicroseconds(Line);
//Turn off all digits
digitalWrite(digit1, DIGIT_OFF);
digitalWrite(digit2, DIGIT_OFF);
digitalWrite(digit3, DIGIT_OFF);
digitalWrite(digit4, DIGIT_OFF);
digitalWrite(segDP, SEGMENT_OFF);
}
}
// display temperature
void displayNumber(int toDisplay) {
for(int digit = 4 ; digit > 0 ; digit--) {
//Turn on a digit for a short amount of time
switch(digit) {
case 1:
digitalWrite(digit1, DIGIT_ON);
lightNumber(toDisplay % 10);
toDisplay /= 10;
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
case 2:
digitalWrite(digit2, DIGIT_ON);
lightNumber(toDisplay % 10);
toDisplay /= 10;
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
case 3:
digitalWrite(digit3, DIGIT_ON);
lightNumber(11); // display degree symbol
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
case 4:
digitalWrite(digit4, DIGIT_ON);
lightNumber(12); // display C letter
if (Alarm%2 == 1) digitalWrite(segDP, SEGMENT_OFF);
else digitalWrite(segDP, SEGMENT_OFF);
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
}
//Turn off all segments
lightNumber(10);
digitalWrite(segDP, SEGMENT_OFF);
Line = maxbright - DISPLAY_BRIGHTNESS;
delayMicroseconds(Line);
//Turn off all digits
digitalWrite(digit1, DIGIT_OFF);
digitalWrite(digit2, DIGIT_OFF);
digitalWrite(digit3, DIGIT_OFF);
digitalWrite(digit4, DIGIT_OFF);
digitalWrite(segDP, SEGMENT_OFF);
}
}
// display humidity
void displayNumber1(int toDisplay) {
for(int digit = 4 ; digit > 0 ; digit--) {
//Turn on a digit for a short amount of time
switch(digit) {
case 1:
digitalWrite(digit3, DIGIT_ON);
lightNumber(toDisplay % 10);
toDisplay /= 10;
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
case 2:
digitalWrite(digit4, DIGIT_ON);
lightNumber(toDisplay % 10);
toDisplay /= 10;
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
case 3:
digitalWrite(digit2, DIGIT_ON);
lightNumber(22); // display off
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
case 4:
digitalWrite(digit1, DIGIT_ON);
lightNumber(13); // display H letter
if (Alarm%2 == 1) digitalWrite(segDP, SEGMENT_OFF);
else digitalWrite(segDP, SEGMENT_OFF);
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
}
//Turn off all segments
lightNumber(10);
digitalWrite(segDP, SEGMENT_OFF);
Line = maxbright - DISPLAY_BRIGHTNESS;
delayMicroseconds(Line);
//Turn off all digits
digitalWrite(digit1, DIGIT_OFF);
digitalWrite(digit2, DIGIT_OFF);
digitalWrite(digit3, DIGIT_OFF);
digitalWrite(digit4, DIGIT_OFF);
digitalWrite(segDP, SEGMENT_OFF);
}
}
// hour clock adjust
void displayNumber20(int toDisplay) {
for(int digit = 4 ; digit > 0 ; digit--) {
//Turn on a digit for a short amount of time
switch(digit) {
case 1:
digitalWrite(digit1, DIGIT_ON);
lightNumber(toDisplay % 10);
toDisplay /= 10;
digitalWrite(segDP, SEGMENT_OFF);
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
case 2:
digitalWrite(digit2, DIGIT_ON);
lightNumber(toDisplay % 10);
toDisplay /= 10;
digitalWrite(segDP, SEGMENT_ON);
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
case 3:
digitalWrite(digit3, DIGIT_ON);
lightNumber(12); // C letter
digitalWrite(segDP, SEGMENT_OFF);
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
case 4:
digitalWrite(digit4, DIGIT_ON);
lightNumber(14); // L letter
digitalWrite(segDP, SEGMENT_OFF);
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
}
//Turn off all segments
lightNumber(10);
Line = maxbright - DISPLAY_BRIGHTNESS;
delayMicroseconds(Line);
//Turn off all digits
digitalWrite(digit1, DIGIT_OFF);
digitalWrite(digit2, DIGIT_OFF);
digitalWrite(digit3, DIGIT_OFF);
digitalWrite(digit4, DIGIT_OFF);
digitalWrite(segDP, SEGMENT_OFF);
}
}
// minute clock adjust
void displayNumber21(int toDisplay) {
for(int digit = 4 ; digit > 0 ; digit--) {
//Turn on a digit for a short amount of time
switch(digit) {
case 1:
digitalWrite(digit1, DIGIT_ON);
lightNumber(12); // C letter
digitalWrite(segDP, SEGMENT_OFF);
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
case 2:
digitalWrite(digit2, DIGIT_ON);
lightNumber(14); // L letter
digitalWrite(segDP, SEGMENT_ON);
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
case 3:
digitalWrite(digit3, DIGIT_ON);
lightNumber(toDisplay % 10);
toDisplay /= 10;
digitalWrite(segDP, SEGMENT_OFF);
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
case 4:
digitalWrite(digit4, DIGIT_ON);
lightNumber(toDisplay % 10);
toDisplay /= 10;
digitalWrite(segDP, SEGMENT_OFF);
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
}
//Turn off all segments
lightNumber(10);
Line = maxbright - DISPLAY_BRIGHTNESS;
delayMicroseconds(Line);
//Turn off all digits
digitalWrite(digit1, DIGIT_OFF);
digitalWrite(digit2, DIGIT_OFF);
digitalWrite(digit3, DIGIT_OFF);
digitalWrite(digit4, DIGIT_OFF);
digitalWrite(segDP, SEGMENT_OFF);
}
}
// hour alarm adjust
void displayNumber30(int toDisplay) {
for(int digit = 4 ; digit > 0 ; digit--) {
//Turn on a digit for a short amount of time
switch(digit) {
case 1:
digitalWrite(digit1, DIGIT_ON);
lightNumber(toDisplay % 10);
toDisplay /= 10;
digitalWrite(segDP, SEGMENT_OFF);
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
case 2:
digitalWrite(digit2, DIGIT_ON);
lightNumber(toDisplay % 10);
toDisplay /= 10;
digitalWrite(segDP, SEGMENT_ON);
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
case 3:
digitalWrite(digit3, DIGIT_ON);
lightNumber(15); // A letter
digitalWrite(segDP, SEGMENT_OFF);
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
case 4:
digitalWrite(digit4, DIGIT_ON);
lightNumber(14); // L letter
digitalWrite(segDP, SEGMENT_OFF);
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
}
//Turn off all segments
lightNumber(10);
Line = maxbright - DISPLAY_BRIGHTNESS;
delayMicroseconds(Line);
//Turn off all digits
digitalWrite(digit1, DIGIT_OFF);
digitalWrite(digit2, DIGIT_OFF);
digitalWrite(digit3, DIGIT_OFF);
digitalWrite(digit4, DIGIT_OFF);
digitalWrite(segDP, SEGMENT_OFF);
}
}
// minute alarm adjust
void displayNumber31(int toDisplay) {
for(int digit = 4 ; digit > 0 ; digit--) {
//Turn on a digit for a short amount of time
switch(digit) {
case 1:
digitalWrite(digit1, DIGIT_ON);
lightNumber(15); // A letter
digitalWrite(segDP, SEGMENT_OFF);
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
case 2:
digitalWrite(digit2, DIGIT_ON);
lightNumber(14); // L letter
digitalWrite(segDP, SEGMENT_ON);
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
case 3:
digitalWrite(digit3, DIGIT_ON);
lightNumber(toDisplay % 10);
toDisplay /= 10;
digitalWrite(segDP, SEGMENT_OFF);
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
case 4:
digitalWrite(digit4, DIGIT_ON);
lightNumber(toDisplay % 10);
toDisplay /= 10;
digitalWrite(segDP, SEGMENT_OFF);
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
}
//Turn off all segments
lightNumber(10);
Line = maxbright - DISPLAY_BRIGHTNESS;
delayMicroseconds(Line);
//Turn off all digits
digitalWrite(digit1, DIGIT_OFF);
digitalWrite(digit2, DIGIT_OFF);
digitalWrite(digit3, DIGIT_OFF);
digitalWrite(digit4, DIGIT_OFF);
digitalWrite(segDP, SEGMENT_OFF);
}
}
// alarm on
void displayNumber32() {
for(int digit = 4 ; digit > 0 ; digit--) {
//Turn on a digit for a short amount of time
switch(digit) {
case 1:
digitalWrite(digit1, DIGIT_ON);
lightNumber(15); // A letter
digitalWrite(segDP, SEGMENT_OFF);
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
case 2:
digitalWrite(digit2, DIGIT_ON);
lightNumber(14); // L letter
digitalWrite(segDP, SEGMENT_ON);
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
case 3:
digitalWrite(digit3, DIGIT_ON);
lightNumber(18); // o letter
digitalWrite(segDP, SEGMENT_OFF);
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
case 4:
digitalWrite(digit4, DIGIT_ON);
lightNumber(17); // n letter
digitalWrite(segDP, SEGMENT_OFF);
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
}
//Turn off all segments
lightNumber(10);
Line = maxbright - DISPLAY_BRIGHTNESS;
delayMicroseconds(Line);
//Turn off all digits
digitalWrite(digit1, DIGIT_OFF);
digitalWrite(digit2, DIGIT_OFF);
digitalWrite(digit3, DIGIT_OFF);
digitalWrite(digit4, DIGIT_OFF);
digitalWrite(segDP, SEGMENT_OFF);
}
}
// alarm off
void displayNumber33() {
for(int digit = 4 ; digit > 0 ; digit--) {
//Turn on a digit for a short amount of time
switch(digit) {
case 1:
digitalWrite(digit1, DIGIT_ON);
lightNumber(15); // A letter
digitalWrite(segDP, SEGMENT_OFF);
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
case 2:
digitalWrite(digit2, DIGIT_ON);
lightNumber(14); // L letter
digitalWrite(segDP, SEGMENT_ON);
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
case 3:
digitalWrite(digit3, DIGIT_ON);
lightNumber(18); // o letter
digitalWrite(segDP, SEGMENT_OFF);
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
case 4:
digitalWrite(digit4, DIGIT_ON);
lightNumber(16); // F letter
digitalWrite(segDP, SEGMENT_OFF);
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
}
//Turn off all segments
lightNumber(10);
Line = maxbright - DISPLAY_BRIGHTNESS;
delayMicroseconds(Line);
//Turn off all digits
digitalWrite(digit1, DIGIT_OFF);
digitalWrite(digit2, DIGIT_OFF);
digitalWrite(digit3, DIGIT_OFF);
digitalWrite(digit4, DIGIT_OFF);
digitalWrite(segDP, SEGMENT_OFF);
}
}
// year adjust
void displayNumber41(int toDisplay) {
for(int digit = 4 ; digit > 0 ; digit--) {
//Turn on a digit for a short amount of time
switch(digit) {
case 1:
digitalWrite(digit1, DIGIT_ON);
lightNumber(19); // Y letter
digitalWrite(segDP, SEGMENT_OFF);
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
case 2:
digitalWrite(digit2, DIGIT_ON);
lightNumber(20); // r letter
digitalWrite(segDP, SEGMENT_ON);
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
case 3:
digitalWrite(digit3, DIGIT_ON);
lightNumber(toDisplay % 10);
toDisplay /= 10;
digitalWrite(segDP, SEGMENT_OFF);
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
case 4:
digitalWrite(digit4, DIGIT_ON);
lightNumber(toDisplay % 10);
toDisplay /= 10;
digitalWrite(segDP, SEGMENT_OFF);
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
}
//Turn off all segments
lightNumber(10);
Line = maxbright - DISPLAY_BRIGHTNESS;
delayMicroseconds(Line);
//Turn off all digits
digitalWrite(digit1, DIGIT_OFF);
digitalWrite(digit2, DIGIT_OFF);
digitalWrite(digit3, DIGIT_OFF);
digitalWrite(digit4, DIGIT_OFF);
digitalWrite(segDP, SEGMENT_OFF);
}
}
// month adjust
void displayNumber42(int toDisplay) {
for(int digit = 4 ; digit > 0 ; digit--) {
//Turn on a digit for a short amount of time
switch(digit) {
case 1:
digitalWrite(digit1, DIGIT_ON);
lightNumber(13); // H letter (instead M)
digitalWrite(segDP, SEGMENT_OFF);
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
case 2:
digitalWrite(digit2, DIGIT_ON);
lightNumber(18); // o letter
digitalWrite(segDP, SEGMENT_ON);
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
case 3:
digitalWrite(digit3, DIGIT_ON);
lightNumber(toDisplay % 10);
toDisplay /= 10;
digitalWrite(segDP, SEGMENT_OFF);
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
case 4:
digitalWrite(digit4, DIGIT_ON);
lightNumber(toDisplay % 10);
toDisplay /= 10;
digitalWrite(segDP, SEGMENT_OFF);
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
}
//Turn off all segments
lightNumber(10);
Line = maxbright - DISPLAY_BRIGHTNESS;
delayMicroseconds(Line);
//Turn off all digits
digitalWrite(digit1, DIGIT_OFF);
digitalWrite(digit2, DIGIT_OFF);
digitalWrite(digit3, DIGIT_OFF);
digitalWrite(digit4, DIGIT_OFF);
digitalWrite(segDP, SEGMENT_OFF);
}
}
// day adjust
void displayNumber43(int toDisplay) {
for(int digit = 4 ; digit > 0 ; digit--) {
//Turn on a digit for a short amount of time
switch(digit) {
case 1:
digitalWrite(digit1, DIGIT_ON);
lightNumber(21); // d letter
digitalWrite(segDP, SEGMENT_OFF);
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
case 2:
digitalWrite(digit2, DIGIT_ON);
lightNumber(19); // Y letter
digitalWrite(segDP, SEGMENT_ON);
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
case 3:
digitalWrite(digit3, DIGIT_ON);
lightNumber(toDisplay % 10);
toDisplay /= 10;
digitalWrite(segDP, SEGMENT_OFF);
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
case 4:
digitalWrite(digit4, DIGIT_ON);
lightNumber(toDisplay % 10);
toDisplay /= 10;
digitalWrite(segDP, SEGMENT_OFF);
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
}
//Turn off all segments
lightNumber(10);
Line = maxbright - DISPLAY_BRIGHTNESS;
delayMicroseconds(Line);
//Turn off all digits
digitalWrite(digit1, DIGIT_OFF);
digitalWrite(digit2, DIGIT_OFF);
digitalWrite(digit3, DIGIT_OFF);
digitalWrite(digit4, DIGIT_OFF);
digitalWrite(segDP, SEGMENT_OFF);
}
}
13>
Jangan Lupa Memasukkan Library RTClib.h
PCB Eagle: Disini
No comments
Post a Comment