Остальное это время и длительность восхода - заката ,термометр на экране ноли показывает. Буду пробовать. Спасибо вам если что обращусь к вам,если вы не против.
Остальное это время и длительность восхода - заката ,термометр на экране ноли показывает. Буду пробовать. Спасибо вам если что обращусь к вам,если вы не против.
Рад что помог. Обрасщайтесь
p.s. Есть хорошие проекты инкубаторов, брудеров (если интересно?)
Помогите разобратся с этим чёртовым кодом, как настороить время и длительность восхода и заката ,а то я походу сам не разберусь в этой хрени! Что куда вставлять подменять,для меня эти константы и подобное космос. Спасибо.
#include <Wire.h> //Подключаем библиотеку для использования I2C интерфейса с модулем RTC
#include <LiquidCrystal_I2C.h> // библиотека экрана
LiquidCrystal_I2C lcd(0x3F,20,4);
int PWM_LW_MIN = 0; //Если необходим ток покоя на LED - изменить эту константу
int PWM_LW_MAX = 250; //Если необходимо ограничить максимальную яркость - уменьшить значение
#define PWM_LW_PIN 3 //Пин порта, где будет ШИМ LW
#define mn 60UL //Дополнительные константы для удобства
#define hr 3600UL //Отражают соответствующие количества секунд
#define d 86400UL
RTC_DS1307 RTC;
int RH = 0;
int RM = 0;
int RD = 0;
int ZH = 0;
int ZM = 0;
int ZD = 0;
int PS = 0;
int ScD = 250;
int ScN = 50;
const int buttonPin = 2;
int buttonState = 0;
const int buttonPin2 = 4;
int buttonState2 = 0;
const int buttonPin3 = 5;
int buttonState3 = 0;
int pos = 1;
long sunrise_start = RH*hr+RM*mn; //Начало восхода в 9 - 45
long sunrise_duration = RD*mn; //Длительность восхода 30 минут
long sunset_start = ZH*hr+ZM*mn; //начало заката в 21-15
long sunset_duration = ZD*mn; //Длительность заката 30 минут
long pwm_LW;
DateTime myTime = RTC.now(); //Читаем данные времени из RTC при каждом выполнении цикла
long Day_time = myTime.unixtime() % 86400; //сохраняем в переменную - время в формате UNIX
if ((Day_time<sunrise_start) || //Если с начала суток меньше чем начало восхода
(Day_time>=sunset_start+sunset_duration)) { //Или больше чем начало заката + длительность
pwm_LW = PWM_LW_MIN; //Величина для записи в порт равна минимуму
//*********************************************************************************************
// обработка интервала восхода
//*********************************************************************************************
}else if ((Day_time>=sunrise_start) && //Если с начала суток больше чем начало восхода
(Day_time<sunrise_start+sunrise_duration)){ //И меньше чем начало восхода + длительность
pwm_LW = ((Day_time - sunrise_start)*(PWM_LW_MAX-PWM_LW_MIN)) / sunrise_duration; //Вычисляем для рассвета величину для записи в порт ШИМ
//*********************************************************************************************
// обработка интервала заката
//*********************************************************************************************
}else if ((Day_time>=sunset_start) && //Если начала суток больше чем начало заката и меньше чем
(Day_time<sunset_start+sunset_duration)){ //начало заката плюс длительность
pwm_LW = ((sunset_start+sunset_duration - Day_time)*(PWM_LW_MAX-PWM_LW_MIN)) / sunrise_duration; //Вычисляем для заката величину для записи в порт ШИМ
//********************************************************************************************
// обработка интервала от конца рассвета и до начала заката,
// когда свет должен быть включен на максимальную яркость
//********************************************************************************************
}else {
pwm_LW = PWM_LW_MAX; //Устанавливаем максимальную величину для записи в порт ШИМ
}
analogWrite(PWM_LW_PIN, pwm_LW); //Пишем в порт вычисленное значение
Помогите разобратся с этим чёртовым кодом, как настороить время и длительность восхода и заката ,а то я походу сам не разберусь в этой хрени! Что куда вставлять подменять,для меня эти константы и подобное космос. Спасибо.
В программе выставляется только дата и время 1 раз во время прошивки (в строке как в 45 посту).
у тебя в этой строке написано так:
//RTC.adjust(DateTime(2018, 5, 28, 21, 07, 1));
установи так
RTC.adjust(DateTime(2018, 5, 28, 21, 07, 1));
Остальные похожие строки должны начинаться с //
Время восхода, длительность восхода, время заката, длительность заката и т.д. выставляется кнопками на экране LCD
Просто после того как на экране выставил все параметры доходишь до меню SAVE TO MEMORY нужно нажать ОК (среднюю кнопку) на экране пробегут звездочки******** и данные запишутся в память.
Проблема в том что две кнопки которые должны делать настройки ,не работают, работает только которая переберает режимы РАССВЕТ СТАРТ ЗАКАТ СТАРТ ну и т.д а две никак не реагируют. Не понимаю почему,либо из за того что у меня собрано все на Pro Mini либо эта Про Мини бракованая.
Проблема в том что две кнопки которые должны делать настройки ,не работают, работает только которая переберает режимы РАССВЕТ СТАРТ ЗАКАТ СТАРТ ну и т.д а две никак не реагируют. Не понимаю почему,либо из за того что у меня собрано все на Pro Mini либо эта Про Мини бракованая.
про резисторы 10кОм на входы (к кнопкам) не забыл? Кнопки к выводам 2,4,5
ivan1984, видео вряд ли кому-то интересно... если бы вывместо этого скетч нормально вставили - можно было бы подсказать вам, в какие строки вставить значения рассвета и заката без вских кнопок.
Из видео такое ощущение что идет наводка на провода, для начала укаратить провода покороче или с резисторами что то не так (не правильно подключены). Я бы для проверки подключил бы без кнопки просто провода с резисторами прямо к ардуинке и проверил (зачастую сами кнопки с "приветом").
Просто изменить цифры отмеченные красными кружками и всё?
это номинация на пост года :))))
Это комментарии, парень :))) Может все-таки прочитаешь какой-нибудь букварик по программированию, прежде чем поделки собирать? А то не дай бог устроишь пожар в птичнике... похоже пока твои куры больше тебя понимают в ардуино :)
Не переживай за пожар и кур всё под контролем. Некогда мне програмирование учить,хотя желание есть. На счет ума не всё так плохо как ты думаеш! Ок. Спасибо за подсказки и критику.
Просто изменить цифры отмеченные красными кружками и всё?
это номинация на пост года :))))
Это комментарии, парень :))) Может все-таки прочитаешь какой-нибудь букварик по программированию, прежде чем поделки собирать? А то не дай бог устроишь пожар в птичнике... похоже пока твои куры больше тебя понимают в ардуино :)
Не надо строить из себя "профи". Все мы так начинали, на ошибках учатся.
ivan1984 все что стоит после знаков // является пояснениями для человека (т.е. помощь, что делает та или иная строка). Если в начале строки стоят такие символы данная строка игнорируется (не выполняется).
Вам нужен многоканальный таймер на 49 суток? Их есть у меня. :-)
Хотелось бы взглянуть.
Спасибо часы настроил,осталось всё остальное)))
Спасибо часы настроил,осталось всё остальное)))
Остальное это что?
Остальное это время и длительность восхода - заката ,термометр на экране ноли показывает. Буду пробовать. Спасибо вам если что обращусь к вам,если вы не против.
Остальное это время и длительность восхода - заката ,термометр на экране ноли показывает. Буду пробовать. Спасибо вам если что обращусь к вам,если вы не против.
Рад что помог. Обрасщайтесь
p.s. Есть хорошие проекты инкубаторов, брудеров (если интересно?)
Помогите разобратся с этим чёртовым кодом, как настороить время и длительность восхода и заката ,а то я походу сам не разберусь в этой хрени! Что куда вставлять подменять,для меня эти константы и подобное космос. Спасибо.
#include <Wire.h> //Подключаем библиотеку для использования I2C интерфейса с модулем RTC
#include <OneWire.h>
#include <DallasTemperature.h>
#include "RTClib.h" //Подключаем библиотеку для использования модуля часов реального времени RTC
#include <EEPROM.h>
OneWire oneWire(A3);
DallasTemperature ds(&oneWire);
#include <LiquidCrystal_I2C.h> // библиотека экрана
LiquidCrystal_I2C lcd(0x3F,20,4);
int PWM_LW_MIN = 0; //Если необходим ток покоя на LED - изменить эту константу
int PWM_LW_MAX = 250; //Если необходимо ограничить максимальную яркость - уменьшить значение
#define PWM_LW_PIN 3 //Пин порта, где будет ШИМ LW
#define mn 60UL //Дополнительные константы для удобства
#define hr 3600UL //Отражают соответствующие количества секунд
#define d 86400UL
RTC_DS1307 RTC;
int RH = 0;
int RM = 0;
int RD = 0;
int ZH = 0;
int ZM = 0;
int ZD = 0;
int PS = 0;
int ScD = 250;
int ScN = 50;
const int buttonPin = 2;
int buttonState = 0;
const int buttonPin2 = 4;
int buttonState2 = 0;
const int buttonPin3 = 5;
int buttonState3 = 0;
int pos = 1;
//********************************************************************************************
void setup(){
Serial.begin(9600);
Wire.begin(); //Инициируем I2C интерфейс
RH = EEPROM.read(0);
RM = EEPROM.read(1);
RD = EEPROM.read(2);
ZH = EEPROM.read(3);
ZM = EEPROM.read(4);
ZD = EEPROM.read(5);
ds.begin();
RTC.begin(); //Инициирум RTC модуль
pinMode(buttonPin, INPUT);
pinMode(buttonPin2, INPUT);
pinMode(buttonPin3, INPUT);
lcd.init(); // запускаем библиотеку экрана
lcd.backlight();
if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");
RTC.adjust(DateTime(2018, 5, 28, 21, 07, 1));
}
RTC.adjust(DateTime(2018, 5, 28, 21, 07, 1));
RTC.adjust(DateTime(__DATE__, __TIME__));
} // КОНЕЦ ИНИЦИАЛИЗАЦИИ
//********************************************************************************************
void loop() // ПРОГРАММЫй безусловный ЦИКЛ
{
long sunrise_start = RH*hr+RM*mn; //Начало восхода в 9 - 45
long sunrise_duration = RD*mn; //Длительность восхода 30 минут
long sunset_start = ZH*hr+ZM*mn; //начало заката в 21-15
long sunset_duration = ZD*mn; //Длительность заката 30 минут
long pwm_LW;
DateTime myTime = RTC.now(); //Читаем данные времени из RTC при каждом выполнении цикла
long Day_time = myTime.unixtime() % 86400; //сохраняем в переменную - время в формате UNIX
if ((Day_time<sunrise_start) || //Если с начала суток меньше чем начало восхода
(Day_time>=sunset_start+sunset_duration)) { //Или больше чем начало заката + длительность
pwm_LW = PWM_LW_MIN; //Величина для записи в порт равна минимуму
//*********************************************************************************************
// обработка интервала восхода
//*********************************************************************************************
}else if ((Day_time>=sunrise_start) && //Если с начала суток больше чем начало восхода
(Day_time<sunrise_start+sunrise_duration)){ //И меньше чем начало восхода + длительность
pwm_LW = ((Day_time - sunrise_start)*(PWM_LW_MAX-PWM_LW_MIN)) / sunrise_duration; //Вычисляем для рассвета величину для записи в порт ШИМ
//*********************************************************************************************
// обработка интервала заката
//*********************************************************************************************
}else if ((Day_time>=sunset_start) && //Если начала суток больше чем начало заката и меньше чем
(Day_time<sunset_start+sunset_duration)){ //начало заката плюс длительность
pwm_LW = ((sunset_start+sunset_duration - Day_time)*(PWM_LW_MAX-PWM_LW_MIN)) / sunrise_duration; //Вычисляем для заката величину для записи в порт ШИМ
//********************************************************************************************
// обработка интервала от конца рассвета и до начала заката,
// когда свет должен быть включен на максимальную яркость
//********************************************************************************************
}else {
pwm_LW = PWM_LW_MAX; //Устанавливаем максимальную величину для записи в порт ШИМ
}
analogWrite(PWM_LW_PIN, pwm_LW); //Пишем в порт вычисленное значение
if (Day_time>=sunrise_start && Day_time<=sunset_start ){
analogWrite(11, ScD);
}
else {
analogWrite(11, ScN);
}
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
pos++;
lcd.clear();
delay (250);
}
if (pos == 11 || pos > 11){
lcd.clear();
pos=1;
}
switch (pos){
case 1:
ds.requestTemperatures();
//lcd.clear();
lcd.setCursor(8,1);
lcd.print("t ");
lcd.print(ds.getTempCByIndex(0));
lcd.print("C");
lcd.setCursor(0,0);
lcd.print("AQUA");
lcd.setCursor(6,0);
if (myTime.day() < 10) lcd.print("0");
lcd.print(myTime.day(),DEC);
lcd.print("/");
if (myTime.month() < 10) lcd.print("0");
lcd.print(myTime.month(),DEC);
lcd.print("/");
lcd.print(myTime.year(),DEC);
lcd.setCursor(0,1);
if (myTime.hour() < 10) lcd.print("0");
lcd.print(myTime.hour(),DEC);
lcd.print(":");
if (myTime.minute() < 10) lcd.print("0");
lcd.print(myTime.minute(),DEC);
break;
case 2:
lcd.setCursor(1,0);
lcd.print("RASSVET START");
buttonState2 = digitalRead(buttonPin2);
if (buttonState2 == HIGH) {
RH++;
delay(100);
}
if (RH >= 24) {
RH = 0;
}
buttonState3 = digitalRead(buttonPin3);
if (buttonState3 == HIGH) {
RM++;
delay(100);
}
if (RM >= 60) {
RM = 0;
}
lcd.setCursor(5,1);
if ( RH < 10) lcd.print("0");
lcd.print(RH);
lcd.print(":");
if ( RM < 10) lcd.print("0");
lcd.print(RM);
break;
case 3:
lcd.setCursor(2,0);
lcd.print("RASSVET LONG");
buttonState2 = digitalRead(buttonPin2);
if (buttonState2 == HIGH) {
RD--;
delay(100);
}
if (RD > 60) {
RD = 0;
}
buttonState3 = digitalRead(buttonPin3);
if (buttonState3 == HIGH) {
RD++;
delay(100);
}
if (RD < 0) {
RD = 60;
}
lcd.setCursor(7,1);
if ( RD < 10) lcd.print("0");
lcd.print(RD);
break;
case 4:
lcd.setCursor(3,0);
lcd.print("ZAKAT START");
buttonState2 = digitalRead(buttonPin2);
if (buttonState2 == HIGH) {
ZH++;
delay(100);
}
if (ZH >= 24) {
ZH = 0;
}
buttonState3 = digitalRead(buttonPin3);
if (buttonState3 == HIGH) {
ZM++;
delay(100);
}
if (ZM >= 60) {
ZM = 0;
}
lcd.setCursor(6,1);
if ( ZH < 10) lcd.print("0");
lcd.print(ZH);
lcd.print(":");
if ( ZM < 10) lcd.print("0");
lcd.print(ZM);
break;
case 5:
lcd.setCursor(3,0);
lcd.print("ZAKAT LONG");
buttonState2 = digitalRead(buttonPin2);
if (buttonState2 == HIGH) {
ZD--;
delay(100);
}
if (ZD > 60) {
ZD = 0;
}
buttonState3 = digitalRead(buttonPin3);
if (buttonState3 == HIGH) {
ZD++;
delay(100);
}
if (ZD < 0) {
ZD = 60;
}
lcd.setCursor(7,1);
if ( ZD < 10) lcd.print("0");
lcd.print(ZD);
break;
case 6:
lcd.setCursor(0,0);
lcd.print("POWER LAMP");
lcd.print(" ");
PS = PWM_LW_MAX / 2.5;
lcd.print(PS);
lcd.print(" ");
lcd.print("%");
buttonState3 = digitalRead(buttonPin3);
if (buttonState3 == HIGH) {
PWM_LW_MAX = PWM_LW_MAX + 25;
delay(150);
lcd.clear();
}
if (PWM_LW_MAX > 250) {
PWM_LW_MAX = 250;
}
buttonState2 = digitalRead(buttonPin2);
if (buttonState2 == HIGH) {
PWM_LW_MAX = PWM_LW_MAX - 25;
delay(150);
lcd.clear();
}
if (PWM_LW_MAX < 0) {
PWM_LW_MAX = 0;
}
lcd.setCursor(3,1);
if (PS >= 10 && PS <20 ) {
lcd.print("*");
}
if (PS >=20 && PS <30 ) {
lcd.print("**");
}
if (PS >=30 && PS <40 ) {
lcd.print("***");
}
if (PS >=40 && PS <50 ) {
lcd.print("****");
}
if (PS >=50 && PS <60 ) {
lcd.print("*****");
}
if (PS >=60 && PS <70 ) {
lcd.print("******");
}
if (PS >=70 && PS <80 ) {
lcd.print("*******");
}
if (PS >=80 && PS <90 ) {
lcd.print("********");
}
if (PS >=90 && PS <100 ) {
lcd.print("*********");
}
if (PS >=100) {
lcd.print("**********");
}
break;
case 7:
lcd.setCursor(0,0);
lcd.print("NIGHT POWER");
lcd.print(" ");
PS = PWM_LW_MIN / 2.5;
lcd.print(PS);
lcd.print("%");
buttonState3 = digitalRead(buttonPin3);
if (buttonState3 == HIGH) {
PWM_LW_MIN = PWM_LW_MIN + 25;
delay(150);
lcd.clear();
}
if (PWM_LW_MIN > 250) {
PWM_LW_MIN = 250;
}
buttonState2 = digitalRead(buttonPin2);
if (buttonState2 == HIGH) {
PWM_LW_MIN = PWM_LW_MIN - 25;
delay(150);
lcd.clear();
}
if (PWM_LW_MIN < 0) {
PWM_LW_MIN = 0;
}
lcd.setCursor(3,1);
if (PS >= 10 && PS <20 ) {
lcd.print("*");
}
if (PS >=20 && PS <30 ) {
lcd.print("**");
}
if (PS >=30 && PS <40 ) {
lcd.print("***");
}
if (PS >=40 && PS <50 ) {
lcd.print("****");
}
if (PS >=50 && PS <60 ) {
lcd.print("*****");
}
if (PS >=60 && PS <70 ) {
lcd.print("******");
}
if (PS >=70 && PS <80 ) {
lcd.print("*******");
}
if (PS >=80 && PS <90 ) {
lcd.print("********");
}
if (PS >=90 && PS <100 ) {
lcd.print("*********");
}
if (PS >=100) {
lcd.print("**********");
}
break;
case 8:
lcd.setCursor(1,0);
lcd.print("DISP DAY");
lcd.print(" ");
PS = ScD / 2.5;
lcd.print(PS);
lcd.print(" ");
lcd.print("%");
buttonState3 = digitalRead(buttonPin3);
if (buttonState3 == HIGH) {
ScD = ScD + 25;
delay(150);
lcd.clear();
}
if (ScD > 250) {
ScD = 250;
}
buttonState2 = digitalRead(buttonPin2);
if (buttonState2 == HIGH) {
ScD = ScD - 25;
delay(150);
lcd.clear();
}
if (ScD < 0) {
ScD = 0;
}
lcd.setCursor(3,1);
if (PS >= 10 && PS <20 ) {
lcd.print("*");
}
if (PS >=20 && PS <30 ) {
lcd.print("**");
}
if (PS >=30 && PS <40 ) {
lcd.print("***");
}
if (PS >=40 && PS <50 ) {
lcd.print("****");
}
if (PS >=50 && PS <60 ) {
lcd.print("*****");
}
if (PS >=60 && PS <70 ) {
lcd.print("******");
}
if (PS >=70 && PS <80 ) {
lcd.print("*******");
}
if (PS >=80 && PS <90 ) {
lcd.print("********");
}
if (PS >=90 && PS <100 ) {
lcd.print("*********");
}
if (PS >=100) {
lcd.print("**********");
}
break;
case 9:
lcd.setCursor(0,0);
lcd.print("DISP NIGHT");
lcd.print(" ");
PS = ScN / 2.5;
lcd.print(PS);
lcd.print(" ");
lcd.print("%");
buttonState3 = digitalRead(buttonPin3);
if (buttonState3 == HIGH) {
ScN = ScN + 25;
delay(150);
lcd.clear();
}
if (ScN > 250) {
ScN = 250;
}
buttonState2 = digitalRead(buttonPin2);
if (buttonState2 == HIGH) {
ScN = ScN - 25;
delay(150);
lcd.clear();
}
if (ScN < 0) {
ScN = 0;
}
lcd.setCursor(3,1);
if (PS >= 10 && PS <20 ) {
lcd.print("*");
}
if (PS >=20 && PS <30 ) {
lcd.print("**");
}
if (PS >=30 && PS <40 ) {
lcd.print("***");
}
if (PS >=40 && PS <50 ) {
lcd.print("****");
}
if (PS >=50 && PS <60 ) {
lcd.print("*****");
}
if (PS >=60 && PS <70 ) {
lcd.print("******");
}
if (PS >=70 && PS <80 ) {
lcd.print("*******");
}
if (PS >=80 && PS <90 ) {
lcd.print("********");
}
if (PS >=90 && PS <100 ) {
lcd.print("*********");
}
if (PS >=100) {
lcd.print("**********");
}
break;
case 10:
lcd.setCursor(1,0);
lcd.print("SAVE TO MEMORY");
buttonState3 = digitalRead(buttonPin3);
if (buttonState3 == HIGH) {
lcd.clear();
lcd.setCursor(4,0);
lcd.print("SAVE GO");
delay(500);
for (int thisChar = 0; thisChar < 16; thisChar++) {
lcd.setCursor(thisChar, 1);
lcd.print("*");
delay(50);
}
EEPROM.write(0, RH);
EEPROM.write(1, RM);
EEPROM.write(2, RD);
EEPROM.write(3, ZH);
EEPROM.write(4, ZM);
EEPROM.write(5, ZD);
lcd.clear();
pos = 1;
}
break;
}
//delay (100);
}
Помогите разобратся с этим чёртовым кодом, как настороить время и длительность восхода и заката ,а то я походу сам не разберусь в этой хрени! Что куда вставлять подменять,для меня эти константы и подобное космос. Спасибо.
В программе выставляется только дата и время 1 раз во время прошивки (в строке как в 45 посту).
у тебя в этой строке написано так:
установи так
Остальные похожие строки должны начинаться с //
Время восхода, длительность восхода, время заката, длительность заката и т.д. выставляется кнопками на экране LCD
if (! RTC.isrunning()) { Serial.println("RTC is NOT running!"); RTC.adjust(DateTime(2018, 5, 28, 21, 07, 1)); } //RTC.adjust(DateTime(2018, 5, 28, 21, 07, 1)); //RTC.adjust(DateTime(__DATE__, __TIME__));Просто после того как на экране выставил все параметры доходишь до меню SAVE TO MEMORY нужно нажать ОК (среднюю кнопку) на экране пробегут звездочки******** и данные запишутся в память.
Меню на экране LCD
RASSVET START - время рассвета (ЧЧ:ММ)
RASSVET LONG - Длительность рассвета (ММ)
ZAKAT START - время заката (ЧЧ:ММ)
ZAKAT LONG - длительность заката (ММ)
POWER LAMP - яркость ламп %
NIGHT POWER - ночная яркость % (если нужно чтобы ночью осталось свечение 100-10%, если нет 0%)
DISP NIGHT - подсветка дисплея %
SAVE TO MEMORY - записать выбранные параметры в память
Проблема в том что две кнопки которые должны делать настройки ,не работают, работает только которая переберает режимы РАССВЕТ СТАРТ ЗАКАТ СТАРТ ну и т.д а две никак не реагируют. Не понимаю почему,либо из за того что у меня собрано все на Pro Mini либо эта Про Мини бракованая.
Проблема в том что две кнопки которые должны делать настройки ,не работают, работает только которая переберает режимы РАССВЕТ СТАРТ ЗАКАТ СТАРТ ну и т.д а две никак не реагируют. Не понимаю почему,либо из за того что у меня собрано все на Pro Mini либо эта Про Мини бракованая.
про резисторы 10кОм на входы (к кнопкам) не забыл? Кнопки к выводам 2,4,5
Та не всё на месте, походу ардуинка бракованая. А кнопки можна припаять на другие порты?
Та не всё на месте, походу ардуинка бракованая. А кнопки можна припаять на другие порты?
Да. Только в скетче переправить.
Вот видео как всё происходит: https://youtu.be/oCLk6lwjPc0
ivan1984, видео вряд ли кому-то интересно... если бы вывместо этого скетч нормально вставили - можно было бы подсказать вам, в какие строки вставить значения рассвета и заката без вских кнопок.
Вам нужен многоканальный таймер на 49 суток? Их есть у меня. :-)
Хотелось бы взглянуть.
https://github.com/DetSimen/Arduino-
Вам нужен многоканальный таймер на 49 суток? Их есть у меня. :-)
Хотелось бы взглянуть.
https://github.com/DetSimen/Arduino-
Что это?
Вот видео как всё происходит: https://youtu.be/oCLk6lwjPc0
Из видео такое ощущение что идет наводка на провода, для начала укаратить провода покороче или с резисторами что то не так (не правильно подключены). Я бы для проверки подключил бы без кнопки просто провода с резисторами прямо к ардуинке и проверил (зачастую сами кнопки с "приветом").
Вам нужен многоканальный таймер на 49 суток? Их есть у меня. :-)
Хотелось бы взглянуть.
https://github.com/DetSimen/Arduino-
Что это?
Программный таймер на 8/12/16 независимых каналов. От 1 миллисекунды до 49+ суток.
Хотя, нет, для Вас это неактуально.
А как это нормально скетч вставить, я ж его вставил постами высше.
Подскажите как правильно вставить скетч.
[code] #include <Wire.h> //Подключаем библиотеку для использования I2C интерфейса с модулем RTC #include <OneWire.h> #include <DallasTemperature.h> #include "RTClib.h" //Подключаем библиотеку для использования модуля часов реального времени RTC #include <EEPROM.h> OneWire oneWire(A3); DallasTemperature ds(&oneWire); #include <LiquidCrystal_I2C.h> // библиотека экрана LiquidCrystal_I2C lcd(0x27,20,4); int PWM_LW_MIN = 0; //Если необходим ток покоя на LED - изменить эту константу int PWM_LW_MAX = 250; //Если необходимо ограничить максимальную яркость - уменьшить значение #define PWM_LW_PIN 3 //Пин порта, где будет ШИМ LW #define mn 60UL //Дополнительные константы для удобства #define hr 3600UL //Отражают соответствующие количества секунд #define d 86400UL RTC_DS1307 RTC; int RH = 0; int RM = 0; int RD = 0; int ZH = 0; int ZM = 0; int ZD = 0; int PS = 0; int ScD = 250; int ScN = 50; const int buttonPin = 2; int buttonState = 0; const int buttonPin2 = 4; int buttonState2 = 0; const int buttonPin3 = 5; int buttonState3 = 0; int pos = 1; //******************************************************************************************** void setup(){ Serial.begin(9600); Wire.begin(); //Инициируем I2C интерфейс RH = EEPROM.read(0); RM = EEPROM.read(1); RD = EEPROM.read(2); ZH = EEPROM.read(3); ZM = EEPROM.read(4); ZD = EEPROM.read(5); ds.begin(); RTC.begin(); //Инициирум RTC модуль pinMode(buttonPin, INPUT); pinMode(buttonPin2, INPUT); pinMode(buttonPin3, INPUT); lcd.init(); // запускаем библиотеку экрана lcd.backlight(); if (! RTC.isrunning()) { Serial.println("RTC is NOT running!"); RTC.adjust(DateTime(2014, 7, 12, 22, 48, 1)); } //RTC.adjust(DateTime(2012, 7, 31, 21, 53, 1)); //RTC.adjust(DateTime(__DATE__, __TIME__)); } // КОНЕЦ ИНИЦИАЛИЗАЦИИ //******************************************************************************************** void loop() // ПРОГРАММЫй безусловный ЦИКЛ { long sunrise_start = RH*hr+RM*mn; //Начало восхода в 9 - 45 long sunrise_duration = RD*mn; //Длительность восхода 30 минут long sunset_start = ZH*hr+ZM*mn; //начало заката в 21-15 long sunset_duration = ZD*mn; //Длительность заката 30 минут long pwm_LW; DateTime myTime = RTC.now(); //Читаем данные времени из RTC при каждом выполнении цикла long Day_time = myTime.unixtime() % 86400; //сохраняем в переменную - время в формате UNIX if ((Day_time<sunrise_start) || //Если с начала суток меньше чем начало восхода (Day_time>=sunset_start+sunset_duration)) { //Или больше чем начало заката + длительность pwm_LW = PWM_LW_MIN; //Величина для записи в порт равна минимуму //********************************************************************************************* // обработка интервала восхода //********************************************************************************************* }else if ((Day_time>=sunrise_start) && //Если с начала суток больше чем начало восхода (Day_time<sunrise_start+sunrise_duration)){ //И меньше чем начало восхода + длительность pwm_LW = ((Day_time - sunrise_start)*(PWM_LW_MAX-PWM_LW_MIN)) / sunrise_duration; //Вычисляем для рассвета величину для записи в порт ШИМ //********************************************************************************************* // обработка интервала заката //********************************************************************************************* }else if ((Day_time>=sunset_start) && //Если начала суток больше чем начало заката и меньше чем (Day_time<sunset_start+sunset_duration)){ //начало заката плюс длительность pwm_LW = ((sunset_start+sunset_duration - Day_time)*(PWM_LW_MAX-PWM_LW_MIN)) / sunrise_duration; //Вычисляем для заката величину для записи в порт ШИМ //******************************************************************************************** // обработка интервала от конца рассвета и до начала заката, // когда свет должен быть включен на максимальную яркость //******************************************************************************************** }else { pwm_LW = PWM_LW_MAX; //Устанавливаем максимальную величину для записи в порт ШИМ } analogWrite(PWM_LW_PIN, pwm_LW); //Пишем в порт вычисленное значение if (Day_time>=sunrise_start && Day_time<=sunset_start ){ analogWrite(11, ScD); } else { analogWrite(11, ScN); } buttonState = digitalRead(buttonPin); if (buttonState == HIGH) { pos++; lcd.clear(); delay (250); } if (pos == 11 || pos > 11){ lcd.clear(); pos=1; } switch (pos){ case 1: ds.requestTemperatures(); //lcd.clear(); lcd.setCursor(8,1); lcd.print("t "); lcd.print(ds.getTempCByIndex(0)); lcd.print("C"); lcd.setCursor(0,0); lcd.print("AQUA"); lcd.setCursor(6,0); if (myTime.day() < 10) lcd.print("0"); lcd.print(myTime.day(),DEC); lcd.print("/"); if (myTime.month() < 10) lcd.print("0"); lcd.print(myTime.month(),DEC); lcd.print("/"); lcd.print(myTime.year(),DEC); lcd.setCursor(0,1); if (myTime.hour() < 10) lcd.print("0"); lcd.print(myTime.hour(),DEC); lcd.print(":"); if (myTime.minute() < 10) lcd.print("0"); lcd.print(myTime.minute(),DEC); break; case 2: lcd.setCursor(1,0); lcd.print("RASSVET START"); buttonState2 = digitalRead(buttonPin2); if (buttonState2 == HIGH) { RH++; delay(100); } if (RH >= 24) { RH = 0; } buttonState3 = digitalRead(buttonPin3); if (buttonState3 == HIGH) { RM++; delay(100); } if (RM >= 60) { RM = 0; } lcd.setCursor(5,1); if ( RH < 10) lcd.print("0"); lcd.print(RH); lcd.print(":"); if ( RM < 10) lcd.print("0"); lcd.print(RM); break; case 3: lcd.setCursor(2,0); lcd.print("RASSVET LONG"); buttonState2 = digitalRead(buttonPin2); if (buttonState2 == HIGH) { RD--; delay(100); } if (RD > 60) { RD = 0; } buttonState3 = digitalRead(buttonPin3); if (buttonState3 == HIGH) { RD++; delay(100); } if (RD < 0) { RD = 60; } lcd.setCursor(7,1); if ( RD < 10) lcd.print("0"); lcd.print(RD); break; case 4: lcd.setCursor(3,0); lcd.print("ZAKAT START"); buttonState2 = digitalRead(buttonPin2); if (buttonState2 == HIGH) { ZH++; delay(100); } if (ZH >= 24) { ZH = 0; } buttonState3 = digitalRead(buttonPin3); if (buttonState3 == HIGH) { ZM++; delay(100); } if (ZM >= 60) { ZM = 0; } lcd.setCursor(6,1); if ( ZH < 10) lcd.print("0"); lcd.print(ZH); lcd.print(":"); if ( ZM < 10) lcd.print("0"); lcd.print(ZM); break; case 5: lcd.setCursor(3,0); lcd.print("ZAKAT LONG"); buttonState2 = digitalRead(buttonPin2); if (buttonState2 == HIGH) { ZD--; delay(100); } if (ZD > 60) { ZD = 0; } buttonState3 = digitalRead(buttonPin3); if (buttonState3 == HIGH) { ZD++; delay(100); } if (ZD < 0) { ZD = 60; } lcd.setCursor(7,1); if ( ZD < 10) lcd.print("0"); lcd.print(ZD); break; case 6: lcd.setCursor(0,0); lcd.print("POWER LAMP"); lcd.print(" "); PS = PWM_LW_MAX / 2.5; lcd.print(PS); lcd.print(" "); lcd.print("%"); buttonState3 = digitalRead(buttonPin3); if (buttonState3 == HIGH) { PWM_LW_MAX = PWM_LW_MAX + 25; delay(150); lcd.clear(); } if (PWM_LW_MAX > 250) { PWM_LW_MAX = 250; } buttonState2 = digitalRead(buttonPin2); if (buttonState2 == HIGH) { PWM_LW_MAX = PWM_LW_MAX - 25; delay(150); lcd.clear(); } if (PWM_LW_MAX < 0) { PWM_LW_MAX = 0; } lcd.setCursor(3,1); if (PS >= 10 && PS <20 ) { lcd.print("*"); } if (PS >=20 && PS <30 ) { lcd.print("**"); } if (PS >=30 && PS <40 ) { lcd.print("***"); } if (PS >=40 && PS <50 ) { lcd.print("****"); } if (PS >=50 && PS <60 ) { lcd.print("*****"); } if (PS >=60 && PS <70 ) { lcd.print("******"); } if (PS >=70 && PS <80 ) { lcd.print("*******"); } if (PS >=80 && PS <90 ) { lcd.print("********"); } if (PS >=90 && PS <100 ) { lcd.print("*********"); } if (PS >=100) { lcd.print("**********"); } break; case 7: lcd.setCursor(0,0); lcd.print("NIGHT POWER"); lcd.print(" "); PS = PWM_LW_MIN / 2.5; lcd.print(PS); lcd.print("%"); buttonState3 = digitalRead(buttonPin3); if (buttonState3 == HIGH) { PWM_LW_MIN = PWM_LW_MIN + 25; delay(150); lcd.clear(); } if (PWM_LW_MIN > 250) { PWM_LW_MIN = 250; } buttonState2 = digitalRead(buttonPin2); if (buttonState2 == HIGH) { PWM_LW_MIN = PWM_LW_MIN - 25; delay(150); lcd.clear(); } if (PWM_LW_MIN < 0) { PWM_LW_MIN = 0; } lcd.setCursor(3,1); if (PS >= 10 && PS <20 ) { lcd.print("*"); } if (PS >=20 && PS <30 ) { lcd.print("**"); } if (PS >=30 && PS <40 ) { lcd.print("***"); } if (PS >=40 && PS <50 ) { lcd.print("****"); } if (PS >=50 && PS <60 ) { lcd.print("*****"); } if (PS >=60 && PS <70 ) { lcd.print("******"); } if (PS >=70 && PS <80 ) { lcd.print("*******"); } if (PS >=80 && PS <90 ) { lcd.print("********"); } if (PS >=90 && PS <100 ) { lcd.print("*********"); } if (PS >=100) { lcd.print("**********"); } break; case 8: lcd.setCursor(1,0); lcd.print("DISP DAY"); lcd.print(" "); PS = ScD / 2.5; lcd.print(PS); lcd.print(" "); lcd.print("%"); buttonState3 = digitalRead(buttonPin3); if (buttonState3 == HIGH) { ScD = ScD + 25; delay(150); lcd.clear(); } if (ScD > 250) { ScD = 250; } buttonState2 = digitalRead(buttonPin2); if (buttonState2 == HIGH) { ScD = ScD - 25; delay(150); lcd.clear(); } if (ScD < 0) { ScD = 0; } lcd.setCursor(3,1); if (PS >= 10 && PS <20 ) { lcd.print("*"); } if (PS >=20 && PS <30 ) { lcd.print("**"); } if (PS >=30 && PS <40 ) { lcd.print("***"); } if (PS >=40 && PS <50 ) { lcd.print("****"); } if (PS >=50 && PS <60 ) { lcd.print("*****"); } if (PS >=60 && PS <70 ) { lcd.print("******"); } if (PS >=70 && PS <80 ) { lcd.print("*******"); } if (PS >=80 && PS <90 ) { lcd.print("********"); } if (PS >=90 && PS <100 ) { lcd.print("*********"); } if (PS >=100) { lcd.print("**********"); } break; case 9: lcd.setCursor(0,0); lcd.print("DISP NIGHT"); lcd.print(" "); PS = ScN / 2.5; lcd.print(PS); lcd.print(" "); lcd.print("%"); buttonState3 = digitalRead(buttonPin3); if (buttonState3 == HIGH) { ScN = ScN + 25; delay(150); lcd.clear(); } if (ScN > 250) { ScN = 250; } buttonState2 = digitalRead(buttonPin2); if (buttonState2 == HIGH) { ScN = ScN - 25; delay(150); lcd.clear(); } if (ScN < 0) { ScN = 0; } lcd.setCursor(3,1); if (PS >= 10 && PS <20 ) { lcd.print("*"); } if (PS >=20 && PS <30 ) { lcd.print("**"); } if (PS >=30 && PS <40 ) { lcd.print("***"); } if (PS >=40 && PS <50 ) { lcd.print("****"); } if (PS >=50 && PS <60 ) { lcd.print("*****"); } if (PS >=60 && PS <70 ) { lcd.print("******"); } if (PS >=70 && PS <80 ) { lcd.print("*******"); } if (PS >=80 && PS <90 ) { lcd.print("********"); } if (PS >=90 && PS <100 ) { lcd.print("*********"); } if (PS >=100) { lcd.print("**********"); } break; case 10: lcd.setCursor(1,0); lcd.print("SAVE TO MEMORY"); buttonState3 = digitalRead(buttonPin3); if (buttonState3 == HIGH) { lcd.clear(); lcd.setCursor(4,0); lcd.print("SAVE GO"); delay(500); for (int thisChar = 0; thisChar < 16; thisChar++) { lcd.setCursor(thisChar, 1); lcd.print("*"); delay(50); } EEPROM.write(0, RH); EEPROM.write(1, RM); EEPROM.write(2, RD); EEPROM.write(3, ZH); EEPROM.write(4, ZM); EEPROM.write(5, ZD); lcd.clear(); pos = 1; } break; } //delay (100); } [/code]ivan1984, справились?
теперь посмотрите внимательно - все. что вам нужно - поправить строчки 99-102.
И никакие кнопки не нужны, да и дисплей тоже лишний в этом простейшем проекте.
Просто изменить цифры отмеченные красными кружками и всё?
Просто изменить цифры отмеченные красными кружками и всё?
это номинация на пост года :))))
Это комментарии, парень :))) Может все-таки прочитаешь какой-нибудь букварик по программированию, прежде чем поделки собирать? А то не дай бог устроишь пожар в птичнике... похоже пока твои куры больше тебя понимают в ардуино :)
Не переживай за пожар и кур всё под контролем. Некогда мне програмирование учить,хотя желание есть. На счет ума не всё так плохо как ты думаеш! Ок. Спасибо за подсказки и критику.
Просто изменить цифры отмеченные красными кружками и всё?
это номинация на пост года :))))
Это комментарии, парень :))) Может все-таки прочитаешь какой-нибудь букварик по программированию, прежде чем поделки собирать? А то не дай бог устроишь пожар в птичнике... похоже пока твои куры больше тебя понимают в ардуино :)
Не надо строить из себя "профи". Все мы так начинали, на ошибках учатся.
ivan1984 все что стоит после знаков // является пояснениями для человека (т.е. помощь, что делает та или иная строка). Если в начале строки стоят такие символы данная строка игнорируется (не выполняется).
Не надо строить из себя "профи". Все мы так начинали, на ошибках учатся.
ну по сравнени с этим тут любой последний "новечек" - супер-профи.
Просто если человек не может в скетче даже комменты от кода отличить - обьяснять ему что либо бесполезно.
Если вы ему так сочувствуете - просто поменяйте для него в коде нужные константы, номера строк я вам указал.