Официальный сайт компании Arduino по адресу arduino.cc
Суточный таймер с DS1307, без экрана
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Втр, 03/05/2016 - 15:54
Здравствуйте.
Опыта можно сказать 0. Подскажите пожалуйста код. Примеры которые пересмотрел - с использование экрана, у меня без него. А выпилить ненужное - ума не хватает.
Идея: uno, DS1307 и 4 канальное реле. Нужно каждый день в 20:00 включать реле один канал, в 5 утра выключать. DS1307 - время установлено.
С остальными каналами буду сам разбираться.
Спасибо
Нашел код, но он не фурычит:
#include <DS1307RTC.h> #include <Wire.h> #define DS1307_I2C_ADDRESS 0x68 const byte outPin = 7; // выход на реле byte setMinClockOn; // byte setHorClockOn; byte setMinClockOff; // byte setHorClockOff; /////////// часы .. byte decToBcd(byte val){ return ( (val/10*16) + (val%10) ); } byte bcdToDec(byte val){ return ( (val/16*10) + (val%16) ); } void setDateDs1307(byte second, // 0-59 byte minute, // 0-59 byte hour, // 1-23 byte dayOfWeek, // 1-7 byte dayOfMonth, // 1-28/29/30/31 byte month, // 1-12 byte year) // 0-99 { Wire.beginTransmission(DS1307_I2C_ADDRESS); Wire.write(0); Wire.write(decToBcd(second)); Wire.write(decToBcd(minute)); Wire.write(decToBcd(hour)); Wire.write(decToBcd(dayOfWeek)); Wire.write(decToBcd(dayOfMonth)); Wire.write(decToBcd(month)); Wire.write(decToBcd(year)); Wire.endTransmission(); } void getDateDs1307(byte *second, byte *minute, byte *hour, byte *dayOfWeek, byte *dayOfMonth, byte *month, byte *year) { Wire.beginTransmission(DS1307_I2C_ADDRESS); Wire.write(0); Wire.endTransmission(); Wire.requestFrom(DS1307_I2C_ADDRESS, 7); *second = bcdToDec(Wire.read() & 0x7f); *minute = bcdToDec(Wire.read()); *hour = bcdToDec(Wire.read() & 0x3f); *dayOfWeek = bcdToDec(Wire.read()); *dayOfMonth = bcdToDec(Wire.read()); *month = bcdToDec(Wire.read()); *year = bcdToDec(Wire.read()); } void setup(){ Wire.begin(); pinMode(outPin, OUTPUT); digitalWrite(outPin, LOW); } void loop() { byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); // сравниваем время и управляем выходом// if (setMinClockOff == minute && setHorClockOff == hour && second == 0) digitalWrite(outPin, LOW); if (setMinClockOn == minute && setHorClockOn == hour && second == 0) digitalWrite(outPin, HIGH); }
Попробуйте так:
Тоже много времени потратил на создание подобного таймера, всё никак не мог добиться нужного. В итоге плюнул на ардуино и собрал на пике. Деталей - кот наплакал.
http://smartelectronix.biz/publ/prostoj_ciklicheskij_sutochnyj_tajmer_s_...
Там и на 3 канала есть
Попробуйте так:
Спасибо.
Ругается:
Arduino: 1.6.8 (Mac OS X), Плата:"Arduino/Genuino Uno"
Может у Вас библиотека другая, у меня скомпилировалось без проблем "arduino-1.6" Но принцып я думаю понятен
Можно у вас попросить выложить куда-нибудь вашу библиотеку?
Спасибо
https://www.dropbox.com/sh/iixwfdg4qcmedl8/AAAWPRX5M1_Qqxr_Lps6_Jhya?dl=0
https://www.dropbox.com/sh/iixwfdg4qcmedl8/AAAWPRX5M1_Qqxr_Lps6_Jhya?dl=0
Не получается ничего. С ваше библиотекой ошибка:
n file included from /Users/111Dropbox/ihouse/sketch_may08a/sketch_may08a.ino:1:0:
Другие же библитеки дают ошибки:
sketch_may08a:35: error: 'class DS1307RTC' has no member named 'stop'
Где-то нашел библитеку, поставил, заработала.
Другая проблема: отключаю питание, DS1307 останавливается:
Не пойму зачем в этом коде "Объявляем функцию установки даты и времени"?