Dot Matrix Display(DMD) Clock

by thelonelyprogrammer in Circuits > Arduino

1800 Views, 4 Favorites, 0 Comments

Dot Matrix Display(DMD) Clock

1-4-4-key-matrix-font-b-membrane-b-font-font-b-switch-b-font-keypad.jpg
arduino.jpg
ds3231-rtc-module-india-800x800.jpg
P10-LED-Matrix-Module.jpg
q2.jpg

This project demonstrates the use of electronics and embedded systems with Clock. Dot-matrix Display or more commonly referred to as Free Running Text is often found in shops as a means of advertising their products, it is practical and flexible in its use that encourages business actors to use it as advertising advice. Now the use of Dot-matrix Display has spread, not just as advertiser media only, as well as prayer schedules, warning boards, queuing machines, etc. Here, we will give a post about how I made a clock using p10 Matrix Display and DS3231 RTC using Arduino.

Supplies

HARDWARE:

  • Arduino Uno x 1
  • Push-button (Keypad) x 4
  • RTC Module (DS3231)
  • P10 Dot-matrix Display

SOFTWARE:

  • Arduino IDE
  • DMD 2 Library / DMD Library

Before that, you need a supporting library that must be installed on Arduino IDE. To download the DMD2 library mentioned above

Connections

s1.png
s2.jpg

*Arduino -> RTC MODULE*

A4-> SDA

A5-> SCL

VCC -> 5V

GND -> GND

*Arduino -> P10 DMD*

D8-> SCK

D6-> A

D7-> B

D11 -> R

D13-> CLK

D9-> OE

Code

byte dayOfWeek=4;
byte dayOfMonth=1;#include         //SPI.h must be included as DMD is written by SPI (the IDE complains otherwise)
#include         //
#include    //
#include "Wendy3x5.h"
#include "Wire.h"
#define DS1307_I2C_ADDRESS 0x68int AlarmSetPin = 2;
int SnoozePin = 3;
int Alarm = 4;
int AlarmSet = 0;
int Snooze = 0;
int a,b;
// Convert normal decimal numbers to binary coded decimal
byte decToBcd(byte val)
{
  return ( (val/10*16) + (val%10) );
}// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val)
{
  return ( (val/16*10) + (val%16) );
}// 1) Sets the date and time on the ds1307
// 2) Starts the clock
// 3) Sets hour mode to 24 hour clock// Assumes you're passing in valid numbersvoid setDateDs1307(byte second,        // 0-59
byte minute,        // 0-59
byte hour,          // 1-23
byte dayOfWeek,     // 1-7
byte dayOfMonth,    // 1-28/29/30/31
byte month,         // 1-12
byte year)          // 0-99
{
  Wire.beginTransmission(DS1307_I2C_ADDRESS);
  Wire.write(0);
  Wire.write(decToBcd(second));    // 0 to bit 7 starts the clock
  Wire.write(decToBcd(minute));
  Wire.write(decToBcd(hour));     
  Wire.write(decToBcd(dayOfWeek));
  Wire.write(decToBcd(dayOfMonth));
  Wire.write(decToBcd(month));
  Wire.write(decToBcd(year));
  Wire.write(00010000); // sends 0x10 (hex) 00010000 (binary) to control register - turns on square wave
  Wire.endTransmission();
}// Gets the date and time from the ds1307
void getDateDs1307(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{
  // Reset the register pointer
  Wire.beginTransmission(DS1307_I2C_ADDRESS);
  Wire.write(0);
  Wire.endTransmission();
  Wire.requestFrom(DS1307_I2C_ADDRESS, 7);
}//Fire up the DMD library as dmd
DMD dmd(1,1);void ScanDMD()
{ 
  dmd.scanDisplayBySPI();
}void setup()
{
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;  //initialize TimerOne's interrupt/CPU usage used to scan and refresh the display
  Timer1.initialize( 5000 );           //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()  //clear/init the DMD pixels held in RAM
  dmd.clearScreen( true );   //true is normal (all pixels off), false is negative (all pixels on)
  dmd.selectFont(Wendy3x5 );  Wire.begin();  // Change these values to what you want to set your clock to.
  // You probably only want to set your clock once and then remove
  // the setDateDs1307 call.  second = 0;
  minute = 35;
  hour = 11; // use 24-hour time otherwise day/date calculations will be off
  dayOfWeek = 1;
  dayOfMonth = 23;
  month = 3;
  year = 14;
  //uncomment the setDateDs1307 call below to set time to intervals above.  Remember if you set the time 
  //you need to uncomment the line below again otherwise the sketch will only stay at the time set.
  //setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year);  pinMode(AlarmSetPin, INPUT_PULLUP);
  pinMode(SnoozePin, INPUT_PULLUP);
  pinMode(Alarm, OUTPUT);
  digitalWrite(Alarm, LOW);
}void drawDay()
// shows day of week
{
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
  switch(dayOfWeek)
  {
  case 1:
    dmd.drawString( 1,0, "Sun,", 3, GRAPHICS_NORMAL );    
    break;  case 2:
    dmd.drawString( 1,0, "Mon,", 3, GRAPHICS_NORMAL );        
    break;  case 3:
    dmd.drawString( 1,0, "Tue,", 3, GRAPHICS_NORMAL );        
    break;  case 4:
    dmd.drawString( 1,0, "Wed,", 3, GRAPHICS_NORMAL );        
    break;  case 5:
    dmd.drawString( 1,0, "Thu,", 3, GRAPHICS_NORMAL );        
    break;  case 6:
    dmd.drawString( 1,0, "Fri,", 3, GRAPHICS_NORMAL );        
    break;  case 7:
    dmd.drawString( 1,0, "Sat,", 3, GRAPHICS_NORMAL );        
    break;
  }
}void drawDate()
// shows numerical date
{
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
  switch(dayOfMonth)
  {
  case 1:
    dmd.drawString( 20,0, "01", 2, GRAPHICS_NORMAL );
    break;
  case 2:
    dmd.drawString( 20,0, "02", 2, GRAPHICS_NORMAL );
    break;
  case 3:
    dmd.drawString( 20,0, "03", 2, GRAPHICS_NORMAL );
    break;
  case 4:
    dmd.drawString( 20,0, "04", 2, GRAPHICS_NORMAL );
    break;
  case 5:
    dmd.drawString( 20,0, "05", 2, GRAPHICS_NORMAL );
    break;
  case 6:
    dmd.drawString( 20,0, "06", 2, GRAPHICS_NORMAL );
    break;
  case 7:
    dmd.drawString( 20,0, "07", 2, GRAPHICS_NORMAL );
    break;
  case 8:
    dmd.drawString( 20,0, "08", 2, GRAPHICS_NORMAL );
    break;
  case 9:
    dmd.drawString( 20,0, "09", 2, GRAPHICS_NORMAL );
    break;
  case 10:
    dmd.drawString( 20,0, "10", 2, GRAPHICS_NORMAL );
    break;
  case 11:
    dmd.drawString( 20,0, "11", 2, GRAPHICS_NORMAL );
    break;
  case 12:
    dmd.drawString( 20,0, "12", 2, GRAPHICS_NORMAL );
    break;
  case 13:
    dmd.drawString( 20,0, "13", 2, GRAPHICS_NORMAL );
    break;
  case 14:
    dmd.drawString( 20,0, "14", 2, GRAPHICS_NORMAL );
    break;
  case 15:
    dmd.drawString( 20,0, "15", 2, GRAPHICS_NORMAL );
    break;
  case 16:
    dmd.drawString( 20,0, "16", 2, GRAPHICS_NORMAL );
    break;
  case 17:
    dmd.drawString( 20,0, "17", 2, GRAPHICS_NORMAL );
    break;
  case 18:
    dmd.drawString( 20,0, "18", 2, GRAPHICS_NORMAL );
    break;
  case 19:
    dmd.drawString( 20,0, "19", 2, GRAPHICS_NORMAL );
    break;
  case 20:
    dmd.drawString( 20,0, "20", 2, GRAPHICS_NORMAL );
    break;
  case 21:
    dmd.drawString( 20,0, "21", 2, GRAPHICS_NORMAL );
    break;
  case 22:
    dmd.drawString( 20,0, "22", 2, GRAPHICS_NORMAL );
    break;
  case 23:
    dmd.drawString( 20,0, "23", 2, GRAPHICS_NORMAL );
    break;
  case 24:
    dmd.drawString( 20,0, "24", 2, GRAPHICS_NORMAL );
    break;
  case 25:
    dmd.drawString( 20,0, "25", 2, GRAPHICS_NORMAL );
    break;
  case 26:
    dmd.drawString( 20,0, "26", 2, GRAPHICS_NORMAL );
    break;
  case 27:
    dmd.drawString( 20,0, "27", 2, GRAPHICS_NORMAL );
    break;
  case 28:
    dmd.drawString( 20,0, "28", 2, GRAPHICS_NORMAL );
    break;
  case 29:
    dmd.drawString( 20,0, "29", 2, GRAPHICS_NORMAL );
    break;
  case 30:
    dmd.drawString( 20,0, "30", 2, GRAPHICS_NORMAL );
    break;
  case 31:
    dmd.drawString( 20,0, "31", 2, GRAPHICS_NORMAL );
    break;
  }
}void drawHour()
// draws the hour hand
{
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
  if (hour>12) //Remove this if command for 24 hour time
  {
    hour=hour-12; // This is a 12 hour Clock 
  }
  switch(hour)
  {
  case 1:
    dmd.drawString( 0,0, "01", 2, GRAPHICS_NORMAL );
    break;
  case 2:
    dmd.drawString( 0,0, "02", 2, GRAPHICS_NORMAL );
    break;
  case 3:
    dmd.drawString( 0,0, "03", 2, GRAPHICS_NORMAL );
    break;
  case 4:
    dmd.drawString( 0,0, "04", 2, GRAPHICS_NORMAL );
    break;
  case 5:
    dmd.drawString( 0,0, "05", 2, GRAPHICS_NORMAL );
    break;
  case 6:
    dmd.drawString( 0,0, "06", 2, GRAPHICS_NORMAL );
    break;
  case 7:
    dmd.drawString( 0,0, "07", 2, GRAPHICS_NORMAL );
    break;
  case 8:
    dmd.drawString( 0,0, "08", 2, GRAPHICS_NORMAL );
    break;
  case 9:
    dmd.drawString( 0,0, "09", 2, GRAPHICS_NORMAL );
    break;
  case 10:
    dmd.drawString( 0,0, "10", 2, GRAPHICS_NORMAL );
    break;
  case 11:
    dmd.drawString( 0,0, "11", 2, GRAPHICS_NORMAL );
    break;
  case 12:
    dmd.drawString( 0,0, "12", 2, GRAPHICS_NORMAL );
    break;
  case 13:
    dmd.drawString( 0,0, "13", 2, GRAPHICS_NORMAL );
    break;
  case 14:
    dmd.drawString( 0,0, "14", 2, GRAPHICS_NORMAL );
    break;
  case 15:
    dmd.drawString( 0,0, "15", 2, GRAPHICS_NORMAL );
    break;
  case 16:
    dmd.drawString( 0,0, "16", 2, GRAPHICS_NORMAL );
    break;
  case 17:
    dmd.drawString( 0,0, "17", 2, GRAPHICS_NORMAL );
    break;
  case 18:
    dmd.drawString( 0,0, "18", 2, GRAPHICS_NORMAL );
    break;
  case 19:
    dmd.drawString( 0,0, "19", 2, GRAPHICS_NORMAL );
    break;
  case 20:
    dmd.drawString( 0,0, "20", 2, GRAPHICS_NORMAL );
    break;
  case 21:
    dmd.drawString( 0,0, "21", 2, GRAPHICS_NORMAL );
    break;
  case 22:
    dmd.drawString( 0,0, "22", 2, GRAPHICS_NORMAL );
    break;
  case 23:
    dmd.drawString( 0,0, "23", 2, GRAPHICS_NORMAL );
    break;
  case 24:
    dmd.drawString( 0,0, "24", 2, GRAPHICS_NORMAL );
    break;
  }
}void drawMinute()
{
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
  switch(minute)
  {
  case 0:
    dmd.drawString( 12,0, "00", 2, GRAPHICS_NORMAL );
    break;
  case 1:
    dmd.drawString( 12,0, "01", 2, GRAPHICS_NORMAL );
    break;
  case 2:
    dmd.drawString( 12,0, "02", 2, GRAPHICS_NORMAL );
    break;
  case 3:
    dmd.drawString( 12,0, "03", 2, GRAPHICS_NORMAL );
    break;
  case 4:
    dmd.drawString( 12,0, "04", 2, GRAPHICS_NORMAL );
    break;
  case 5:
    dmd.drawString( 12,0, "05", 2, GRAPHICS_NORMAL );
    break;
  case 6:
    dmd.drawString( 12,0, "06", 2, GRAPHICS_NORMAL );
    break;
  case 7:
    dmd.drawString( 12,0, "07", 2, GRAPHICS_NORMAL );
    break;
  case 8:
    dmd.drawString( 12,0, "08", 2, GRAPHICS_NORMAL );
    break;
  case 9:
    dmd.drawString( 12,0, "09", 2, GRAPHICS_NORMAL );
    break;
  case 10:
    dmd.drawString( 12,0, "10", 2, GRAPHICS_NORMAL );
    break;
  case 11:
    dmd.drawString( 12,0, "11", 2, GRAPHICS_NORMAL );
    break;
  case 12:
    dmd.drawString( 12,0, "12", 2, GRAPHICS_NORMAL );
    break;
  case 13:
    dmd.drawString( 12,0, "13", 2, GRAPHICS_NORMAL );
    break;
  case 14:
    dmd.drawString( 12,0, "14", 2, GRAPHICS_NORMAL );
    break;
  case 15:
    dmd.drawString( 12,0, "15", 2, GRAPHICS_NORMAL );
    break;
  case 16:
    dmd.drawString( 12,0, "16", 2, GRAPHICS_NORMAL );
    break;
  case 17:
    dmd.drawString( 12,0, "17", 2, GRAPHICS_NORMAL );
    break;
  case 18:
    dmd.drawString( 12,0, "18", 2, GRAPHICS_NORMAL );
    break;
  case 19:
    dmd.drawString( 12,0, "19", 2, GRAPHICS_NORMAL );
    break;
  case 20:
    dmd.drawString( 12,0, "20", 2, GRAPHICS_NORMAL );
    break;
  case 21:
    dmd.drawString( 12,0, "21", 2, GRAPHICS_NORMAL );
    break;
  case 22:
    dmd.drawString( 12,0, "22", 2, GRAPHICS_NORMAL );
    break;
  case 23:
    dmd.drawString( 12,0, "23", 2, GRAPHICS_NORMAL );
    break;
  case 24:
    dmd.drawString( 12,0, "24", 2, GRAPHICS_NORMAL );
    break;
  case 25:
    dmd.drawString( 12,0, "25", 2, GRAPHICS_NORMAL );
    break;
  case 26:
    dmd.drawString( 12,0, "26", 2, GRAPHICS_NORMAL );
    break;
  case 27:
    dmd.drawString( 12,0, "27", 2, GRAPHICS_NORMAL );
    break;
  case 28:
    dmd.drawString( 12,0, "28", 2, GRAPHICS_NORMAL );
    break;
  case 29:
    dmd.drawString( 12,0, "29", 2, GRAPHICS_NORMAL );
    break;
  case 30:
    dmd.drawString( 12,0, "30", 2, GRAPHICS_NORMAL );
    break;
  case 31:
    dmd.drawString( 12,0, "31", 2, GRAPHICS_NORMAL );
    break;
  case 32:
    dmd.drawString( 12,0, "32", 2, GRAPHICS_NORMAL );
    break;
  case 33:
    dmd.drawString( 12,0, "33", 2, GRAPHICS_NORMAL );
    break;
  case 34:
    dmd.drawString( 12,0, "34", 2, GRAPHICS_NORMAL );
    break;
  case 35:
    dmd.drawString( 12,0, "35", 2, GRAPHICS_NORMAL );
    break;
  case 36:
    dmd.drawString( 12,0, "36", 2, GRAPHICS_NORMAL );
    break;
  case 37:
    dmd.drawString( 12,0, "37", 2, GRAPHICS_NORMAL );
    break;
  case 38:
    dmd.drawString( 12,0, "38", 2, GRAPHICS_NORMAL );
    break;
  case 39:
    dmd.drawString( 12,0, "39", 2, GRAPHICS_NORMAL );
    break;
  case 40:
    dmd.drawString( 12,0, "40", 2, GRAPHICS_NORMAL );
    break;
  case 41:
    dmd.drawString( 12,0, "41", 2, GRAPHICS_NORMAL );
    break;
  case 42:
    dmd.drawString( 12,0, "42", 2, GRAPHICS_NORMAL );
    break;
  case 43:
    dmd.drawString( 12,0, "43", 2, GRAPHICS_NORMAL );
    break;
  case 44:
    dmd.drawString( 12,0, "44", 2, GRAPHICS_NORMAL );
    break;
  case 45:
    dmd.drawString( 12,0, "45", 2, GRAPHICS_NORMAL );
    break;
  case 46:
    dmd.drawString( 12,0, "46", 2, GRAPHICS_NORMAL );
    break;
  case 47:
    dmd.drawString( 12,0, "47", 2, GRAPHICS_NORMAL );
    break;
  case 48:
    dmd.drawString( 12,0, "48", 2, GRAPHICS_NORMAL );
    break;
  case 49:
    dmd.drawString( 12,0, "49", 2, GRAPHICS_NORMAL );
    break;
  case 50:
    dmd.drawString( 12,0, "50", 2, GRAPHICS_NORMAL );
    break;
  case 51:
    dmd.drawString( 12,0, "51", 2, GRAPHICS_NORMAL );
    break;
  case 52:
    dmd.drawString( 12,0, "52", 2, GRAPHICS_NORMAL );
    break;
  case 53:
    dmd.drawString( 12,0, "53", 2, GRAPHICS_NORMAL );
    break;
  case 54:
    dmd.drawString( 12,0, "54", 2, GRAPHICS_NORMAL );
    break;
  case 55:
    dmd.drawString( 12,0, "55", 2, GRAPHICS_NORMAL );
    break;
  case 56:
    dmd.drawString( 12,0, "56", 2, GRAPHICS_NORMAL );
    break;
  case 57:
    dmd.drawString( 12,0, "57", 2, GRAPHICS_NORMAL );
    break;
  case 58:
    dmd.drawString( 12,0, "58", 2, GRAPHICS_NORMAL );
    break;
  case 59:
    dmd.drawString( 12,0, "59", 2, GRAPHICS_NORMAL );
    break;
  }
}void drawSec()
{
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
  switch(second)
  {
  case 0:
    dmd.drawString( 24,0, "00", 2, GRAPHICS_NORMAL );
    break;
  case 1:
    dmd.drawString( 24,0, "01", 2, GRAPHICS_NORMAL );
    break;
  case 2:
    dmd.drawString( 24,0, "02", 2, GRAPHICS_NORMAL );
    break;
  case 3:
    dmd.drawString( 24,0, "03", 2, GRAPHICS_NORMAL );
    break;
  case 4:
    dmd.drawString( 24,0, "04", 2, GRAPHICS_NORMAL );
    break;
  case 5:
    dmd.drawString( 24,0, "05", 2, GRAPHICS_NORMAL );
    break;
  case 6:
    dmd.drawString( 24,0, "06", 2, GRAPHICS_NORMAL );
    break;
  case 7:
    dmd.drawString( 24,0, "07", 2, GRAPHICS_NORMAL );
    break;
  case 8:
    dmd.drawString( 24,0, "08", 2, GRAPHICS_NORMAL );
    break;
  case 9:
    dmd.drawString( 24,0, "09", 2, GRAPHICS_NORMAL );
    break;
  case 10:
    dmd.drawString( 24,0, "10", 2, GRAPHICS_NORMAL );
    break;
  case 11:
    dmd.drawString( 24,0, "11", 2, GRAPHICS_NORMAL );
    break;
  case 12:
    dmd.drawString( 24,0, "12", 2, GRAPHICS_NORMAL );
    break;
  case 13:
    dmd.drawString( 24,0, "13", 2, GRAPHICS_NORMAL );
    break;
  case 14:
    dmd.drawString( 24,0, "14", 2, GRAPHICS_NORMAL );
    break;
  case 15:
    dmd.drawString( 24,0, "15", 2, GRAPHICS_NORMAL );
    break;
  case 16:
    dmd.drawString( 24,0, "16", 2, GRAPHICS_NORMAL );
    break;
  case 17:
    dmd.drawString( 24,0, "17", 2, GRAPHICS_NORMAL );
    break;
  case 18:
    dmd.drawString( 24,0, "18", 2, GRAPHICS_NORMAL );
    break;
  case 19:
    dmd.drawString( 24,0, "19", 2, GRAPHICS_NORMAL );
    break;
  case 20:
    dmd.drawString( 24,0, "20", 2, GRAPHICS_NORMAL );
    break;
  case 21:
    dmd.drawString( 24,0, "21", 2, GRAPHICS_NORMAL );
    break;
  case 22:
    dmd.drawString( 24,0, "22", 2, GRAPHICS_NORMAL );
    break;
  case 23:
    dmd.drawString( 24,0, "23", 2, GRAPHICS_NORMAL );
    break;
  case 24:
    dmd.drawString( 24,0, "24", 2, GRAPHICS_NORMAL );
    break;
  case 25:
    dmd.drawString( 24,0, "25", 2, GRAPHICS_NORMAL );
    break;
  case 26:
    dmd.drawString( 24,0, "26", 2, GRAPHICS_NORMAL );
    break;
  case 27:
    dmd.drawString( 24,0, "27", 2, GRAPHICS_NORMAL );
    break;
  case 28:
    dmd.drawString( 24,0, "28", 2, GRAPHICS_NORMAL );
    break;
  case 29:
    dmd.drawString( 24,0, "29", 2, GRAPHICS_NORMAL );
    break;
  case 30:
    dmd.drawString( 24,0, "30", 2, GRAPHICS_NORMAL );
    break;
  case 31:
    dmd.drawString( 24,0, "31", 2, GRAPHICS_NORMAL );
    break;
  case 32:
    dmd.drawString( 24,0, "32", 2, GRAPHICS_NORMAL );
    break;
  case 33:
    dmd.drawString( 24,0, "33", 2, GRAPHICS_NORMAL );
    break;
  case 34:
    dmd.drawString( 24,0, "34", 2, GRAPHICS_NORMAL );
    break;
  case 35:
    dmd.drawString( 24,0, "35", 2, GRAPHICS_NORMAL );
    break;
  case 36:
    dmd.drawString( 24,0, "36", 2, GRAPHICS_NORMAL );
    break;
  case 37:
    dmd.drawString( 24,0, "37", 2, GRAPHICS_NORMAL );
    break;
  case 38:
    dmd.drawString( 24,0, "38", 2, GRAPHICS_NORMAL );
    break;
  case 39:
    dmd.drawString( 24,0, "39", 2, GRAPHICS_NORMAL );
    break;
  case 40:
    dmd.drawString( 24,0, "40", 2, GRAPHICS_NORMAL );
    break;
  case 41:
    dmd.drawString( 24,0, "41", 2, GRAPHICS_NORMAL );
    break;
  case 42:
    dmd.drawString( 24,0, "42", 2, GRAPHICS_NORMAL );
    break;
  case 43:
    dmd.drawString( 24,0, "43", 2, GRAPHICS_NORMAL );
    break;
  case 44:
    dmd.drawString( 24,0, "44", 2, GRAPHICS_NORMAL );
    break;
  case 45:
    dmd.drawString( 24,0, "45", 2, GRAPHICS_NORMAL );
    break;
  case 46:
    dmd.drawString( 24,0, "46", 2, GRAPHICS_NORMAL );
    break;
  case 47:
    dmd.drawString( 24,0, "47", 2, GRAPHICS_NORMAL );
    break;
  case 48:
    dmd.drawString( 24,0, "48", 2, GRAPHICS_NORMAL );
    break;
  case 49:
    dmd.drawString( 24,0, "49", 2, GRAPHICS_NORMAL );
    break;
  case 50:
    dmd.drawString( 24,0, "50", 2, GRAPHICS_NORMAL );
    break;
  case 51:
    dmd.drawString( 24,0, "51", 2, GRAPHICS_NORMAL );
    break;
  case 52:
    dmd.drawString( 24,0, "52", 2, GRAPHICS_NORMAL );
    break;
  case 53:
    dmd.drawString( 24,0, "53", 2, GRAPHICS_NORMAL );
    break;
  case 54:
    dmd.drawString( 24,0, "54", 2, GRAPHICS_NORMAL );
    break;
  case 55:
    dmd.drawString( 24,0, "55", 2, GRAPHICS_NORMAL );
    break;
  case 56:
    dmd.drawString( 24,0, "56", 2, GRAPHICS_NORMAL );
    break;
  case 57:
    dmd.drawString( 24,0, "57", 2, GRAPHICS_NORMAL );
    break;
  case 58:
    dmd.drawString( 24,0, "58", 2, GRAPHICS_NORMAL );
    break;
  case 59:
    dmd.drawString( 24,0, "59", 2, GRAPHICS_NORMAL );
    break;
  }
}void drawCol1()
{
  dmd.drawString( 8,0, ":", 1, GRAPHICS_NORMAL );
}void drawCol2()
{
  dmd.drawString( 20,0, ":", 1, GRAPHICS_NORMAL );
}void runClock()
{
 // drawDay();  
 // drawDate();
  drawHour();
  drawCol1();
  drawMinute();
  drawCol2();
  drawSec();
 // CheckAlarm();}/*void AlarmSequence() {
  drawDay();  
  drawDate();
  drawHour();
  drawCol();
  drawMinute();
  digitalWrite(Alarm, HIGH);
  delay(1000);
  dmd.clearScreen( true );
  digitalWrite(Alarm, LOW);
  delay(1000);
}
*/
/*void CheckAlarm() {
  AlarmSet = digitalRead(AlarmSetPin);
  Snooze = digitalRead(SnoozePin);
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);*/
  /* Only Trigger Alarm If it is a day listed below. This can be changed by changing the numbers to any of the following:
   1 = Sunday
   2 = Monday
   3 = Tuesday
   4 = Wednesday
   5 = Thursday
   6 = Friday
   7 = Saturday
   */
/*  if(dayOfWeek == 2 || dayOfWeek == 3 || dayOfWeek == 4 || dayOfWeek == 5 ||dayOfWeek == 6) { //This is days ALLOWED to ring alarm
    if(hour == 18 && minute == 05 ) { //Set Time Here (In 24 hour Time) 
      if(AlarmSet == LOW) { //If alarm pin is on
        Snooze = digitalRead(SnoozePin);
        while(Snooze == HIGH)
        {
          Snooze = digitalRead(SnoozePin);
          AlarmSequence();
        }
      }
    }
  }
}
*/
void loop()
{
  runClock();  
}

Features

q2.jpg
q1.jpg

DMD

  • 32 x 16 high brightness Red LEDs (512 LEDs total) with 10mm pitch
  • Supports 5V operation
  • Viewable over 12 meters away
  • Tough plastic frame
  • Onboard Controller IC
  • Arduino compatible library, graphics functions

RTC

  • counts seconds, minutes, hours, and year
  • Accuracy: +2ppm to -2ppm for 0ºC to +40ºC, +3.5ppm to -3.5ppm for -40ºC to +85ºC
  • Digital temperature sensor with a ±3ºC accuracy
  • Two Time-of-day alarmsProgrammable square wave output
  • Register for Aging trim400Khz I2C interface
  • Low power consumption
  • Automatic power failure battery switch circuitry
  • CR2032 battery backup with two to three-year life

Working of This Project: Simple Clock

RTC P10 display using Arduino - Rakkibot

Working of This Project: Clock With Settings

RTC v2 p10 display with Clock Settings - Rakkibot

End Note

https://www.youtube.com/channel/UCks-9JSnVb22dlqtMgPjrlg/videosIf you faced any issues in building this project, feel free to ask me. Please do suggest new projects that you want me to do next.

Share this video if you like.

Blog - https://rahulthelonelyprogrammer.blogspot.in/

Github - https://github.com/Rahul24-06

Happy to have you subscribed: https://rahulthelonelyprogrammer.blogspot.in/ Thanks for reading!