Jam Arduino dengan Multifunction Shield
Maret 2022

Dengan menggunakan Arduino Uno dan MFS saja kita dapat mengembangkan sebuah jam digital yang praktid bahkan tidak memerlukan RTC. Jam digital ini murni menmanfaatkan clock internal bawaan Arduino dan menampilkan jam pada LED segment yang sudah tersedian di MFS. Untuk mengatur jam dan menit serta menentukan alarm kita dapat menggunakan tombol bawaan dari MFS. Jam ini dapat didayai dari port USB (baik menggunakan powerbank maupun charger). Bisa juga menggunakan batre 9v.
Berikut ini sketch dari program arduino untuk menampilkan jam digital.
#include <TimerOne.h>
#include <Wire.h>
#include <MultiFuncShield.h>
int hours=0;
int minutes=0;
int seconds=0;
int ahour=0;
int aminute=0;
bool setMode=false;
void setup() {
// put your setup code here, to run once:
Timer1.initialize();
MFS.initialize(&Timer1); // initialize multi-function shield library
Serial.begin(9600);
//MFS.write("Hi.");
// delay(2000);
}
int counter=0;
byte ended = false;
String sTime;
int iTime;
int aTime;
void loop() {
static unsigned long mscount = millis();
int pot=analogRead(POT_PIN);
byte btn = MFS.getButton();
if ((btn == BUTTON_1_PRESSED) && (setMode==false))
{
hours++;
MFS.beep(5, // beep for 50 milliseconds
1, // silent for 50 milliseconds
1, // repeat above cycle 4 times
1, // loop 3 times
0 // wait 500 milliseconds between loop
);
}
if ((btn == BUTTON_1_PRESSED) && (setMode==true))
{
ahour++;
if (ahour>=24) ahour=0;
MFS.beep(5,1,1,1,0);
}
if ((btn == BUTTON_2_PRESSED) && (setMode==false))
{
minutes++;seconds=0;
MFS.beep(5,1,1,1,0);
}
if ((btn == BUTTON_2_PRESSED) && (setMode==true))
{
aminute++;
if (aminute>=60) aminute=0;
MFS.beep(5,1,1,1,0);
}
if (btn == BUTTON_3_PRESSED)
{
setMode=!setMode;
MFS.beep(1,10,2,1,20);
}
if ((hours==ahour)&&(minutes==aminute)&& (seconds<1) &&((ahour!=0) && (aminute!=0)) ) {MFS.beep(1,20,2,19,30);}//19 kali
//if ((millis() - mscount > 500)&& (millis() - mscount < 505)) {MFS.write(" . ");}
if (millis() - mscount >= 994) {
Serial.print(twoDigit(hours));
Serial.print(":");
Serial.print(twoDigit(minutes));
Serial.print(":");
Serial.println(twoDigit(seconds));
Serial.print("Pot value:");
Serial.println(pot);
Serial.println(setMode);
sTime=String(hours)+String(minutes);
iTime=(hours*100)+minutes ;
aTime=(ahour*100)+aminute ;
float f=(float)iTime/100;
float a=(float)aTime/100;
if (!(setMode))
{
MFS.writeLeds(LED_1 | LED_2| LED_3| LED_4, ON);
MFS.write(" -- ");delay(20);
MFS.write(f,2);
MFS.writeLeds(LED_ALL, OFF);
}
else
//setup mode
{
MFS.writeLeds(LED_ALL, ON);
MFS.write(a,2);
//MFS.write((float)aTime/100);
}
mscount += 994;
seconds ++;
}
if (seconds == 60) {
seconds = 0;
minutes ++;
if ((minutes%15)==0) {MFS.beep(1,1,1,1,0); Serial.println(seconds%15);}
}
if (minutes >= 60) {
seconds=0;
minutes = 0;
hours ++;
MFS.beep(2,1,1,1,0);
}
if (hours>= 24) {
hours = 0;
minutes =0;
}
}
String twoDigit(byte num){
if( num > 9 ){
return String(num);
} else {
String tmp = "0";
tmp.concat(num);
return tmp;
}
}
