Бинарные часы. Доработка.
- Войдите на сайт для отправки комментариев
Втр, 26/01/2016 - 22:59
Всем привет! Захотел собрать бинарные часики. Хочу поставить на полочку и говорить всем какой я молодец, и как мне помогли форумчане сайта ардуино)) Вообщем в данном скетче нужно кое что изменить. Время должно отображаться в 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); }
Чтобы был 24 часовой формат достаточно убрать 62 строку.
yaryarikyar@ya.ru
Быстро, качественно, недорого)
Выбирайте любые 2 пункта)).
Можно упростить. Без hc595. Ди и без DS, если сильно хочется. htpicc@gmail.com
не, нужно что бы и время не сбрасывалось, и выходов немного занимало. 24 часовой формат сделал, осталось разобраться как сделать подстройку времени, а еще хочу попробовать вывести температуру, тоже в двоичном коде. Добавил еще один сдвиговый регистр для отображения секунд. на их месте и хотел сделать температуру. Пока не вышло...
Так и не будет сбрасываться. А с кучей доп. компонентов и любой сделает.))
Так и не будет сбрасываться. А с кучей доп. компонентов и любой сделает.))
Мне не жалко 30р за RTC. точность хода и независимая память. а 74hc595, 10 штук за 50р вообще не деньги
Чего-то я не вкурил зачем такая городушка и почему не повесить светодиоды на ноги процессора сразу? :)
Так и не будет сбрасываться. А с кучей доп. компонентов и любой сделает.))
Мне не жалко 30р за RTC. точность хода и независимая память. а 74hc595, 10 штук за 50р вообще не деньги
Дак, с RTC, с 74hc595 - это любой сделает.