
kirex
Пользователи-
Число публикаций
5 -
Регистрация
-
Последнее посещение
Репутация
0 ОбычныйО kirex
-
Звание
Матрос
Информация
-
Город
Germany
-
Лед светильник 70Вт. для DMS 500PL (72л.)
kirex ответил на тему форума автора Alex_M в Самодельные LED светильники
Со светом разобрался. Теперь нужно сделать возможным включение и выключение света LW и LR кнопками (UP-Вкл., DOWN-Выкл.), независимо от времени. А также возможность включения и выключения нагревателя Н2 кнопками (LEFT-Вкл., RIGHT-Выкл.), независимо от температуры. Вот часть кода по срабатыванию реле: // Если температура достигает 28,3 (с погрешностью), отключаем кипятильник if (celsius > 28.3) { digitalWrite(40, Relay_Off); lcd.setCursor(0, 1); lcd.print("H1-Off"); } if (celsius < 28.0) { digitalWrite(40, Relay_On); lcd.setCursor(0, 1); lcd.print("H1-On "); }[/background][/size][/font][/color] [color=#141414][font=Georgia, 'Times New Roman', Times, serif][size=4][background=rgb(252, 252, 255)]// Если температура достигает 28,5 (с погрешностью), отключаем кипятильник if (celsius > 28.5) { digitalWrite(41, Relay_Off); lcd.setCursor(7, 1); lcd.print("H2-Off"); } if (celsius < 28.0) { digitalWrite(41, Relay_On); lcd.setCursor(7, 1); lcd.print("H2-On "); } lcd_key = read_LCD_buttons(); // read the buttons switch (lcd_key) // depending on which button was pus hed, we perform an action { case btnRIGHT: { digitalWrite(41,!digitalRead(41)); lcd.setCursor(7, 1); lcd.print("H2-Off"); break; } case btnLEFT: { digitalWrite(41, Relay_On); lcd.setCursor(7, 1); lcd.print("H2-On "); break; } case btnUP: { lcd.print("UP "); break; } case btnDOWN: { lcd.print("DOWN "); break; } } }//------------Конец ЦИКЛА----------------------------- -
Лед светильник 70Вт. для DMS 500PL (72л.)
kirex ответил на тему форума автора Alex_M в Самодельные LED светильники
Помогите пожалуйста. Вот для этого кода нужно плавное включение света в заданное время и плавное выключение в другое заданное время. Что-то у меня с плавностью никак не получается. // Библиотеки необходимые для работы модуля часов #include "Wire.h" #include "DS1307new.h" // библиотека экрана #include "LiquidCrystal.h" LiquidCrystal lcd(8, 9, 4, 5, 6, 7); int hours; int minutes; int LW = 3; int LR = 11; int LB = 12; int On_Time =0; int Off_Time =0; int Curent_Time =0; void setup(){ Serial.begin(9600); lcd.begin(16, 2); // запускаем библиотеку экрана pinMode(LW, OUTPUT); pinMode(LR, OUTPUT); pinMode(LB, OUTPUT); } void loop(){ analogWrite(10, 100); RTC.getTime();// получить время от модуля RTC.hour; RTC.minute; printTimeToSerial(); // выводим полученное время в лог printTimeToLCD();; // выводи время на экран lcd.setCursor(0, 1); // Set the cursor to column 0, line 1 doSerialCommands(); // слушаем и выполняем команды из Serial On_Time=(20*60+27); Off_Time=(20*60+29); Curent_Time=RTC.hour*60+RTC.minute;//текущее время if(On_Time < Off_Time) //Проверка, таймер в течении одних суток? { if (Curent_Time >= On_Time && Curent_Time <= Off_Time) for(int fadeValue = 0; fadeValue <= 255; fadeValue +=3) { analogWrite(LR, fadeValue); } else for(int fadeValue = 255; fadeValue >= 0; fadeValue -=3) { analogWrite(LR, fadeValue); } } else // если сутки сменились { if ((Curent_Time >= On_Time && Curent_Time <= 2820)||(Curent_Time >= 0 && Curent_Time <= Off_Time))//2820=24часа*60 for(int fadeValue = 0; fadeValue <= 255; fadeValue +=3) { analogWrite(LR, fadeValue); } else for(int fadeValue = 255; fadeValue >= 0; fadeValue -=3) { analogWrite(LR, fadeValue); } } } // Выводит текущие время в Serial void printTimeToSerial(){ byte static prevSecond=0; // тут будем хранить, сколько секунд было при прошлом отчете if(RTC.second!=prevSecond){ // что-то делаем только если секунды поменялись Serial.print(RTC.hour); // часы Serial.print(":"); // разделитель Serial.print(RTC.minute); Serial.print(":"); Serial.println(RTC.second); prevSecond=RTC.second; // запомнили когда мы "отчитались" } } // Выводит текущие время на LCD void printTimeToLCD(){ byte static prevSecond=0; // тут будем хранить, сколько секунд было при выводе if(RTC.second!=prevSecond){ // что-то делаем только если секунды поменялись lcd.setCursor(11,0); // устанавливаем позицию курсора if(RTC.hour<10)lcd.print(" "); lcd.print(RTC.hour); // часы lcd.print( (RTC.second % 2)?" ":":"); // разделитель моргает if(RTC.minute<10)lcd.print(0); // лидирующий ноль, если нужен lcd.print(RTC.minute); prevSecond=RTC.second; // запомнили когда мы "отчитались" } } // устанавливает часы модуля на какое-то заранее определенное время void setSomeTime(){ RTC.stopClock();// останавливаем часы RTC.fillByHMS(20,24,0); // "подкручиваем стрелки на 20:24:00 RTC.setTime();// отправляем "подкрученное время" самому модулю RTC.startClock(); // и опять запускаем часы } // слушает из Serial команды и выполняет их. Каждая команда - один символ. // доступны команды: // s - установить время указанное в функции setSomeTime() void doSerialCommands(){ if(Serial.available()){ // что-нибудь пришло? char ch=Serial.read(); // читаем что пришло switch(ch){ case 's': // команда установки времени setSomeTime(); // устанавливаем break; // тут, в будущем, мы можем добавлять дополнительные команды default:; // на неизвестную команду - ничего не делаем }; } } Заранее спасибо