SHOW:
|
|
- or go back to the newest paste.
| 1 | //* | |
| 2 | * Скетч для чтения времени с часов DS3231 | |
| 3 | * | |
| 4 | * Обратите внимание, что каждую итерацию цикла loop() мы записываем адрес регистра 0x00. | |
| 5 | * Если этого не делать, то мы будем каждый раз сдвигаться по карте регистров на 7 позиций, | |
| 6 | * и возвращаемые данные будут совсем не те, что мы ожидаем. | |
| 7 | **// | |
| 8 | ||
| 9 | #include <Wire.h> | |
| 10 | const byte DS3231 = 0x68; // I2C адрес таймера DS3231 | |
| 11 | ||
| 12 | void setup() {
| |
| 13 | Wire.begin(); | |
| 14 | Serial.begin(9600); | |
| 15 | } | |
| 16 | ||
| 17 | void loop() {
| |
| 18 | Wire.beginTransmission(DS3231); // начинаем обмен с DS3231 | |
| 19 | Wire.write(byte(0x00)); // записываем адрес регистра, с которого начинаем чтение!!! | |
| 20 | Wire.endTransmission(); // завершаем передачу | |
| 21 | ||
| 22 | byte t[7]; // массив для хранения даты и времени | |
| 23 | int i = 0; // индекс текущего элемента массива | |
| 24 | Wire.beginTransmission(DS3231); // начинаем обмен с DS3231 | |
| 25 | Wire.requestFrom(DS3231, 7); // запрашиваем 7 байтов у DS3231 | |
| 26 | while(Wire.available()) { // пока есть данные от DS3231
| |
| 27 | t[i] = Wire.read(); // читаем 1 байт и сохраняем в массив t | |
| 28 | i++; // инкрементируем индекс элемента массива | |
| 29 | } | |
| 30 | Wire.endTransmission(); // завершаем обмен | |
| 31 | ||
| 32 | printDateTime(t); // выводим дату и время | |
| 33 | delay(1000); // пауза 1 секунда | |
| 34 | } | |
| 35 | ||
| 36 | // разбирает считанный массив и выводит дату и время | |
| 37 | void printDateTime(byte *arr) {
| |
| 38 | if (arr[4]<10) Serial.print("0"); // дополнение нулями слева для выравнивания
| |
| 39 | Serial.print(arr[4], HEX); // выводим дату | |
| 40 | Serial.print(".");
| |
| 41 | if (arr[5]<10) Serial.print("0");
| |
| 42 | Serial.print(arr[5], HEX); // выводим месяц | |
| 43 | Serial.print(".20"); // 2000-ые годы подразумеваются
| |
| 44 | Serial.print(arr[6], HEX); // выводим год | |
| 45 | Serial.print(" ");
| |
| 46 | if (arr[2]<10) Serial.print("0");
| |
| 47 | Serial.print(arr[2], HEX); // выводим час | |
| 48 | Serial.print(":");
| |
| 49 | if (arr[1]<10) Serial.print("0");
| |
| 50 | Serial.print(arr[1], HEX); // выводим минуты | |
| 51 | Serial.print(":");
| |
| 52 | if (arr[0]<10) Serial.print("0");
| |
| 53 | Serial.println(arr[0], HEX); // выводим секунды | |
| 54 | } |