selamat berjumpa kembali di tutorial microcontroler dan robotika.
Pada kesempatan kali ini kita akan memberikan tutorial untuk jam digital 7 segmen menggunakan ic 74HC595 dengan program arduino...
Sebenarnya bisa juga sih tidak mempergunakan ic 74HC595 untuk 7 segmennya, tapi berhubung di google sangat jarang sekali postingan mempergunakan ic 74HC595 untuk shifregiter 7 segmen an demi menghemat pin arduino makanya saya share ne cara bikin jam digital menggunakan 7 segmen engan ic shifregiter 74HC595.
Ok cuy dari pada basa-basinya terlalu panjang mari kita lanjutkan tutorialnya
1. siapkan bahan yang akan digunakan seperti di bawah ini :
- Arduino
- 7 segment
- IC 74HC595
- RTC ds1307
- dan resistor
Ok lanjutkan listing programnya,
Sebelumnya persiapkan dulu library untuk ds1307 nya ya, kalau ngk punya coment aja dibawah ntr saya kirim librarynya.
ne programnya cuy:
#include <Wire.h>
#include "RTClib.h"
const int Data = 10;
const int Latch = 11;
const int Clock = 12;
const int ledPin = 13;
RTC_DS1307 RTC;
byte g_digits [10];
int g_numberToDisplay = 0;
const int g_registers = 4;
byte g_registerArray [g_registers];
// Begin setup() functions //
void setup()
{
Wire.begin();
RTC.begin();
pinMode (Latch, OUTPUT);
pinMode (Clock, OUTPUT);
pinMode (Data, OUTPUT);
pinMode (ledPin, OUTPUT);
Serial.begin (9600);
g_digits [0] = 0b01000000;//0
g_digits [1] = 0b01111001;//1
g_digits [2] = 0b00100100;//2
g_digits [3] = 0b00110000;//3
g_digits [4] = 0b00011001;//4
g_digits [5] = 0b00010010;//5
g_digits [6] = 0b00000010;//6
g_digits [7] = 0b01111000;//7
g_digits [8] = 0b00000000;//8
g_digits [9] = 0b00010000;//9
for (int i=0;i<5;i++) {
g_registerArray [0] = g_digits [8];
g_registerArray [1] = g_digits [8];
g_registerArray [2] = g_digits [8];
g_registerArray [3] = g_digits [8];
sendSerialData (g_registers, g_registerArray);
delay(300);
}
}
void sendSerialData (byte registerCount, byte *pValueArray) {
digitalWrite (Latch, LOW);
for (byte reg = registerCount; reg > 0; reg--)
{
byte value = pValueArray [reg - 1];
for (byte bitMask = 128; bitMask > 0; bitMask >>= 1)
{
digitalWrite (Clock, LOW);
digitalWrite (Data, value & bitMask ? HIGH : LOW);
digitalWrite (Clock, HIGH);
}
}
digitalWrite (Latch, HIGH);
}
void loop()
{
int hour,minute,sec,disp = 0;
DateTime now = RTC.now();
hour = now.hour();
minute = now.minute();
sec = now.second();
Serial.print(hour);
Serial.print(':');
Serial.print(minute);
Serial.print(':');
Serial.print(sec);
Serial.println();
disp = (hour * 100) + minute;
g_numberToDisplay = disp;
if (g_numberToDisplay < 10)
{
g_registerArray [0] = g_digits [0];
g_registerArray [1] = g_digits [0];
g_registerArray [2] = g_digits [0];
g_registerArray [3] = g_digits [g_numberToDisplay];
}
else if (g_numberToDisplay < 100)
{
g_registerArray [0] = g_digits [0];
g_registerArray [1] = g_digits [0];
g_registerArray [2] = g_digits [g_numberToDisplay / 10];
g_registerArray [3] = g_digits [g_numberToDisplay % 10];
}
else if (g_numberToDisplay < 1000)
{
g_registerArray [0] = g_digits [0];
g_registerArray [1] = g_digits [g_numberToDisplay / 100];
g_registerArray [2] = g_digits [(g_numberToDisplay % 100) / 10];
g_registerArray [3] = g_digits [g_numberToDisplay % 10];
}
else
{
g_registerArray [0] = g_digits [g_numberToDisplay / 1000];
g_registerArray [1] = g_digits [(g_numberToDisplay % 1000) / 100];
g_registerArray [2] = g_digits [(g_numberToDisplay % 100) / 10];
g_registerArray [3] = g_digits [g_numberToDisplay % 10];
}
sendSerialData (g_registers, g_registerArray);
digitalWrite(ledPin,HIGH);
delay(500);
digitalWrite(ledPin,LOW);
delay(500);
}
kalau rangkaian dan programnya dibikn seperti yang diatas udah pasti jalan jam cuy, atau kalau ada yang bermasalah kalau agan mempraktekannya silahkan coment aja nanti biar saya bantu OK.
0 komentar:
Posting Komentar