Arduino uno+ds3231+max7219+7-ми сигментный индикатор

borysne
Offline
Зарегистрирован: 17.02.2015

Нужна помощь знающих людей! Только начал осваивать сей непростой девайс! Хочу заставить работать часы на 7-ми сегментном индикаторе! Сам процесс который будет происходить впринципи понимаю, но сказать немогу(т,е обьяснить его микроконтроллеру) нужна помощь с кодом поскольку остановаился почти в начале! перекопал множество информации в нете но так и не нашел примитивных часов на 7-ми сигментниках в таком исполнении и приложенным готовым кодом)! Помогите кто чем может) советом или ссылкой на скетч подобного! мой скетч прикладываю но он не рабочий поскольку в нем по сути только старт библиотек) хоть будет понятно к чему что подключенно наверное))) Основной вопрос с чтением данных с часов и выводом их на 7сигментный!?!?!?! И само програмирование Max72xx какие команды что означают?(пытаюсь вкурить как работает Ledcontrol библиотека с помощью http://playground.arduino.cc/Main/LedControl#.Uya7d_l_uNi)!

#include <DS3231.h>
#include <Wire.h>          //старт библиотек
#include "LedControl.h"

LedControl lc=LedControl(12,11,10,1); //пины подключения max72xx(для 1-го макса)
DS3231 Clock;         
byte hour, minute;  //это тоже не знаю взял со скетча часов
int clockPin pin //здесь нужно как то  задать пины часов я так понимаю часов (А4;А5)

void setup()

{
  Wire.begin();        //старт связи и как то надо указать что опросить(например часы)
  lc.shutdown(0,false);      //вкл max72xx 
  lc.setIntensity(0,8);        //яркость дисплея(сигмента)
  lc.clearDisplay(0);        // очистка дисплея
  
}
void ReadDS3231()

Основной вопрос с чтением данных с часов и выводом их на 7сигментный!?!?!?!

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

для начала считываем время. смотрим пример к часам

далее проверяем дисплей из примеров

и только после этого переходим к совместной работе

borysne
Offline
Зарегистрирован: 17.02.2015

Как то так? исправляийте и добовляйте!?

#include <DS3231.h>
#include <Wire.h>          //старт библиотек
#include "LedControl.h"

LedControl lc=LedControl(12,11,10,1); //пины подключения max72xx(для 1-го макса)
DS3231 Clock;     
byte hour, minute;  //это тоже не знаю взял со скетча часов
int clockPin pin //здесь нужно как то  задать пины часов я так понимаю часов (А4;А5)

void setup()

{
  Wire.begin();        //старт связи и как то надо указать что опросить(например часы)
     
}
  void ReadDS3231() //читаем время
  {
  int hour,minute,;
  hour=Clock.getHour(h12, PM);   //указываем что читать
  minute=Clock.getMinute();

  Serial.print(hour,DEC); //выводим часы
  Serial.print(':');      //":" между часами и минутами
  Serial.print(minute,DEC); //выводим минуты
}
 

  lc.shutdown(0,false);      //вкл max72xx
  lc.setIntensity(0,8);        //яркость дисплея(сигмента)
  lc.clearDisplay(0);        // очистка дисплея
 

void loop() {ReadDS3231();delay(1000); //читаем ds3231 с интервалом 1сек.

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

ну нет так нет

2009Shef
Offline
Зарегистрирован: 23.10.2014

Советую научиться работать с каждым из устройств отдельно желательно без использования библиотек ну или хотябы разобрать код библиотеку по частям и понять что каждая часть делает

вот например кусок кода для работы с DS1307 чтение значений текущего времени и даты при помощи стандартной библиотеки wire 

void getTime(void){
//Говорим DS что хотим из нее читать
  Wire.beginTransmission(0x68);
  Wire.write((uint8_t)0x00); // Установка адреса первого регистра
  Wire.endTransmission();
//Говорим ардуине что мы сейчас будем читать 7 байт с устройство на шыне I2C с адресом 0x68
  Wire.requestFrom(0x68, 7);
//собственно читаем последовательно вышеозначенные 7 байт (почему именно 7 смотри в документацию на DS1307(DS3231 стр 11))
  second = bcd2dec(Wire.read() & 0x7f);// читаем секунды
  minute = bcd2dec(Wire.read());     // читаем минуты
  hour = bcd2dec(Wire.read());       // читаем часы
  dow = bcd2dec(Wire.read());        // читаем день недели
  dow--;							//  корректируем формат дня недели из формата библиотеки (0...6) в формат DS (1...7)
  day = bcd2dec(Wire.read());       // читаем день
  month = bcd2dec(Wire.read());      // читаем месяц
  year = bcd2dec(Wire.read());       // читаем год двухзначный формат
  year = year + 2000;                   // корректируем год в четырехзначный формат
}

second, minute, hour, dow, day, month, year Это переменные для хранения текущих значений времени и даты формата uint8_t(беззнаковое целое 8 бит значения от 0 до 255) за исключением year - uint16_t(аналог unsigned int)

bcd2dec функция преобразует формат BCD в нем получаем значения от DS в обычный десятичный формат

uint8_t bcd2dec(uint8_t num)
{
  return ((num/16 * 10) + (num % 16));
}

в общем если с DS возникнут проблеммы могу помочь с max7219 сложнее с ней не работал но по описанию если вникнуть тоже ничего сложного

Вот почитайте как работать с max7219

http://radiohlam.ru/raznoe/max7219_7221.htm

borysne
Offline
Зарегистрирован: 17.02.2015

спасибо громадное! сейчас начну переваривать вашу информацию!)

borysne
Offline
Зарегистрирован: 17.02.2015

еще такой вопрос чтение времени должно происходить постоянно! значит его вводить! в void loop()! правильно?

borysne
Offline
Зарегистрирован: 17.02.2015

пока такой скетчик получается!!! но не проходит проверку чтения минут и часов!

#include <DS3231.h>
#include <Wire.h>          //старт библиотек
#include "LedControl.h"
 
LedControl lc=LedControl(12,11,10,1); //пины подключения max72xx(для 1-го макса)
DS3231 Clock;  

void setup() {

  lc.shutdown(0,false);  //вкл max72xx
  lc.setIntensity(0,8);  //яркость дисплея(сигмента)
  lc.clearDisplay(0);    // очистка дисплея
  }
  void getTime(void)
  {
  Wire.beginTransmission(0x68);//Говорим DS что хотим из нее читать
  Wire.write((uint8_t)0x00); // Установка адреса первого регистра
  Wire.endTransmission();
  
  Wire.requestFrom(0x68, 7);//Говорим ардуине что мы сейчас будем читать 7 байт с устройство на шыне I2C с адресом 0x68
  minute = bcd2dec(Wire.read());     // читаем минуты !!!не проходит проверку чтения!!!
  hour = bcd2dec(Wire.read());       // читаем часы   !!!не проходит проверку чтения!!!
  }
void writeArduinoOn7Segment(){
lc.setDigit(0,0,(min_now%10),false);
   lc.setDigit(0,1,(min_now/10),false);   
   lc.setDigit(0,2,(hour_now%10),sec_now % 2);     // впроцессе написания!!!   
if ((hour_now/10)>0){
     lc.setDigit(0,3,(hour_now/10),false);
   }
   else{
     lc.setChar(0,3,' ',false);
 }
}

void loop() 
getTime;//читаем время с ds3231
writeArduinoOn7Segment(); //постоянно выполняем условие под названием "ArduinoOn7Segment"

 

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

Я не специалист, но что-то мне кажется без wire.begin() ничего не получится

vvadim
Offline
Зарегистрирован: 23.05.2012

jeka_tm пишет:

для начала считываем время. смотрим пример к часам

далее проверяем дисплей из примеров

и только после этого переходим к совместной работе

 

Жека дал ДЕЛЬНЫЙ совет.

Научитесь сначала работать с часами и дисплеем по отдельности.

bwn
Offline
Зарегистрирован: 25.08.2014

vvadim пишет:

jeka_tm пишет:

для начала считываем время. смотрим пример к часам

далее проверяем дисплей из примеров

и только после этого переходим к совместной работе

 

Жека дал ДЕЛЬНЫЙ совет.

Научитесь сначала работать с часами и дисплеем по отдельности.

Неа, так не интересно, никакого секаса не получится)))

2009Shef
Offline
Зарегистрирован: 23.10.2014

Да без wire.begin() работать не будет, а также без обявления переменных.

Для начала скажите какую библиотеку для ds вы используете, а я помогу разобрать ее на части и понять что каждая часть кода делает и в каком порядке.

 

 

borysne
Offline
Зарегистрирован: 17.02.2015

2009Shef пишет:

Да без wire.begin() работать не будет, а также без обявления переменных.

Для начала скажите какую библиотеку для ds вы используете, а я помогу разобрать ее на части и понять что каждая часть кода делает и в каком порядке.

 

 

DS библиотеку использую DS3231.h

2009Shef
Offline
Зарегистрирован: 23.10.2014

И ссылочку где скачали а то штатный экстрасенс в отпуске

googl по запросу arduino DS3231 на 1 странице нашел минимум две библиотеки

Кстати вот полный код скетча для работы с DS1307 c DS3231 тоже бедет работать.

#include <Wire.h>
//Переменные для хранения текущего времени и даты
uint8_t second;
uint8_t minute;
uint8_t hour;
uint8_t dow;
uint8_t day;
uint8_t month;
uint16_t year;

//Вспомогательные переменные
unsigned long currentMillis = 0;
const char* dowSTR[7] = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"};

void setup() {
  Wire.begin();
  Serial.begin(9600);
// Ниже если нужно установить время и дату в скобках после if поставить 1 (if(1))
  if(0){
  stopClock();
  fillByYMD(2015, 2, 16); //дата в формате YYYY, MM, DD
  fillByHMS(20, 30, 40);  //Время в формате hh, mm, ss
  setDate_Time();
  startClock();
  }
  getTime();  //читаем время
  getDate();  // читаем дату
  print_Time();
}

void loop() {
  //проверка прошла ли секунда с момента последнего чтения
  if (currentMillis + 1000 <= millis()) {
    currentMillis = millis();
    getTime();  //читаем время
    getDate();  // читаем дату
    //Выводим то что прочитали в сериал порт
    print_Time();
  }
  //место для вашего кода
}

//Весь код ниже можно поместить в отдельную вкладку
//Функция выводит время и дату в сериал порт
void print_Time(){
    Serial.print(F("Current Time ")); //F() Это макрос который хранит строку в програмной памяти 
    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(F(" Current Data "));
    Serial.print(dowSTR[dow]);
    Serial.print(" ");
    Serial.print(day);
    Serial.print(".");
    if(month < 10){
      Serial.print("0");
    }
    Serial.print(month);
    Serial.print(".");
    Serial.println(year);
}

//Функция получения времени
void getTime() {
  //Говорим (отдаем команду по шине I2C) DS что хотим из нее читать
  Wire.beginTransmission(0x68); //говорим ардуино что сейчас будем чтото передавать для устройства I2C с адресом 0x68
  Wire.write((uint8_t)0x00); //говорим устройству встать на регистр с адресом 0x00
  Wire.endTransmission(); //Закрываем передачу
  //Говорим ардуине что мы сейчас будем читать 7 байт с устройство на шыне I2C с адресом 0x68
  Wire.requestFrom(0x68, 3);
  //собственно читаем последовательно вышеозначенные 7 байт (почему именно 7 смотри в документацию на DS1307(DS3231 стр 11))
  second = bcd2dec(Wire.read() & 0x7f);// читаем секунды
  minute = bcd2dec(Wire.read());     // читаем минуты
  hour = bcd2dec(Wire.read());       // читаем часы
}

//Функция получения даты
void getDate(void)
{
  Wire.beginTransmission(0x68);
  Wire.write((uint8_t)0x03);
  Wire.endTransmission();
  Wire.requestFrom(0x68, 4);     // Запрос данных
  dow = bcd2dec(Wire.read());    // читаем день недели
  dow--;		         //  корректируем формат дня недели из формат DS (1...7) в формата библиотеки (0...6)
  day = bcd2dec(Wire.read());    // читаем день
  month = bcd2dec(Wire.read());  // читаем месяц
  year = bcd2dec(Wire.read());   // читаем год двухзначный формат
  year = year + 2000;            // корректируем год в четырехзначный формат
}

//Функция остановки часов
void stopClock(){
  Wire.beginTransmission(0x68);
  Wire.write((uint8_t)0x00);                      // Адрес регистра содержащего бит CH = 0x00
  Wire.endTransmission();
  Wire.requestFrom(0x68, 1);
  second = Wire.read() | 0x80;                // Сохраняем секунды и устанавлеваем 7 бит (CH bit) в high
  Wire.beginTransmission(0x68);
  Wire.write((uint8_t)0x00);
  Wire.write((uint8_t)second);                 // Записываем секунды с установленным битом CH = часы остановленны
  Wire.endTransmission();
}

// Функция запуска часов
void startClock(){
  Wire.beginTransmission(0x68);
  Wire.write((uint8_t)0x00);                    // Адрес регистра содержащего бит CH = 0x00
  Wire.endTransmission();
  Wire.requestFrom(0x68, 1);
  second = Wire.read() & 0x7f;              // Сохраняем секунды и устанавлеваем 7 бит (CH bit) в low
  Wire.beginTransmission(0x68);
  Wire.write((uint8_t)0x00);
  Wire.write((uint8_t)second);                // Записываем секунды с установленным битом CH = часы запущенны
  Wire.endTransmission();
}

//Функция записи даты и времени в ds
void setDate_Time(){
  Wire.beginTransmission(0x68); //говорим ардуине что сейчас мы будем передавать данные в устройство I2C с адресом 0x68
  Wire.write((uint8_t)0x00); // устанавливаем адрес первого регистра (с него начнется запись данных устройством)
  //сама передача данных (после каждой команды Wire.write адрес регистра инкрементируется)
  Wire.write(dec2bcd(second) | 0x80);
  Wire.write(dec2bcd(minute));
  Wire.write(dec2bcd(hour) & 0x3f);
  Wire.write(dec2bcd(dow+1));
  Wire.write(dec2bcd(day));
  Wire.write(dec2bcd(month));
  Wire.write(dec2bcd(year-2000));
  Wire.endTransmission();
}
//Функция для утстановки времени в переменные в качестве параметров принимает часы, минуты, секунды
void fillByHMS(uint8_t h, uint8_t m, uint8_t s)
{
  hour = h;
  minute = m;
  second = s;
}

//функция для установки даты в переменные в качестве параметров принимает год, месяц, день
void fillByYMD(uint16_t y, uint8_t m, uint8_t d)
{
  year = y;
  month = m;
  day = d;
  calculate_dow();
}

//Функция считает день недели по дате
void calculate_dow(void) {
  int a = (14 - month)/12;
  int y = year - a;
  int m = month + 12 * a - 2;
  dow = (7000 + (day + y + y / 4 - y / 100 + y / 400 + (31 * m) / 12)) % 7;
}

//конвертация формата BCD в десятичный
uint8_t bcd2dec(uint8_t num)
{
  return ((num / 16 * 10) + (num % 16));
}
//конвертация из десятичного числа в BCD
uint8_t dec2bcd(uint8_t num)
{
  return ((num/10 * 16) + (num % 10));
}

Глянул тут в дш функция установки времени работать не будет там адрес регистра содержащего бит остановки хода другой

borysne
Offline
Зарегистрирован: 17.02.2015

Сори! много разных качал не помню где эту библиотеку так что выложу ссылку на нее в файлообменике!)

http://dropmefiles.com/6uaAs

borysne
Offline
Зарегистрирован: 17.02.2015

вот тоже чтото намудрил но проверку не проходит!((( может кто ошибку найдет)

#include <DS3231.h>
#include <Wire.h>
#include "LedControl.h"
LedControl lc=LedControl(12,11,10,1);
DS3231 Clock;
bool Century=false;
bool h12;
bool PM;
byte AHour, AMinute;
bool ADy, A12h, Apm;

byte hour, minute;

void setup() {
	// Start the I2C interface
	Wire.begin();
        Serial.begin(9600);
        lc.shutdown(0,false);  //вкл max72xx
        lc.setIntensity(0,1);  //яркость дисплея(сигмента)
        lc.clearDisplay(0);    // очистка дисплея
} 
void ReadDS3231()
{
  int minute,hour; 
 
  minute=Clock.getMinute();
  hour=Clock.getHour(h12, PM);
 
  Serial.print(hour,DEC);
  Serial.print(':');
  Serial.print(minute,DEC); 
  Serial.print('\n');
}

void writeArduinoOn7Segment(){
  lc.setDigit(0,0,(min_now%10),false);
  lc.setDigit(0,1,(min_now/10),false);     // впроцессе написания!!!
  lc.setDigit(0,2,(hour_now%10),sec_now % 2);
   if ((hour_now/10)>0){
     lc.setDigit(0,3,(hour_now/10),false);
   }
   else{
     lc.setChar(0,3,' ',false);
   }
}
void loop() 
ReadDS3231();delay(1000);
writeArduinoOn7Segment();

 

 

borysne
Offline
Зарегистрирован: 17.02.2015

borysne пишет:

вот тоже чтото намудрил но проверку не проходит!((( может кто ошибку найдет)

#include <DS3231.h>
#include <Wire.h>
#include "LedControl.h"
LedControl lc=LedControl(12,11,10,1);
DS3231 Clock;
bool Century=false;
bool h12;
bool PM;
byte AHour, AMinute;
bool ADy, A12h, Apm;

byte hour, minute;

void setup() {
	// Start the I2C interface
	Wire.begin();
        Serial.begin(9600);
        lc.shutdown(0,false);  //вкл max72xx
        lc.setIntensity(0,1);  //яркость дисплея(сигмента)
        lc.clearDisplay(0);    // очистка дисплея
} 
void ReadDS3231()
{
  int minute,hour; 
 
  minute=Clock.getMinute();
  hour=Clock.getHour(h12, PM);
 
  Serial.print(hour,DEC);
  Serial.print(':');
  Serial.print(minute,DEC); 
  Serial.print('\n');
}

void writeArduinoOn7Segment(){
  lc.setDigit(0,0,(min_now%10),false);
  lc.setDigit(0,1,(min_now/10),false);     // впроцессе написания!!!
  lc.setDigit(0,2,(hour_now%10),sec_now % 2);
   if ((hour_now/10)>0){
     lc.setDigit(0,3,(hour_now/10),false);
   }
   else{
     lc.setChar(0,3,' ',false);
   }
}
void loop() 
ReadDS3231();delay(1000);
writeArduinoOn7Segment();

 

 

поубирать все связаное с Ledcontrol все работает и выводит в сериал часы и минуты!

2009Shef
Offline
Зарегистрирован: 23.10.2014

Еще раз Разберитесь с КАЖДЫМ устройством отдельно.

if(хотите просто поиграться){

я вам здесь не помошник

}

else if(хотите написать код который будет работать так как задуманно){

 нужно понимать что Вы пишите и как это будет работать.

}

Простой пример у вас функция writeArduinoOn7Segment  в ней вы пытаетесь разбить двухзначное десятичное число на отделные два знака чтобы записать в MAX7219 хотя:

DS3231 выдает значения времени и даты в формате BCD, а MAX7219 принимает на входе BCD

 

borysne
Offline
Зарегистрирован: 17.02.2015

2009Shef пишет:

Еще раз Разберитесь с КАЖДЫМ устройством отдельно.

if(хотите просто поиграться){

я вам здесь не помошник

}

else if(хотите написать код который будет работать так как задуманно){

 нужно понимать что Вы пишите и как это будет работать.

}

Простой пример у вас функция writeArduinoOn7Segment  в ней вы пытаетесь разбить двухзначное десятичное число на отделные два знака чтобы записать в MAX7219 хотя:

DS3231 выдает значения времени и даты в формате BCD, а MAX7219 принимает на входе BCD

 

ок! пошел я в дебри,  max7219  ковырять и разбиратся!

borysne
Offline
Зарегистрирован: 17.02.2015

Нужна часть кода где с часов ds3231 считывается значение часов и воспроизводится через max7219 на 7-ми сегментнике!!! Скинь у кого есть хоть что то я под себе уже подгоню!

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

)))) ну ты упертый

vosara52
Offline
Зарегистрирован: 28.11.2014

Я делал вот так но с выводом на экран, посмотри можт поможет

#include "DS3231.h" //Подключаем библиотеку часов

byte year, month, date, DoW, hour, minute, second;//Перем времени

void wraitData() //Установка часов и даты
{
  Clock.setSecond(00);//Установка second (секунд)
  Clock.setMinute(22);//Установка minute (минуты)
  Clock.setHour(12); //Установка hour (часов)
  //Clock.setDoW(2); //Установка day (день недели)
  //Clock.setDate(23); //Установка date (дата месяца)
  //Clock.setMonth(12); //Установка month (месяц года)
  //Clock.setYear(14); //Установка year (Года)
}

// Выводим текущие время
void printTimeToSerial()
{
	Clock.getTime(year, month, date, DoW, hour, minute, second);
  //Clock.getTemperature();
  byte static prevSecond = 0; // тут будем хранить, сколько секунд было при прошлом отчете

  if (second != prevSecond) // что-то делаем только если секунды поменялись
  {
    sekA = second; // секунды
    if (sekA < 10)
    {
    	lcd.setCursor(7, 1);
    	lcd.print(" ");
    	lcd.setCursor(8, 1);
    	lcd.print(sekA);
    }
    if (sekA >= 10)
    {
    	lcd.setCursor(7, 1);
    	lcd.print(sekA);
    }

    minA = minute; // минуты
    min10 = minA / 10;
    vubor(min10, 9);
    min1 = minA % 10;
    vubor(min1, 13);

    // chas2 = hour; // часы
    chas2 = RTC.get(DS1307_HR, true);
    if (chas2 < 10)
    {
    	chas1 = chas2;
    	lcd.setCursor(0, 0);
    	lcd.print("   ");
    	lcd.setCursor(0, 1);
    	lcd.print("   ");
    	lcd.setCursor(7, 0);
      lcd.print("  "); //Очищаем над секундами
      vubor(chas1, 4);
  }
    //   if (chas2 >= 24) chas2 = 0;
    if (chas2 >= 10)
    {
    	chas = chas2 / 10;
    	vubor(chas, 0);
    	chas1 = chas2 % 10;
    	vubor(chas1, 4);
    }
    prevSecond = second; // запомнили когда мы "отчитались"
}
}

 

borysne
Offline
Зарегистрирован: 17.02.2015

jeka_tm пишет:

)))) ну ты упертый

надо ж разобраться!) по отдельности с каждым устройством работать могу! Ты говоришь смотреть примеры! Смотрю например с часами в примерах вывод времени в serial! В ledcontrol для max7219 пропись букв и цифр! Как мне время вывести через max7219 на семисигментник в какой пример смотреть??? Поэтому я и создал тему чтоб может кто то скетч скинул! У всех просто lcd или матрицы 8x8!!!

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Так бы и сказал.проверил по отдельности все рабочее.доеду дома объясню что делать дальше

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

ты просто число 1235 например можешь вывести? если приложи фото и код как выводил

mkvmaks
Offline
Зарегистрирован: 07.07.2013

Элементарный вопрос: как выложить  число 123 просто  на  дисплей без бибилотеки?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

для этого нужно знать как работает max7219

а если не хочешь знать, но хочешь чтобы работало, используешь либу

mkvmaks
Offline
Зарегистрирован: 07.07.2013

Пишу в этой ветке, т.к. в других пока  тишина -  случайно не  работали  с  pt6961?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

нет. зачем. max7219 же есть

borysne
Offline
Зарегистрирован: 17.02.2015

jeka_tm пишет:

ты просто число 1235 например можешь вывести? если приложи фото и код как выводил

что за сомнения вот код!

#include <LedControl.h>

LedControl lc=LedControl(12,11,10,1);
void setup() {

  lc.shutdown(0,false);
  lc.setIntensity(0,1);
  lc.clearDisplay(0);
}

void loop()
{

 lc.setDigit(0,3,1,false); // первая цыфра "0" номер макса, вторая номер сигмента, третья цифра. которая должна гореть!Fasle-on? true-off
 lc.setDigit(0,2,2,false);
 lc.setDigit(0,1,3,false);
 lc.setDigit(0,0,5,false);
 
 delay(1000);

}

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

попробуй

#include <DS3231.h>
#include <Wire.h>
#include "LedControl.h"
LedControl lc=LedControl(12,11,10,1);
DS3231 Clock;
bool Century=false;
bool h12;
bool PM;
byte AHour, AMinute;
bool ADy, A12h, Apm;

byte hour, minute;

void setup() {
  Wire.begin();
  lc.shutdown(0,false);  //вкл max72xx
  lc.setIntensity(0,1);  //яркость дисплея(сигмента)
  lc.clearDisplay(0);    // очистка дисплея
} 
void loop() {
  minute=Clock.getMinute();
  hour=Clock.getHour(h12, PM);

  lc.setDigit(0,0,minute/10,false); // первая цыфра "0" номер макса, вторая номер сигмента, третья цифра которая должна гореть!Fasle-on? true-off
  lc.setDigit(0,1,hour%10,false);
  lc.setDigit(0,2,hour/10,false);
  lc.setDigit(0,3,minute%10,false);

}

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

хотя и не нравится мне этот кусок

bool h12;
bool PM;
byte AHour, AMinute;
bool ADy, A12h, Apm;

он почти бесполезный. как будто чего то не хватает

borysne
Offline
Зарегистрирован: 17.02.2015

пишут 62 24

похоже все зеркально ща поиграюсь!

borysne
Offline
Зарегистрирован: 17.02.2015

вот так все четко)))

#include <DS3231.h>
#include <Wire.h>
#include "LedControl.h"
LedControl lc=LedControl(12,11,10,1);
DS3231 Clock;
bool Century=false;
bool h12;
bool PM;
byte AHour, AMinute;
bool ADy, A12h, Apm;

byte hour, minute;

void setup() {
  Wire.begin();
  lc.shutdown(0,false);  //вкл max72xx
  lc.setIntensity(0,1);  //яркость дисплея(сигмента)
  lc.clearDisplay(0);    // очистка дисплея
} 
void loop() {
  minute=Clock.getMinute();
  hour=Clock.getHour(h12, PM);

  lc.setDigit(0,1,minute/10,false); // первая цыфра "0" номер макса, вторая номер сигмента, третья цифра которая должна гореть!Fasle-on? true-off
  lc.setDigit(0,2,hour%10,false);
  lc.setDigit(0,3,hour/10,false);
  lc.setDigit(0,0,minute%10,false);

}

 

borysne
Offline
Зарегистрирован: 17.02.2015

jeka_tm пишет:

хотя и не нравится мне этот кусок

bool h12;
bool PM;
byte AHour, AMinute;
bool ADy, A12h, Apm;

он почти бесполезный. как будто чего то не хватает

спасибо друг! дай бог тебе здоровья))) я ж говорь вроде понимаю как должно работать, а сказать т.е написать немогу))) спасибо еще раз!) осталось еще точки мигающие сделать)))

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

на этом все?

borysne
Offline
Зарегистрирован: 17.02.2015

И еще вопрос с кнопками выставления времини(часов и минут) где то находил скетчи но уже не помню столько пересмотрел!

хочу все облагородить и сдель 2-ве кнопки для настройки! опять нужна помощь с кодом?!?!?!)))

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

смотри работа с кнопками на этом форуме

и узнай как в либе выставить время

borysne
Offline
Зарегистрирован: 17.02.2015

jeka_tm пишет:

смотри работа с кнопками на этом форуме

и узнай как в либе выставить время

что за либа?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

либа для часов