Заработали часики. В общем почти все примеры по этой штуке - фигня, не работают. Не собираются. В итоге рабочий скетч он вот такой:
(здесь я только добавил три строчки в сетюп, и оно заработало)
#include \
int hour;
int minute;
int second;
int month;
int day_of_week;
int day;
int year;
char* dow[7] = {\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"};
void setup()
{
Serial.begin(9600);
Wire.begin();
Wire.beginTransmission(104); // transmit to device #104, the ds 1307
Wire.write(0x00);
Wire.endTransmission();
}
void loop()
{
// Below required to reset the register address to 0.
Wire.beginTransmission(104); // transmit to device #104, the ds 1307
Wire.write(0x00);
Wire.endTransmission(); // stop transmitting
Wire.requestFrom(104, 7); // request 7 bytes from slave ds1307, we'll assume it'll write them all even though it doesn't have to
second = Wire.read();
minute = Wire.read();
hour = Wire.read();
day_of_week=Wire.read();
day = Wire.read();
month = Wire.read();
year = Wire.read();
// Convert all the BCD values that might have \"tens\" to decimal. Most arduino folks do this w/shifts but this just looks easier to me.
hour=hour/16 * 10 + hour % 16;
minute=minute/16 * 10 + minute % 16;
second=second/16 * 10 + second % 16;
day=day/16 * 10 + day % 16;
month=month/16 * 10 + month % 16;
year=2000 + year/16 * 10 + year % 16;
Serial.print(hour);
Serial.print(\":\");
if (minute < 10) { Serial.print(\"0\"); }
Serial.print(minute);
Serial.print(\":\");
if (second < 10) { Serial.print(\"0\"); }
Serial.print(second);
Serial.print(\" \");
Serial.print(dow[day_of_week-1]); // array is 0-6, but the dow register holds 1-7, so subtract 1.
Serial.print(\", \");
Serial.print(month);
Serial.print(\"/\");
Serial.print(day);
Serial.print(\"/\");
Serial.print(year);
Serial.print(\"\\n\");
delay(1000);
}
[700x393]