Добрый день форумчане! Прошу помощи. На просторах интернета нашел скетч, подправил. Работает Но не могу в него добавить часть, которая бы отвечала за работу второго циклического реле. Опишу по подробнее: Инкубатор, простой. 1) Нужно организовать автоматизацию переворота лотков 6 раз в сутки. Реализовано в скетче и работает По шпильке, которая приводится в действие мотор-редуктором, "бегает" гайка и толкает лотки то вверх, то вниз. Стоят концевые выключатели в ВМТ и НМТ (Нижней мертвой точке) когда НАНО включен, мотор начинает вращение пока при срабатывании одного концевика не остановится. Несмотря на то , что концевик "зажат", идет пауза 4 часа, а потом мотор снова стартует, пока не нажмет второй концевик. - с этой частью проблем нет - все работает. 2) Надо добавить в скетч второе реле на ПИН 12. Которое бы всегда при старте НАНО, работало с цикличностью - 2 раза за 24 часа запускает реле на 20 минут. Это для вентилятора проветривания. Вот схема подключения первой части: Реле 1 на пине 13 крутит мотор переворота Реле 2 на пине 12 должно включать вентилятор по циклу. скетч (работает только переворот): Код (C++): #include <Timer_P.h> #define RELAY_PIN 13 //реле переворота лотков #define KEY_PIN 2 // концевики верхний параллельно с нижним Timer_P RelayOn, RelayBlock; long Pulse_ms = 14400000, Block_ms = 60000; // 4 часа реле отключено, 1 минута - период // для того чтобы освободился концевик bool RelayOnQO_Old = false; void setup(){ pinMode(KEY_PIN, INPUT_PULLUP); pinMode(RELAY_PIN, OUTPUT); } void loop(){ RelayOn.TimerV(!digitalRead(KEY_PIN) && !RelayOn.Q0(), RelayBlock.Q0(), 1, Pulse_ms); RelayBlock.TimerV(!RelayOn.Q0() && RelayOnQO_Old, 0, 1, Block_ms); digitalWrite (RELAY_PIN, RelayOn.Q0()); RelayOnQO_Old = RelayOn.Q0(); } библиотека - http://my-files.ru/0za1py/Timer_P.rar
Так как правильно подсказал VVR - та к сделал. Все оказалось до боли просто. Код (C++): #include <Timer_P.h> //подключаем библиотеку Timer_P #define VENT_PIN 12 //PIN реле вентилятора проветривания #define Period 43200000 //Период меандра 12 часов=720мин х 60000 мс #define Duration 1200000 //Импульс меандра 20 минут=20 х 60000 мс Timer_P Period_T, Pulse_T; //создание и инициализация объекта Timer_Test класса Timer_P void setup() { //Режимы выходов pinMode(VENT_PIN, OUTPUT); } void loop() { Period_T.TimerV(!Period_T.Q0(), 0, 2, Period); // Самосбрасывающийся таймер периода Pulse_T.TimerV(!Period_T.Q0(), 0, 1, Duration);// Импульс длительности Duration по началу периода //Выводим меандр на реле. digitalWrite(VENT_PIN, Pulse_T.Q0()); ..осталось "поженить" два скетча и порядок
а что, я кого то оскорбил? Кого я не уважаю? Если это надо делать с целью удобства прочтения на странице форума, то код не обширный, и занимает немного пространства в комментарии. Если же это обязательно для форумчан - то мои извинения, в будущем буду вставлять. Только попрошу Вас в будущем не хамить, а писать как положено. - Прошу, вставлять код в специальные тэги, для удобства просмотра..... Вот это бы я понял. А то что я своими действиями оскорбил вас и все сообщество планеты Земля - это уж перебор! Вам не кажется?
соединил два скетча, подправил название пинов, получилось следующее. Все работает Код (C++): #include <Timer_P.h> //подключаем библиотеку Timer_P - работа с таямерами из набора библиотек от X-Dron #define RELAY_PEREVOROTA 13 //PIN реле переворота лотков #define RELAY_PROVETRIVANIY 12 //PIN реле вентилятора проветривания #define KEY_KONCEVIK 2 //PIN концевика поворота лотков, верхний параллельно с нижним #define Period 43200000 //Период меандра 12 часов=720мин х 60000 мс #define Duration 1200000 //Импульс меандра 20 минут=20 х 60000 мс Timer_P Period_T, Pulse_T; //создание и инициализация объекта Timer_Test класса Timer_P Timer_P RelayOn, RelayBlock; long Pulse_ms = 14400000, Block_ms = 60000; // 4 часа реле отключено, 1 минута - период // для того чтобы освободился концевик bool RelayOnQO_Old = false; void setup(){ pinMode(RELAY_PROVETRIVANIY, OUTPUT); pinMode(KEY_KONCEVIK, INPUT_PULLUP); pinMode(RELAY_PEREVOROTA, OUTPUT); } void loop(){ // раздел настройки реле переворота RelayOn.TimerV(!digitalRead(KEY_KONCEVIK) && !RelayOn.Q0(), RelayBlock.Q0(), 1, Pulse_ms); RelayBlock.TimerV(!RelayOn.Q0() && RelayOnQO_Old, 0, 1, Block_ms); digitalWrite (RELAY_PEREVOROTA, RelayOn.Q0()); RelayOnQO_Old = RelayOn.Q0(); // конец программы реле переворота // раздел настройки реле проветривания Period_T.TimerV(!Period_T.Q0(), 0, 2, Period); // Самосбрасывающийся таймер периода Pulse_T.TimerV(!Period_T.Q0(), 0, 1, Duration);// Импульс длительности Duration по началу периода //Выводим меандр на реле. digitalWrite(RELAY_PROVETRIVANIY, Pulse_T.Q0()); // конец программы реле проветривания } Хотел бы подключить две кнопки, одну на принудительный запуск переворота, чтоб работала по тому же принципу как в скетче выше, а вторую на принудительный запуск проветривания, тоже чтобы работал вентилятор как в скетче 20 минут. ПОМОГИТЕ Пожалуйста?
Не уважение и оскорбление - разные понятия, в моей реплике ни слова про оскорбление. Код в тэгах, гораздо более читабельный, поэтому просматривая его, проще найти ошибку и тд. и т.п. А про планету Земля - это вы переборщили.