View difference between Paste ID: KvsKwPt4 and TQUJzkn7
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
}