Jumat, 02 September 2016

Digital Clock with Display Segment TM1637 ( 4-digit Display Seven Segment )


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);}

}

Video Review :

3 komentar:

  1. 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?

    BalasHapus
  2. Gan, bisa dibuatin contoh yang minimalis yang menunjukkan pemakaian TM1637 saja? Saya coba sederhanakan sendiri, jadinya malah ga ada tulisan yang nongol.

    BalasHapus
  3. Trims gan,sangat membantu kodingannya :D

    BalasHapus

Copyright © 2014 Belajar Arduino | Designed With By Blogger Templates | Distributed By Gooyaabi Templates
Scroll To Top