Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <SPI.h>
- #include <LiquidCrystal.h>
- #define SECOND 0
- #define MINUTE 1
- #define HOUR 2
- #define DAY 4
- #define MONTH 5
- #define cs 8
- #define alarm 9
- LiquidCrystal lcd(7, 6, 2, 3, 4, 5);
- int TimeDate [7]; //second,minute,hour,null,day,month,year
- int Alarm[] = {20, 30}; //h, m alarm
- void setup() {
- Serial.begin(9600);
- RTC_init();
- lcd.begin(16, 2);
- pinMode(alarm, OUTPUT);
- //day(1-31), month(1-12), year(0-99), hour(0-23), minute(0-59), second(0-59)
- // SetTimeDate(25,2,15,20,40,16);
- }
- char temp[20];
- void loop() {
- lcd.clear();
- ReadTimeDate();
- lcd.setCursor(0, 0);
- sprintf(temp, "%02d:%02d:%02d %02d/%02d",TimeDate[HOUR], TimeDate[MINUTE],
- TimeDate[SECOND], TimeDate[MONTH], TimeDate[DAY]);
- lcd.println(temp);
- lcd.setCursor(0, 1);
- if(Alarm[0] == TimeDate[HOUR] && Alarm[1] == TimeDate[MINUTE]) {
- lcd.println("ALARM TIME");
- digitalWrite(alarm, HIGH);
- } else {
- lcd.println("I'M A CLOCK!! ");
- digitalWrite(alarm, LOW);
- }
- delay(1000);
- }
- int RTC_init(){
- pinMode(cs,OUTPUT); // chip select
- // start the SPI library:
- SPI.begin();
- SPI.setBitOrder(MSBFIRST);
- SPI.setDataMode(SPI_MODE1); // both mode 1 & 3 should work
- //set control register
- digitalWrite(cs, LOW);
- SPI.transfer(0x8E);
- SPI.transfer(0x60); //60= disable Osciallator and Battery SQ wave @1hz, temp compensation, Alarms disabled
- digitalWrite(cs, HIGH);
- delay(10);
- }
- int SetTimeDate(int d, int mo, int y, int h, int mi, int s){
- int TimeDate [7]={
- s,mi,h,0,d,mo,y };
- for(int i=0; i<=6;i++){
- if(i==3)
- i++;
- int b= TimeDate[i]/10;
- int a= TimeDate[i]-b*10;
- if(i==2){
- if (b==2)
- b=B00000010;
- else if (b==1)
- b=B00000001;
- }
- TimeDate[i]= a+(b<<4);
- digitalWrite(cs, LOW);
- SPI.transfer(i+0x80);
- SPI.transfer(TimeDate[i]);
- digitalWrite(cs, HIGH);
- }
- }
- void ReadTimeDate(){
- String temp;
- for(int i=0; i<=6;i++){
- if(i==3)
- i++;
- digitalWrite(cs, LOW);
- SPI.transfer(i+0x00);
- unsigned int n = SPI.transfer(0x00);
- digitalWrite(cs, HIGH);
- int a=n & B00001111;
- if(i==2){
- int b=(n & B00110000)>>4; //24 hour mode
- if(b==B00000010)
- b=20;
- else if(b==B00000001)
- b=10;
- TimeDate[i]=a+b;
- }
- else if(i==4){
- int b=(n & B00110000)>>4;
- TimeDate[i]=a+b*10;
- }
- else if(i==5){
- int b=(n & B00010000)>>4;
- TimeDate[i]=a+b*10;
- }
- else if(i==6){
- int b=(n & B11110000)>>4;
- TimeDate[i]=a+b*10;
- }
- else{
- int b=(n & B01110000)>>4;
- TimeDate[i]=a+b*10;
- }
- }
- }
- String ReadTime(){
- String temp;
- temp.concat(TimeDate[2]);
- temp.concat(":");
- temp.concat(TimeDate[1]);
- temp.concat(":");
- temp.concat(TimeDate[0]);
- while(temp.length() < 17)
- temp.concat(" ");
- return temp;
- }
- String ReadDate(){
- String temp;
- temp.concat(TimeDate[4]);
- temp.concat("/") ;
- temp.concat(TimeDate[5]);
- temp.concat("/") ;
- temp.concat(TimeDate[6]);
- while(temp.length() < 17)
- temp.concat(" ");
- return(temp);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement