phpBB [media]
Вообщем то и часами это назвать нельзя, скорее это таймер который обнуляется каждые сутки и начинает свой отсчёт снова и снова. В данной схеме не предусмотрены ни модуль точного времени ни кнопки для настройки времени. Только Arduino и матрица max7219. Что бы часы относительно точно показывали время нужно запустить "девайс" в XX:00 минут, а часы можно настроить в строке
float utcOffset = 17; //поправка часового пояса
. Ну вот вообщем то и всё, в скетче есть необходимые пояснения.Код: Выделить всё
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Max72xxPanel.h>
int offset=1,refresh=0;
int pinCS = 10; // Подключение пина CS
int numberOfHorizontalDisplays = 4; // Количество светодиодных матриц по Горизонтали
int numberOfVerticalDisplays = 1; // Количество светодиодных матриц по Вертикали;
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);
void setup(void) {
matrix.setIntensity(0); // Яркость матрицы от 0 до 15
matrix.setRotation(matrix.getRotation()+2); //1 - 90 2 - 180 3 - 270 градусов
// начальные координаты матриц 8*8
matrix.setRotation(0, 1); // 1 матрица
matrix.setRotation(1, 1); // 2 матрица
matrix.setRotation(2, 1); // 3 матрица
matrix.setRotation(3, 1); // 4 матрица
}
int dots = 0;
long dotTime = 0;
int h,m,s;
// =======================================================================
void loop(void) {
DisplayTime();
if(millis()-dotTime > 500) {
dotTime = millis();
dots = !dots;
}
}
// =======================================================================
void DisplayTime(){
updateTime();
matrix.fillScreen(LOW);
int y = (matrix.height() - 8) / 2; // Центрируем текст по Вертикали
if(s & 1){matrix.drawChar(14, y, (String(":"))[0], HIGH, LOW, 1);} //каждую четную секунду печатаем двоеточие по центру (чтобы мигало)
else{matrix.drawChar(14, y, (String(" "))[0], HIGH, LOW, 1);}
String hour1 = String (h/10);
String hour2 = String (h%10);
String min1 = String (m/10);
String min2 = String (m%10);
String sec1 = String (s/10);
String sec2 = String (s%10);
int xh = 2;
int xm = 19;
// int xs = 28; //секунды
matrix.drawChar(xh, y, hour1[0], HIGH, LOW, 1);
matrix.drawChar(xh+6, y, hour2[0], HIGH, LOW, 1);
matrix.drawChar(xm, y, min1[0], HIGH, LOW, 1);
matrix.drawChar(xm+6, y, min2[0], HIGH, LOW, 1);
// matrix.drawChar(xs, y, sec1[0], HIGH, LOW, 1);//секунды
// matrix.drawChar(xs+6, y, sec2[0], HIGH, LOW, 1); //секунды
matrix.write(); // Вывод на дисплей
}
float utcOffset = 17; //поправка часового пояса
long localEpoc = 0;
long localMillisAtUpdate = 0;
void updateTime()
{
long curEpoch = localEpoc + ((millis() - localMillisAtUpdate) / 1000);
long epoch = round(curEpoch + 3600 * utcOffset + 86400L) % 86400L;
h = ((epoch % 86400L) / 3600) % 24;
m = (epoch % 3600) / 60;
s = epoch % 60;
}
Схема подключения такая же как и в других проектах