Бинарные часы. Доработка.

Tails_MP
Tails_MP аватар
Offline
Зарегистрирован: 11.11.2015

Всем привет! Захотел собрать бинарные часики. Хочу поставить на полочку и говорить всем какой я молодец, и как мне помогли форумчане сайта ардуино)) Вообщем в данном скетче нужно кое что изменить.    Время должно отображаться в 24 часовом формате. То есть нужно будет добавить еще один светодиод к первому регистру Благо ног на них хватает. Добавить подстройку часов и минут двумя или более кнопок. И RTC у меня не 1307, а 3231. Но это по моему сути дела не меняет. Исполнителю помогу копеечкой. Ссылка на исходник    http://nnm.me/blogs/oleg_karp/arduino-delaem-shild-binarnye-chasy-2/

 

#include "Wire.h"
#define DS1307_ADDRESS 0x68
int latchPin = 8;
//Pin connected to SH_CP of 74HC595
int clockPin = 13;
////Pin connected to DS of 74HC595
int dataPin = 11;
void setup(){
Wire.begin();
// setDateTime(); // Первый раз запустит для установки текущего времени, второй раз запускаем "закоментированно"
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop(){
printDate();
delay(1000);
}
void setDateTime(){
byte second = 0; //0-59
byte minute = 05; //0-59
byte hour = 18; //0-23
byte weekDay = 2; //1-7
byte monthDay = 8; //1-31
byte month = 11; //1-12
byte year = 11; //0-99
Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(0); //stop Oscillator
Wire.write(decToBcd(second));
Wire.write(decToBcd(minute));
Wire.write(decToBcd(hour));
Wire.write(decToBcd(weekDay));
Wire.write(decToBcd(monthDay));
Wire.write(decToBcd(month));
Wire.write(decToBcd(year));
Wire.write(0); //start 
Wire.endTransmission();
}
byte decToBcd(byte val){
// Convert normal decimal numbers to binary coded decimal
return ( (val/10*16) + (val%10) );
}
byte bcdToDec(byte val) {
// Convert binary coded decimal to normal decimal numbers
return ( (val/16*10) + (val%16) );
}
void printDate(){
// Reset the register pointer
Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(0);
Wire.endTransmission();
Wire.requestFrom(DS1307_ADDRESS, 7);
int second = bcdToDec(Wire.read());
int minute = bcdToDec(Wire.read());
int hour = bcdToDec(Wire.read() & 0b111111); //24 hour time
int weekDay = bcdToDec(Wire.read()); //0-6 -> sunday — Saturday
int monthDay = bcdToDec(Wire.read());
int month = bcdToDec(Wire.read());
int year = bcdToDec(Wire.read());


if (hour>12) hour=hour-12;
digitalWrite(latchPin, 0);
//count up on GREEN LEDs
shiftOut(dataPin, clockPin,MSBFIRST, minute); 
//count down on RED LEDs
shiftOut(dataPin, clockPin,MSBFIRST, hour);
//return the latch pin high to signal chip that it 
//no longer needs to listen for information
digitalWrite(latchPin, 1);
}

 

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

Чтобы был 24 часовой формат достаточно убрать 62 строку.

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

yaryarikyar@ya.ru
Быстро, качественно, недорого)

Green
Offline
Зарегистрирован: 01.10.2015

Выбирайте любые 2 пункта)).

Можно упростить. Без hc595. Ди и без DS, если сильно хочется. htpicc@gmail.com

Tails_MP
Tails_MP аватар
Offline
Зарегистрирован: 11.11.2015

не, нужно что бы и время не сбрасывалось, и выходов немного занимало. 24 часовой формат сделал, осталось разобраться как сделать подстройку времени, а еще хочу попробовать вывести температуру, тоже в двоичном коде. Добавил еще один сдвиговый регистр для отображения секунд. на их месте и хотел сделать температуру. Пока не вышло...

#include "Wire.h"
//#include <DS3231.h>
#define DS3231_ADDRESS 0x68
int latchPin = 8;
//Pin connected to SH_CP of 74HC595
int clockPin = 13;
////Pin connected to DS of 74HC595
int dataPin = 11;
void setup(){
Wire.begin();
// setDateTime(); // Первый раз запустит для установки текущего времени, второй раз запускаем "закоментированно"
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop(){
printDate();
delay(1000);
}
void setDateTime(){
byte second = 0; //0-59
byte minute = 05; //0-59
byte hour = 18; //0-23
byte dow = 2; //1-7
byte day = 8; //1-31
byte month = 11; //1-12
byte year = 11; //0-99
byte getTemp = 0;
Wire.beginTransmission(DS3231_ADDRESS);
Wire.write(0); //stop Oscillator
Wire.write(decToBcd(second));
Wire.write(decToBcd(minute));
Wire.write(decToBcd(hour));
Wire.write(decToBcd(day)); //число
Wire.write(decToBcd(dow)); //день недели
Wire.write(decToBcd(month));
Wire.write(decToBcd(year));
Wire.write(decToBcd(getTemp));
Wire.write(0); //start 
Wire.endTransmission();
}
byte decToBcd(byte val){
// Convert normal decimal numbers to binary coded decimal
return ( (val/10*16) + (val%10) );
}
byte bcdToDec(byte val) {
// Convert binary coded decimal to normal decimal numbers
return ( (val/16*10) + (val%16) );
}
void printDate(){
// Reset the register pointer
Wire.beginTransmission(DS3231_ADDRESS);
Wire.write(0);
Wire.endTransmission();
Wire.requestFrom(DS3231_ADDRESS, 7);
int second = bcdToDec(Wire.read());
int minute = bcdToDec(Wire.read());
int hour = bcdToDec(Wire.read() & 0b111111); //24 hour time
int dow = bcdToDec(Wire.read()); //0-6 -> sunday — Saturday
int day = bcdToDec(Wire.read());
int month = bcdToDec(Wire.read());
int year = bcdToDec(Wire.read());
int getTemp = bcdToDec(Wire.read());

//if (hour>12) hour=hour-12;
digitalWrite(latchPin, 0);
//count up on GREEN LEDs
shiftOut(dataPin, clockPin,MSBFIRST, second);
shiftOut(dataPin, clockPin,MSBFIRST, minute); 
//count down on RED LEDs
shiftOut(dataPin, clockPin,MSBFIRST, hour);
//return the latch pin high to signal chip that it 
//no longer needs to listen for information
digitalWrite(latchPin, 1);
}

 

Green
Offline
Зарегистрирован: 01.10.2015

Так и не будет сбрасываться. А с кучей доп. компонентов и любой сделает.))

Tails_MP
Tails_MP аватар
Offline
Зарегистрирован: 11.11.2015

Green пишет:

Так и не будет сбрасываться. А с кучей доп. компонентов и любой сделает.))

Мне не жалко 30р за RTC. точность хода и независимая память. а 74hc595, 10 штук за 50р вообще не деньги

faeton
faeton аватар
Offline
Зарегистрирован: 21.03.2016

Чего-то я не вкурил зачем такая городушка и почему не повесить светодиоды на ноги процессора сразу? :)

Green
Offline
Зарегистрирован: 01.10.2015

Tails_MP пишет:

Green пишет:

Так и не будет сбрасываться. А с кучей доп. компонентов и любой сделает.))

Мне не жалко 30р за RTC. точность хода и независимая память. а 74hc595, 10 штук за 50р вообще не деньги

Дак, с RTC,  с 74hc595 - это любой сделает.