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 // 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// 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 :
reff : http://www.belajarduino.com/2016/09/digital-clock-with-display-segment.html
0 comments:
Post a Comment