Escolar Documentos
Profissional Documentos
Cultura Documentos
#define DISPLAY_COLUMN_COUNT 2
#define DISPLAY_ROW_COUNT 1
#define PIXELS_PER_COLUMN 32
#define PIXELS_PER_ROW 16
int cacah;
void AturWaktuRTC();
void (*restart)(void) = 0x00;
void print2digits(int number);
/*--------------------------------------------------------------------------------------
Interrupt handler for Timer1 (TimerOne) driven DMD refresh scanning, this gets
called at the period set in Timer1.initialize();
-------------------------------------------------------------------------------------- */
void ScanDMD()
{
dmd.scanDisplayBySPI();
}
/*--------------------------------------------------------------------------------------
Show clock numerals on the screen from a 4 digit time value, and select whether the
flashing colon is on or off
--------------------------------------------------------------------------------------*/
void DisplayHour(unsigned char Hour)
{
dmd.drawChar( 34, 2, ' ', GRAPHICS_NORMAL );
dmd.drawChar( 34, 2, '0' + (Hour / 10), GRAPHICS_NORMAL );
dmd.drawChar( 40, 2, ' ', GRAPHICS_NORMAL );
dmd.drawChar( 40, 2, '0' + (Hour % 10), GRAPHICS_NORMAL );
}
memset(DayName, 0, 7);
memset(MonthName, 0, 10);
strcpy_P(DayName, namaHari[DayOfWeek - 1]);
strcpy_P(MonthName, namaBulan[Month - 1]);
char lineBuff[20];
ShowMarquee(lineBuff,false);
}
void ShowDateTime(unsigned char Day,
unsigned char Date,
unsigned char Month,
unsigned int Year,
unsigned char Hour,
unsigned char Minute,
bool bColonOn)
{
dmd.clearScreen(true);
// units
/*--------------------------------------------------------------------------------------
setup
Called by the Arduino architecture before the main loop begins
-------------------------------------------------------------------------------------- */
void setup(void)
{
bool aturRTC = false;
//initialize TimerOne's interrupt/CPU usage used to scan and refresh the display
Timer1.initialize( 1000 ); //period in microseconds to call ScanDMD. Anything longer than 5000
(5ms) and you can see flicker.
Timer1.attachInterrupt( ScanDMD ); //attach the Timer1 interrupt to ScanDMD which goes to
dmd.scanDisplayBySPI()
/*--------------------------------------------------------------------------------------
loop
Arduino architecture main loop
--------------------------------------------------------------------------------------*/
void loop(void)
{
int i;
unsigned char DetikSekarang, MenitSekarang, JamSekarang,
HariSekarang, TanggalSekarang, BulanSekarang;
unsigned int TahunSekarang;
Serial.readBytes(buff, 4);
// Jika input serial dari pengguna adalah ATUR, maka lakukan prosedur
// pengaturan waktru RTC
if ((buff[0] == 'A') && (buff[1] == 'T') && (buff[2] == 'U') && (buff[3] == 'R')) {
AturWaktuRTC();
}
}
if (!RTC.read(wkt)) {
Serial.println("RTC error!");
delay(500);
restart();
}
DetikSekarang = wkt.Second;
MenitSekarang = wkt.Minute;
JamSekarang = wkt.Hour;
dmd.selectFont(DejaVuSansBold9);
DisplayMinute(MenitSekarang);
dmd.selectFont(DejaVuSansBold9);
DisplayHour(JamSekarang);
if ( DetikSekarang % 2 == 0 )
dmd.drawChar( 46, 2, ':', GRAPHICS_OR); // clock colon overlay on
else
dmd.drawChar( 46, 2, ':', GRAPHICS_NOR); // clock colon overlay off
HariSekarang = wkt.Wday;
TanggalSekarang = wkt.Day;
BulanSekarang = wkt.Month;
TahunSekarang = wkt.Year;
cacah++;
delay(200);
void AturWaktuRTC()
{
int input;
char buff[10];
tmElements_t wkt;
}
else {
Serial.println(F("FAILED"));
}
Serial.println(F("-------------------------"));
}
if (LeftToRight) {
dmd.drawMarquee(Text,strlen(Text),
-(dmd.fontWidth()*(strlen(Text)-1)),3);
}
else
dmd.drawMarquee(Text,strlen(Text),
(PIXELS_PER_COLUMN*DISPLAY_COLUMN_COUNT)-1,3);
while(!ret){
if ((timer+100) < millis()) {
if (LeftToRight)
ret=dmd.stepMarquee(1,0); // Geser 1 karakter ke kiri
else
ret=dmd.stepMarquee(-1,0); // Geser 1 karakter ke kanan
timer=millis();
}
}
}