Membuat Jam Digital dengan Display 4 Digit Segment TM1637
Library silahkan download disini.
Sourche Code silahkan download disini.
Tutorial menyusul....
Thanks for visit...
Supported by www.tokopedia.com/rajacell
Code here :
//▒▒▒▒▒▒▐███████▌Coding ini dibuat Oleh Dani-Rajacell
//▒▒▒▒▒▒▐░▀░▀░▀░▌support by www.tokopedia.com/rajacell
//▒▒▒▒▒▒▐▄▄▄▄▄▄▄▌untuk www.belajarduino.com
//▄▀▀▀█▒▐░▀▀▄▀▀░▌▒█▀▀▀▄ Mohon tidak menghapus codeMark ini sebagai
//▌▌▌▌▐▒▄▌░▄▄▄░▐▄▒▌▐▐▐▐ bentuk apresiasi penggunaan coding ini secara GRATIS
// Apabila ada bugs atau kesulitan dalam penggunaan coding ini bisa hubungi creator melalui akun FB
// https://www.facebook.com/dani.ardianto.98 atau via comment posting artikel ini www.belajarduino.com
// Anda bisa melakukan donasi untuk free coding ini dengan membeli module nya di www.tokopedia.com/rajacell
#include "SevenSegmentTM1637.h" // Memanggil library 7Segment TM1637
#include <Button.h> // Memanggil Library Button
#define BUTTON_PIN 13 // Button pada pin D13 (low active mode)
#define PULLUP false // MengNonaktifkan internal pullup resistor
#define INVERT false // Invert false untuk High trigger
#define DEBOUNCE_MS 20 // setting millis terpendek untuk acuan trigger button
#define LONG_PRESS 1000 // tempo untuk dianggap sebagai HOLD PRESS
const byte PIN_CLK = 4; // define CLK pin -> Pin CLK 7segment ke pin D4
const byte PIN_DIO = 5; // define DIO pin -> Pin DIO 7segment ke pin D4
SevenSegmentTM1637 display(PIN_CLK, PIN_DIO);
Button myBtn(BUTTON_PIN, PULLUP, INVERT, DEBOUNCE_MS);
//Buffer
uint32_t targetTime = 0;
uint8_t conv2d(const char* p) {
uint8_t v = 0;
if ('0' <= *p && *p <= '9')
v = *p - '0';
return 10 * v + *++p - '0';
}
//Mengambil waktu jam dari waktu program diupload (dari hex code compiler) sebagai pengganti RTC
uint8_t hh = conv2d(__TIME__), mm = conv2d(__TIME__ + 3), ss = conv2d(__TIME__ + 6); // mengambil data waktu dari jam Compile-Upload
uint8_t dd = conv2d(__DATE__ + 4), bb = conv2d(__DATE__), y1 = conv2d(__DATE__ + 7), y2 = conv2d(__DATE__ + 9);; // mengambil data waktu dari jam Compile-Upload
uint8_t viewMode = 0, setupMode = 0;
//Switch Mode untuk merubah fungsi switch case pada setting button
enum {VIEW,TO_SETUPhh, SETUPhh ,TO_SETUPmm, SETUPmm, TO_SETUPdd, SETUPdd, TO_SETUPbb, SETUPbb, TO_SETUPyy, SETUPyy, TO_VIEW};
uint8_t STATE;
//▒▒▒▒▒▒▐███████▌Coding ini dibuat Oleh Dani-Rajacell
//▒▒▒▒▒▒▐░▀░▀░▀░▌support by www.tokopedia.com/rajacell
//▒▒▒▒▒▒▐▄▄▄▄▄▄▄▌untuk www.belajarduino.com
//▄▀▀▀█▒▐░▀▀▄▀▀░▌▒█▀▀▀▄ Mohon tidak menghapus codeMark ini sebagai
//▌▌▌▌▐▒▄▌░▄▄▄░▐▄▒▌▐▐▐▐ bentuk apresiasi penggunaan coding ini secara GRATIS
// Apabila ada bugs atau kesulitan dalam penggunaan coding ini bisa hubungi creator melalui akun FB
// https://www.facebook.com/dani.ardianto.98 atau via comment posting artikel ini www.belajarduino.com
// Anda bisa melakukan donasi untuk free coding ini dengan membeli module nya di www.tokopedia.com/rajacell
void setup() {
// put your setup code here, to run once:
//Serial.begin(9600);
display.begin(); // initializes 7segment display
display.setBacklight(100); // set the brightness to 100 %
display.print("DANI"); // display INIT on the display
delay(1000);
//Convert String nama hari menjadi bilangan uint8_t
switch (__DATE__[0]) {
case 'J': bb = __DATE__[1] == 'a' ? 1 : bb = __DATE__[2] == 'n' ? 6 : 7; break;
case 'F': bb = 2; break;
case 'A': bb = __DATE__[2] == 'r' ? 4 : 8; break;
case 'M': bb = __DATE__[2] == 'r' ? 3 : 5; break;
case 'S': bb = 9; break;
case 'O': bb = 10; break;
case 'N': bb = 11; break;
case 'D': bb = 12; break;}
}
//▒▒▒▒▒▒▐███████▌Coding ini dibuat Oleh Dani-Rajacell
//▒▒▒▒▒▒▐░▀░▀░▀░▌support by www.tokopedia.com/rajacell
//▒▒▒▒▒▒▐▄▄▄▄▄▄▄▌untuk www.belajarduino.com
//▄▀▀▀█▒▐░▀▀▄▀▀░▌▒█▀▀▀▄ Mohon tidak menghapus codeMark ini sebagai
//▌▌▌▌▐▒▄▌░▄▄▄░▐▄▒▌▐▐▐▐ bentuk apresiasi penggunaan coding ini secara GRATIS
// Apabila ada bugs atau kesulitan dalam penggunaan coding ini bisa hubungi creator melalui akun FB
// https://www.facebook.com/dani.ardianto.98 atau via comment posting artikel ini www.belajarduino.com
// Anda bisa melakukan donasi untuk free coding ini dengan membeli module nya di www.tokopedia.com/rajacell
void loop() {
// put your main code here, to run repeatedly:
if (targetTime < millis()) {
targetTime = millis() + 1000;
ss++; // Advance second
if (ss == 60) {
ss = 0;
mm++; // Advance minute
if (mm > 59) {
mm = 0;
hh++; // Advance hour
if (hh > 23) {
hh = 0;
}
}
}
}
myBtn.read(); //Read the button
if (viewMode == 4) { viewMode=0;}
if (setupMode == 6) { setupMode=0;}
switch (STATE) {
//This state watches for short and long presses, switches the LED for
//short presses, and moves to the TO_BLINK state for long presses.
case VIEW:
if (myBtn.wasReleased()) {
viewMode = viewMode+1;
display.clear();}
else if (myBtn.pressedFor(LONG_PRESS)){
STATE = TO_SETUPhh;
display.clear();
display.print("SET-");
delay(1000);
display.clear();}
break;
case TO_SETUPhh:
if (myBtn.wasReleased()){
display.clear();
STATE = SETUPhh; }
break;
case SETUPhh:
if (myBtn.pressedFor(LONG_PRESS)) {
STATE = TO_SETUPmm;
display.clear();
}
else
if (myBtn.wasReleased()) {
setupMode=1;
hh=hh+1; if(hh==24)hh=0;}
break;
case TO_SETUPmm:
if (myBtn.wasReleased()){
display.clear();
STATE = SETUPmm; }
break;
case SETUPmm:
if (myBtn.pressedFor(LONG_PRESS)) {
STATE = TO_SETUPdd;
display.clear();
}
else
if (myBtn.wasReleased()) {
setupMode=2;
mm=mm+1; if(mm==60)mm=0;}
break;
case TO_SETUPdd:
if (myBtn.wasReleased()){
display.clear();
STATE = SETUPdd; }
break;
case SETUPdd:
if (myBtn.pressedFor(LONG_PRESS)) {
STATE = TO_SETUPbb;
display.clear();
}
else
if (myBtn.wasReleased()) {
setupMode=3;
dd=dd+1; if(dd==32)dd=0;}
break;
case TO_SETUPbb:
if (myBtn.wasReleased()){
display.clear();
STATE = SETUPbb; }
break;
case SETUPbb:
if (myBtn.pressedFor(LONG_PRESS)) {
STATE = TO_SETUPyy;
display.clear();
}
else
if (myBtn.wasReleased()) {
setupMode=4;
bb=bb+1; if(bb==13)bb=0;}
break;
case TO_SETUPyy:
if (myBtn.wasReleased()){
display.clear();
display.clear();
STATE = SETUPyy; }
break;
case SETUPyy:
if (myBtn.pressedFor(LONG_PRESS)) {
STATE = TO_VIEW;
display.clear();
}
else
if (myBtn.wasReleased()) {
setupMode=5;
y2=y2+1; if(y2==31)y2=10;}
break;
case TO_VIEW:
if (myBtn.wasReleased()){
STATE = VIEW;
setupMode = 0;
display.clear();
display.print("DONE");
delay(1000);
display.clear();}
break;
}
//▒▒▒▒▒▒▐███████▌Coding ini dibuat Oleh Dani-Rajacell
//▒▒▒▒▒▒▐░▀░▀░▀░▌support by www.tokopedia.com/rajacell
//▒▒▒▒▒▒▐▄▄▄▄▄▄▄▌untuk www.belajarduino.com
//▄▀▀▀█▒▐░▀▀▄▀▀░▌▒█▀▀▀▄ Mohon tidak menghapus codeMark ini sebagai
//▌▌▌▌▐▒▄▌░▄▄▄░▐▄▒▌▐▐▐▐ bentuk apresiasi penggunaan coding ini secara GRATIS
// Apabila ada bugs atau kesulitan dalam penggunaan coding ini bisa hubungi creator melalui akun FB
// https://www.facebook.com/dani.ardianto.98 atau via comment posting artikel ini www.belajarduino.com
// Anda bisa melakukan donasi untuk free coding ini dengan membeli module nya di www.tokopedia.com/rajacell
if (viewMode == 0 && setupMode == 0 ){
if(hh<10){
display.setCursor(0,0); display.print("0");
display.setCursor(0,1); display.print(hh);}
if(hh>9){
display.setCursor(0,0); display.print(hh);}
if(mm<10){
display.setCursor(0,2); display.print("0");
display.setCursor(0,3); display.print(mm);}
if(mm>9){
display.setCursor(0,2); display.print(mm);}
if(ss%2==0) {display.setColonOn(1);}
else{display.setColonOn(0);}
}
if (viewMode == 1 && setupMode == 0 ){
if(ss<10){
display.setCursor(0,2); display.print("0");
display.setCursor(0,3); display.print(ss);}
if(ss>9){
display.setCursor(0,2); display.print(ss);}
display.setColonOn(1);
}
if (viewMode == 2 && setupMode == 0 ){
if(dd<10){
display.setCursor(0,1); display.print(dd);}
if(dd>9){
display.setCursor(0,0); display.print(dd);}
if(bb<10){
display.setCursor(0,3); display.print(bb);}
if(bb>9){
display.setCursor(0,2); display.print(bb);}
display.setColonOn(0);
}
if (viewMode == 3 && setupMode == 0 ){
display.setCursor(0,0);
display.print(y1);
display.setCursor(0,2);
display.print(y2);
display.setColonOn(0);}
if (setupMode==1){
if(hh>9){
display.setCursor(0,0); display.print(hh); }
if(hh<10){
display.setCursor(0,0); display.print("0");
display.setCursor(0,1); display.print(hh); }
delay(100);
display.setCursor(0,0);
display.print(" ");
delay(100);}
if (setupMode==2){
if(mm>9){
display.setCursor(0,2); display.print(mm);}
if(mm<10){
display.setCursor(0,2); display.print("0");
display.setCursor(0,3); display.print(mm); }
display.setCursor(0,0);
display.print(hh);
delay(100);
display.setCursor(0,2);
display.print(" ");
delay(100);}
if (setupMode==3){
display.setColonOn (0);
display.setCursor(0,0);
display.print(dd);
display.setCursor(0,2);
display.print(bb);
delay(100);
display.setCursor(0,0);
display.print(" ");
delay(100);}
if (setupMode==4){
display.setColonOn (0);
display.setCursor(0,2);
display.print(bb);
display.setCursor(0,0);
display.print(dd);
delay(100);
display.setCursor(0,2);
display.print(" ");
delay(100);}
if (setupMode==5){
display.setCursor(0,0);
display.print(y1);
display.setCursor(0,2);
display.print(y2);
delay(100);
display.setCursor(0,0);
display.print(" ");
delay(100);}
}
//▒▒▒▒▒▒▐███████▌Coding ini dibuat Oleh Dani-Rajacell //▒▒▒▒▒▒▐░▀░▀░▀░▌support by www.tokopedia.com/rajacell //▒▒▒▒▒▒▐▄▄▄▄▄▄▄▌untuk www.belajarduino.com //▄▀▀▀█▒▐░▀▀▄▀▀░▌▒█▀▀▀▄ Mohon tidak menghapus codeMark ini sebagai //▌▌▌▌▐▒▄▌░▄▄▄░▐▄▒▌▐▐▐▐ bentuk apresiasi penggunaan coding ini secara GRATIS // Apabila ada bugs atau kesulitan dalam penggunaan coding ini bisa hubungi creator melalui akun FB // https://www.facebook.com/dani.ardianto.98 atau via comment posting artikel ini www.belajarduino.com // Anda bisa melakukan donasi untuk free coding ini dengan membeli module nya di www.tokopedia.com/rajacell #include "SevenSegmentTM1637.h" // Memanggil library 7Segment TM1637 #include <Button.h> // Memanggil Library Button #define BUTTON_PIN 13 // Button pada pin D13 (low active mode) #define PULLUP false // MengNonaktifkan internal pullup resistor #define INVERT false // Invert false untuk High trigger #define DEBOUNCE_MS 20 // setting millis terpendek untuk acuan trigger button #define LONG_PRESS 1000 // tempo untuk dianggap sebagai HOLD PRESS const byte PIN_CLK = 4; // define CLK pin -> Pin CLK 7segment ke pin D4 const byte PIN_DIO = 5; // define DIO pin -> Pin DIO 7segment ke pin D4 SevenSegmentTM1637 display(PIN_CLK, PIN_DIO); Button myBtn(BUTTON_PIN, PULLUP, INVERT, DEBOUNCE_MS); //Buffer uint32_t targetTime = 0; uint8_t conv2d(const char* p) { uint8_t v = 0; if ('0' <= *p && *p <= '9') v = *p - '0'; return 10 * v + *++p - '0'; } //Mengambil waktu jam dari waktu program diupload (dari hex code compiler) sebagai pengganti RTC uint8_t hh = conv2d(__TIME__), mm = conv2d(__TIME__ + 3), ss = conv2d(__TIME__ + 6); // mengambil data waktu dari jam Compile-Upload uint8_t dd = conv2d(__DATE__ + 4), bb = conv2d(__DATE__), y1 = conv2d(__DATE__ + 7), y2 = conv2d(__DATE__ + 9);; // mengambil data waktu dari jam Compile-Upload uint8_t viewMode = 0, setupMode = 0; //Switch Mode untuk merubah fungsi switch case pada setting button enum {VIEW,TO_SETUPhh, SETUPhh ,TO_SETUPmm, SETUPmm, TO_SETUPdd, SETUPdd, TO_SETUPbb, SETUPbb, TO_SETUPyy, SETUPyy, TO_VIEW}; uint8_t STATE; //▒▒▒▒▒▒▐███████▌Coding ini dibuat Oleh Dani-Rajacell //▒▒▒▒▒▒▐░▀░▀░▀░▌support by www.tokopedia.com/rajacell //▒▒▒▒▒▒▐▄▄▄▄▄▄▄▌untuk www.belajarduino.com //▄▀▀▀█▒▐░▀▀▄▀▀░▌▒█▀▀▀▄ Mohon tidak menghapus codeMark ini sebagai //▌▌▌▌▐▒▄▌░▄▄▄░▐▄▒▌▐▐▐▐ bentuk apresiasi penggunaan coding ini secara GRATIS // Apabila ada bugs atau kesulitan dalam penggunaan coding ini bisa hubungi creator melalui akun FB // https://www.facebook.com/dani.ardianto.98 atau via comment posting artikel ini www.belajarduino.com // Anda bisa melakukan donasi untuk free coding ini dengan membeli module nya di www.tokopedia.com/rajacell void setup() { // put your setup code here, to run once: //Serial.begin(9600); display.begin(); // initializes 7segment display display.setBacklight(100); // set the brightness to 100 % display.print("DANI"); // display INIT on the display delay(1000); //Convert String nama hari menjadi bilangan uint8_t switch (__DATE__[0]) { case 'J': bb = __DATE__[1] == 'a' ? 1 : bb = __DATE__[2] == 'n' ? 6 : 7; break; case 'F': bb = 2; break; case 'A': bb = __DATE__[2] == 'r' ? 4 : 8; break; case 'M': bb = __DATE__[2] == 'r' ? 3 : 5; break; case 'S': bb = 9; break; case 'O': bb = 10; break; case 'N': bb = 11; break; case 'D': bb = 12; break;} } //▒▒▒▒▒▒▐███████▌Coding ini dibuat Oleh Dani-Rajacell //▒▒▒▒▒▒▐░▀░▀░▀░▌support by www.tokopedia.com/rajacell //▒▒▒▒▒▒▐▄▄▄▄▄▄▄▌untuk www.belajarduino.com //▄▀▀▀█▒▐░▀▀▄▀▀░▌▒█▀▀▀▄ Mohon tidak menghapus codeMark ini sebagai //▌▌▌▌▐▒▄▌░▄▄▄░▐▄▒▌▐▐▐▐ bentuk apresiasi penggunaan coding ini secara GRATIS // Apabila ada bugs atau kesulitan dalam penggunaan coding ini bisa hubungi creator melalui akun FB // https://www.facebook.com/dani.ardianto.98 atau via comment posting artikel ini www.belajarduino.com // Anda bisa melakukan donasi untuk free coding ini dengan membeli module nya di www.tokopedia.com/rajacell void loop() { // put your main code here, to run repeatedly: if (targetTime < millis()) { targetTime = millis() + 1000; ss++; // Advance second if (ss == 60) { ss = 0; mm++; // Advance minute if (mm > 59) { mm = 0; hh++; // Advance hour if (hh > 23) { hh = 0; } } } } myBtn.read(); //Read the button if (viewMode == 4) { viewMode=0;} if (setupMode == 6) { setupMode=0;} switch (STATE) { //This state watches for short and long presses, switches the LED for //short presses, and moves to the TO_BLINK state for long presses. case VIEW: if (myBtn.wasReleased()) { viewMode = viewMode+1; display.clear();} else if (myBtn.pressedFor(LONG_PRESS)){ STATE = TO_SETUPhh; display.clear(); display.print("SET-"); delay(1000); display.clear();} break; case TO_SETUPhh: if (myBtn.wasReleased()){ display.clear(); STATE = SETUPhh; } break; case SETUPhh: if (myBtn.pressedFor(LONG_PRESS)) { STATE = TO_SETUPmm; display.clear(); } else if (myBtn.wasReleased()) { setupMode=1; hh=hh+1; if(hh==24)hh=0;} break; case TO_SETUPmm: if (myBtn.wasReleased()){ display.clear(); STATE = SETUPmm; } break; case SETUPmm: if (myBtn.pressedFor(LONG_PRESS)) { STATE = TO_SETUPdd; display.clear(); } else if (myBtn.wasReleased()) { setupMode=2; mm=mm+1; if(mm==60)mm=0;} break; case TO_SETUPdd: if (myBtn.wasReleased()){ display.clear(); STATE = SETUPdd; } break; case SETUPdd: if (myBtn.pressedFor(LONG_PRESS)) { STATE = TO_SETUPbb; display.clear(); } else if (myBtn.wasReleased()) { setupMode=3; dd=dd+1; if(dd==32)dd=0;} break; case TO_SETUPbb: if (myBtn.wasReleased()){ display.clear(); STATE = SETUPbb; } break; case SETUPbb: if (myBtn.pressedFor(LONG_PRESS)) { STATE = TO_SETUPyy; display.clear(); } else if (myBtn.wasReleased()) { setupMode=4; bb=bb+1; if(bb==13)bb=0;} break; case TO_SETUPyy: if (myBtn.wasReleased()){ display.clear(); display.clear(); STATE = SETUPyy; } break; case SETUPyy: if (myBtn.pressedFor(LONG_PRESS)) { STATE = TO_VIEW; display.clear(); } else if (myBtn.wasReleased()) { setupMode=5; y2=y2+1; if(y2==31)y2=10;} break; case TO_VIEW: if (myBtn.wasReleased()){ STATE = VIEW; setupMode = 0; display.clear(); display.print("DONE"); delay(1000); display.clear();} break; } //▒▒▒▒▒▒▐███████▌Coding ini dibuat Oleh Dani-Rajacell //▒▒▒▒▒▒▐░▀░▀░▀░▌support by www.tokopedia.com/rajacell //▒▒▒▒▒▒▐▄▄▄▄▄▄▄▌untuk www.belajarduino.com //▄▀▀▀█▒▐░▀▀▄▀▀░▌▒█▀▀▀▄ Mohon tidak menghapus codeMark ini sebagai //▌▌▌▌▐▒▄▌░▄▄▄░▐▄▒▌▐▐▐▐ bentuk apresiasi penggunaan coding ini secara GRATIS // Apabila ada bugs atau kesulitan dalam penggunaan coding ini bisa hubungi creator melalui akun FB // https://www.facebook.com/dani.ardianto.98 atau via comment posting artikel ini www.belajarduino.com // Anda bisa melakukan donasi untuk free coding ini dengan membeli module nya di www.tokopedia.com/rajacell if (viewMode == 0 && setupMode == 0 ){ if(hh<10){ display.setCursor(0,0); display.print("0"); display.setCursor(0,1); display.print(hh);} if(hh>9){ display.setCursor(0,0); display.print(hh);} if(mm<10){ display.setCursor(0,2); display.print("0"); display.setCursor(0,3); display.print(mm);} if(mm>9){ display.setCursor(0,2); display.print(mm);} if(ss%2==0) {display.setColonOn(1);} else{display.setColonOn(0);} } if (viewMode == 1 && setupMode == 0 ){ if(ss<10){ display.setCursor(0,2); display.print("0"); display.setCursor(0,3); display.print(ss);} if(ss>9){ display.setCursor(0,2); display.print(ss);} display.setColonOn(1); } if (viewMode == 2 && setupMode == 0 ){ if(dd<10){ display.setCursor(0,1); display.print(dd);} if(dd>9){ display.setCursor(0,0); display.print(dd);} if(bb<10){ display.setCursor(0,3); display.print(bb);} if(bb>9){ display.setCursor(0,2); display.print(bb);} display.setColonOn(0); } if (viewMode == 3 && setupMode == 0 ){ display.setCursor(0,0); display.print(y1); display.setCursor(0,2); display.print(y2); display.setColonOn(0);} if (setupMode==1){ if(hh>9){ display.setCursor(0,0); display.print(hh); } if(hh<10){ display.setCursor(0,0); display.print("0"); display.setCursor(0,1); display.print(hh); } delay(100); display.setCursor(0,0); display.print(" "); delay(100);} if (setupMode==2){ if(mm>9){ display.setCursor(0,2); display.print(mm);} if(mm<10){ display.setCursor(0,2); display.print("0"); display.setCursor(0,3); display.print(mm); } display.setCursor(0,0); display.print(hh); delay(100); display.setCursor(0,2); display.print(" "); delay(100);} if (setupMode==3){ display.setColonOn (0); display.setCursor(0,0); display.print(dd); display.setCursor(0,2); display.print(bb); delay(100); display.setCursor(0,0); display.print(" "); delay(100);} if (setupMode==4){ display.setColonOn (0); display.setCursor(0,2); display.print(bb); display.setCursor(0,0); display.print(dd); delay(100); display.setCursor(0,2); display.print(" "); delay(100);} if (setupMode==5){ display.setCursor(0,0); display.print(y1); display.setCursor(0,2); display.print(y2); delay(100); display.setCursor(0,0); display.print(" "); delay(100);} }
mas itu kabel2 nya di hubungkan ke pin mana aja y semisal di ganti sama push button? sama kalau misal pakek arduino uno yang biasa bukan yang mega bisa gak?
BalasHapusGan, bisa dibuatin contoh yang minimalis yang menunjukkan pemakaian TM1637 saja? Saya coba sederhanakan sendiri, jadinya malah ga ada tulisan yang nongol.
BalasHapusTrims gan,sangat membantu kodingannya :D
BalasHapuscom catoda apa anoda bang
BalasHapusgan bisa ada contoh jadwal sholat menggunakan seven segment ga
BalasHapuslibrary button nya ada gk gan
BalasHapus