سلام دوستان
من یک ماژول ساعت به دستم رسیده که DS2405 هستش. میخواستم بدونم کتابخانه براش موجوده؟ یک کد نمونه براش پیدا کردم تو سایت DFrobot که عملا مشکل داره.
سلام دوستان
من یک ماژول ساعت به دستم رسیده که DS2405 هستش. میخواستم بدونم کتابخانه براش موجوده؟ یک کد نمونه براش پیدا کردم تو سایت DFrobot که عملا مشکل داره.
کد هم اینه
#include <Wire.h>
#define RTC_Address 0x32 //RTC_Address
unsigned char date[7];
void setup()
{
Wire.begin();
Serial.begin(9600);
}
void loop()
{
I2CWriteDate();//Write the Real-time Clock
delay(100);
while(1)
{
I2CReadDate(); //Read the Real-time Clock
Data_process();//Process the data
delay(1000);//延时1S
}
}
//Read the Real-time data register of SD2403
void I2CReadDate(void)
{
unsigned char n=0;
Wire.requestFrom(RTC_Address,7);
while(Wire.available())
{
date[n++]=Wire.read();
}
delayMicroseconds(1);
Wire.endTransmission();
}
//Write the Real-time data register of SD2403
void I2CWriteDate(void)
{
WriteTimeOn();
Wire.beginTransmission(RTC_Address);
Wire.write(byte(0));//Set the address for writing
Wire.write(0x59);//second:59
Wire.write(0x01);//minute:1
Wire.write(0x95);//hour:15:00(24-hour format)
Wire.write(0x03);//weekday:Wednesday
Wire.write(0x26);//day:26th
Wire.write(0x12);//monthecember
Wire.write(0x12);//year:2012
Wire.endTransmission();
Wire.beginTransmission(RTC_Address);
Wire.write(0x12); //Set the address for writing
Wire.write(byte(0));
Wire.endTransmission();
WriteTimeOff();
}
//The program for allowing to write to SD2400
void WriteTimeOn(void)
{
Wire.beginTransmission(RTC_Address);
Wire.write(0x10);//Set the address for writing as 10H
Wire.write(0x80);//Set WRTC1=1
Wire.endTransmission();
Wire.beginTransmission(RTC_Address);
Wire.write(0x0F);//Set the address for writing as OFH
Wire.write(0x84);//Set WRTC2=1,WRTC3=1
Wire.endTransmission();
}
//The program for forbidding writing to SD2400
void WriteTimeOff(void)
{
Wire.beginTransmission(RTC_Address);
Wire.write(0x0F); //Set the address for writing as OFH
Wire.write(byte(0));//Set WRTC2=0,WRTC3=0
Wire.write(byte(0));//Set WRTC1=0
Wire.endTransmission();
}
//Process the time_data
void Data_process(void)
{
unsigned char i;
for(i=0;i<7;i++)
{
if(i!=2)
date[i]=(((date[i]&0xf0)>>4)*10)+(date[i]&0x0f);
else
{
date[2]=(date[2]&0x7f);
date[2]=(((date[2]&0xf0)>>4)*10)+(date[2]&0x0f);
}
}
// Use the serial monitor to see information being transmitted
Serial.print("Sec = ");//second
Serial.print(date[0]);
Serial.print(" Min = ");//minute
Serial.print(date[1]);
Serial.print(" H = ");//hour
Serial.print(date[2]);
Serial.print(" W = ");//week
Serial.print(date[3]);
Serial.print(" D = ");//day
Serial.print(date[4]);
Serial.print(" M = ");//month
Serial.print(date[5]);
Serial.print(" Y = ");//year
Serial.print(date[6]);
Serial.println();
}
اگر ممکنه یک لینک از ماژ.ل ساعتتون بزارید ببینیم چیه
پروتکل ارتباطیش همون I2c هست یا چیز دیگه
بله I2C هست ولینکش هم SD2405 Real time clock Module (SKU:TOY0021) - Robot Wiki
اوکی
مشکلتون با کد چیه ؟
داده غلط بهتون میده یا اصلا داده نمیده ؟
این دیتاشیت رو مطالعه کنید:
http://www.robotshop.com/media/files...et-toy0021.pdf
خیلی کامل توضیح داده
سلام مگ مگ عزیزم. ممنون از لطفتون که همیشه سر فرصت و حوصله راهنمایی میکنید. با عرض معذرت از این ماژول سوییچ کردم رو ماژول 1307 و کتابخانهRTClib حالا مشکلی که دارم اینه که از تابع dayOfWeek() میخوام استفاده کنم ولی ارور میده به این شکل: 'class DateTime' has no member named 'dayOfWeek' و کد هم به شکل زیر هستش:
#include <Wire.h> // I2C-Bibliothek einbinden
#include "RTClib.h" // RTC-Bibliothek einbinden
RTC_DS1307 RTC; // RTC Modul
void setup(void) {
// Initialisiere I2C
Wire.begin();
// Initialisiere RTC
RTC.begin();
// Serielle Ausgabe starten
Serial.begin(9600);
// Begrüßungstext auf seriellem Monitor ausgeben
Serial.println("Starte Datum und Zeit - blog.simtronyx.de");
// Prüfen ob RTC läuft
if (! RTC.isrunning()) {
// Aktuelles Datum und Zeit setzen, falls die Uhr noch nicht läuft
RTC.adjust(DateTime(__DATE__, __TIME__));
Serial.println("Echtzeituhr wurde gestartet und auf Systemzeit gesetzt.");
}
else Serial.println("Echtzeituhr laeuft bereits.");
}
void loop(){
DateTime now=RTC.now(); // aktuelle Zeit abrufen
show_time_and_date(now); // Datum und Uhrzeit ausgeben
delay(30000); // 30 Sekunden warten bis zur nächsten Ausgabe
}
// Wochentag ermitteln
String get_day_of_week(uint8_t dow){
String dows=" ";
switch(dow){
case 0: dows="So"; break;
case 1: dows="Mo"; break;
case 2: dows="Di"; break;
case 3: dows="Mi"; break;
case 4: dows="Do"; break;
case 5: dows="Fr"; break;
case 6: dows="Sa"; break;
}
return dows;
}
// Datum und Uhrzeit ausgeben
void show_time_and_date(DateTime datetime){
// Wochentag, Tag.Monat.Jahr
Serial.print(get_day_of_week(datetime.dayOfWeek()) );
Serial.print(", ");
if(datetime.day()<10)Serial.print(0);
Serial.print(datetime.day(),DEC);
Serial.print(".");
if(datetime.month()<10)Serial.print(0);
Serial.print(datetime.month(),DEC);
Serial.print(".");
Serial.println(datetime.year(),DEC);
// Stunde:Minute:Sekunde
if(datetime.hour()<10)Serial.print(0);
Serial.print(datetime.hour(),DEC);
Serial.print(":");
if(datetime.minute()<10)Serial.print(0);
Serial.print(datetime.minute(),DEC);
Serial.print(":");
if(datetime.second()<10)Serial.print(0);
Serial.println(datetime.second(),DEC);
}