Перейти к контенту
МОРСКОЙ АКВАРИУМ - форум Аква Лого

НильскийМорская аквариумистика по традиции вызывает много вопросов, мы собрали наиболее часто встречающиеся и постарались кратко на них ответить. Как завести свой первый морской аквариум, сколько это стоит, что для него нужно, как содержать кораллы, и какие выбрать - живые или искусственные, как за ним ухаживать и как оформить - на вопросы отвечает ведущий специалист сектора сервиса аквариумного салона Аква Лого.

Как общаются амфибии

За пределами пяти чувств: термолокаторы

Антарктическая полихета

kirex

Пользователи
  • Число публикаций

    5
  • Регистрация

  • Последнее посещение

Репутация

0 Обычный

О kirex

  • Звание
    Матрос

Информация

  • Город
    Germany
  1. Со светом разобрался. Теперь нужно сделать возможным включение и выключение света 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; } } }//------------Конец ЦИКЛА-----------------------------
  2. Помогите пожалуйста. Вот для этого кода нужно плавное включение света в заданное время и плавное выключение в другое заданное время. Что-то у меня с плавностью никак не получается. // Библиотеки необходимые для работы модуля часов #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:; // на неизвестную команду - ничего не делаем }; } } Заранее спасибо
  3. Вот для этого кода нужно плавное включение света в заданное время и плавное выключение в другое заданное время. // Библиотеки необходимые для работы модуля часов #include "Wire.h" #include "DS1307new.h" // библиотека экрана #include "LiquidCrystal.h" LiquidCrystal lcd(8, 9, 4, 5, 6, 7);[/background][/size][/font] [font=Verdana, Tahoma, Arial, 'Trebuchet MS', sans-serif, Georgia, Courier, 'Times New Roman', serif][size=3][background=rgb(238, 242, 243)]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[/background][/size][/font] [font=Verdana, Tahoma, Arial, 'Trebuchet MS', sans-serif, Georgia, Courier, 'Times New Roman', serif][size=3][background=rgb(238, 242, 243)]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; // запомнили когда мы "отчитались" } }[/background][/size][/font] [font=Verdana, Tahoma, Arial, 'Trebuchet MS', sans-serif, Georgia, Courier, 'Times New Roman', serif][size=3][background=rgb(238, 242, 243)]// Выводит текущие время на 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:; // на неизвестную команду - ничего не делаем }; } }
  4. Подскажите где ошибка. Нужно чтобы свет плавно включался void loop() { hours = RTC.get(DS1307_HR,true); minutes = RTC.get(DS1307_MIN,false); lcd.setCursor(0,0); lcd.print(hours); // печатаем час lcd.print(":"); // печатаем разделитель lcd.print(minutes); // печатаем минуты lcd.print(":"); // печатаем разделитель lcd.print(RTC.get(DS1307_SEC,false:); // печатаем секунды lcd.setCursor(0,2); On_Time=(13*60+14); Off_Time=(13*60+15); Curent_Time=RTC.get(DS1307_HR,true)*60+RTC.get(DS1307_MIN,false);//текущее время 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); } } } }
  5. Добрый день. Не могли бы вы помочь в написании скетча. Я к сожалению в программировании полный ноль. Что имеется: Arduino Mega 2560 LCD Keypad Shield 1602 c 5-ю кропками Блок реле (двухканальное) Часы DS1307 Tiny RTC I2C module, 24C32 EEPROM Датчик температуры DS18B20 LCD Keypad Shield подключен к пинам 4,5,6,7,8,9, кнопки к А0, подсветка к 10 пину. Датчик температуры DS18B20 подключен к пину 53. Блок реле к пинам 40,41 К пинам 3,11,12 подключены LED через мосфеты. Что требуется: 1). Реле будут включать обогрев (назовём Н1 и Н2), т.е. Н1 управляется по 40 пину, а Н2 - по 41. При температуре 28 включаются оба нагревателя. При достижении температуры 28,3 нагреватель Н1 отключается. При 28,5 отключается Н2. 2). LED подсветка (назовём LW – pin3, LR – pin11 и LB – pin12) должна включаться и выключаться по времени. Т.е. например в 17:00 плавно в течении 5 минут включается LW и LR, далее в 21:55 начинает плавно гаснуть (5 минут), а в это время плавно включается LB. Затем в 23:00 плавно гаснет (5 минут) LB. 3). Меню Главный экран: Т=28,4° 14:53 Н1-Off H2-On т.е. отображается текущая температура, текущее время и состояние нагревателей. Следующий экран: Н1: On-28° Off-28,3° т.е. возможность регулирования температуры включения и выключения нагревателя Н1. Следующий экран: H2: On-28° Off-28,5° т.е. возможность регулирования температуры включения и выключения нагревателя Н2. Следующий экран: LW+LR: On-17:00 Off-21:55 т.е. возможность регулирования времени включения и выключения света LW и LR. Следующий экран: LB: On-21:55 Off-23:00 т.е. возможность регулирования времени включения и выключения света LB. Переключение между экранами - кнопками Left и Right. Выбор - кнопкой Select. Установка – кнопками Up и Down. Ещё нужна на главном экране возможность включения и выключения света LW и LR кнопкой, независимо от времени. А также возможность включения и выключения нагревателя Н1 кнопкой, независимо от температуры. И ещё возможность установки часов. Ещё нужна возможность регулировки яркости света для каждого канала в самом скетче, т.к. ещё сам не знаю будет ли свет гореть на 100% или хватит на 80%. Ну вроде всё, вроде ничего не забыл. Я конечно понимаю, что это наглость с моей стороны, и что у вас наверняка нету времени заниматься моими проблемами, но мне просто не к кому обратиться. Заранее благодарен, и надеюсь на ваше понимание и помощь. С уважением.
×
×
  • Создать...

Политика обработки персональных данных