#include
#define ADDRESS B1010001
byte zero = 0x00;
byte tre = 0x03;
int second;
int minute;
int hour;
int dayOfWeek;
int dayOfMonth;
int month;
int year;
int alsec;
int almin;
int alhour;
byte decToBcd(byte val)
{
return ( (val/10*16) + (val%10) );
}
byte bcdToDec(byte val)
{
return ( (val/16*10) + (val%16) );
}
void setDate()
{
Wire.beginTransmission(ADDRESS);
Wire.write(tre); // сдвинули регистр (пропустили первые три ячейки), что бы чтение началось с 4 по-порядку, где собственно и лежат значения часов
Wire.endTransmission();
Wire.requestFrom(ADDRESS, 7); // Считываем значения времени - первые 7 ячеек
int second = bcdToDec(Wire.read());
int minute = bcdToDec(Wire.read());
int hour = bcdToDec(Wire.read()); // 24 hour
int dayOfWeek = bcdToDec(Wire.read());
int dayOfMonth = bcdToDec(Wire.read());
int month = bcdToDec(Wire.read());
int year = bcdToDec(Wire.read());
Wire.beginTransmission(ADDRESS);
Wire.write(zero);
Wire.write(zero);
Wire.write(zero);
Wire.write(zero);
Wire.write(zero); //sec обнуляем секунды - если надо, можем записать произвольное число от 0 до 59 таким, же образом, что и минуты, часы, etc
Wire.write(decToBcd(minute)); //min
Wire.write(decToBcd(hour)); //hour
Wire.write(decToBcd(dayOfWeek)); //day
Wire.write(decToBcd(dayOfMonth)); //week
Wire.write(decToBcd(month)); //months
Wire.write(decToBcd(year)); //year
// установка будильника
Wire.write(zero);// секунды выставляем в ноль
Wire.write(zero); // минуты выставляем в ноль
Wire.write(decToBcd(7)); // часы выставляем в 7 утра
Wire.endTransmission();
Serial.println("Done set!");
}
void getDate()
{
Wire.beginTransmission(ADDRESS);
Wire.write(tre);
Wire.endTransmission();
Wire.requestFrom(ADDRESS, 10); // Здесь мы получаем значения уже из 10 регистров - время + будильник
int second =(bcdToDec(Wire.read()));
int minute =(bcdToDec(Wire.read()));
int hour =(bcdToDec(Wire.read()));
int dayOfMonth =(bcdToDec(Wire.read()));
int dayOfWeek =(bcdToDec(Wire.read()));
int month= (bcdToDec(Wire.read()));
int year =(bcdToDec(Wire.read()));
int alsec=(bcdToDec(Wire.read()));
int almin=(bcdToDec(Wire.read()));
int alhour=(bcdToDec(Wire.read()));
Serial.println("Time....");
Serial.print(hour);
Serial.print(":");
Serial.print(minute);
Serial.print(":");
Serial.print(second);
Serial.print(" ");
Serial.print(dayOfMonth);
Serial.print("_");
Serial.print(month);
Serial.print("_20");
Serial.print(year);
Serial.print(" day of week: ");
Serial.println(dayOfWeek);
Serial.println();
Serial.println("Alarm....");
Serial.print(alhour);
Serial.print(":");
Serial.print(almin);
Serial.print(":");
Serial.print(alsec);
Serial.println();
}
void setup()
{ Wire.begin();
Serial.begin(9600);
Serial.println("Start");
}
void loop()
{
// setDate(); // Расскоментируем в случае установки времени - потом опять комментим
getDate();
delay(1000);
}
Комментариев нет:
Отправить комментарий