Включение в определенной последовательности
- Войдите на сайт для отправки комментариев
Добрый вечер. Столкнулся с такой проблемой а решение найти не могу
Имеется ардуино, 4-х канальный релейный блок, два светодиода (красный и зеленый) и PIR-датчик от обычной охранной сигнализации ( в ждущем режиме работает как обычная замкнутая кнопка)
Помогите с кодом.
В чем задача - при первом срабатывании PIR должен загорется зеленый светодиод и гореть в течении 2-х секунд, при втором срабатывании PIR - зеленый светодиод в течении 2-х секудна затем с задержкой в 5 секунд первый канал релейного блока. При третьем срабатывании PIR - 2-ой канал релейного блока без задержки. При четвертом срабатывании PIR - красный светодиод в течении 1 секунды и с задержкой в 3 секунды 3 и 4 каналы релейного блока.
Простые скетчи наваять могу, а вот совместить это все во едино ...... ну никак =)
А что делать при пятом сработывании?
А что делать при пятом сработывании?
ничего. чтобы запустить все сначало - нужно перегрузить устройство
Ну раз простые скетчи ваять можете покажите ваш скетч для PIR датчика.
PS: В этой ветке форума помогаут тем кто пишет сам. За других пишут в ветке "Ищу исполнителя".
вданно случаи так как PIR датчик от обычнйо охранной сигнализации, то он представлен как обычная замкнутая кнопка
А теперь самое врем почитать http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii
правильно вставил код
Теперь надо добавить подсчет срабатываний PIR.
Для этого надо добавить переменные int countButton и boolean lastButton
В первой будешь считать нажатия, во второй хранить последннее считанное значение кнопки и проверять его в строке 22.
присваивание LastButton = текущее состояние копки предлогаю добавить в 23 и 31 строке.
Задача ясна?
Теперь надо добавить подсчет срабатываний PIR.
Для этого надо добавить переменные int countButton и boolean lastButton
В первой будешь считать нажатия, во второй хранить последннее считанное значение кнопки и проверять его в строке 22.
присваивание LastButton = текущее состояние копки предлогаю добавить в 23 и 31 строке.
Задача ясна?
задача ясна
Простые скетчи наваять могу, а вот совместить это все во едино ...... ну никак =)
Вот же удивительно. Что бы научить человека читать и писать на русском хватает полгода, даже если этому человеку всего 6-7 лет. Но почему, то все равно идут уроки русского языка и литературы вплодь до последнего года обучения. Вот когда вы найдете, зачем вы тратите время сидя на этих уроках, то я думаю вы поймете, что да же простые скетчи вы не умеете писать.
Простые скетчи наваять могу, а вот совместить это все во едино ...... ну никак =)
Вот же удивительно. Что бы научить человека читать и писать на русском хватает полгода, даже если этому человеку всего 6-7 лет. Но почему, то все равно идут уроки русского языка и литературы вплодь до последнего года обучения. Вот когда вы найдете, зачем вы тратите время сидя на этих уроках, то я думаю вы поймете, что да же простые скетчи вы не умеете писать.
Все с чего то начинали. Не думаю что вы сели за Пк и уже через час писали програмные коды на несколько тысяч строк.
....
Все с чего то начинали. Не думаю что вы сели за Пк и уже через час писали програмные коды на несколько тысяч строк.
Вы абсолютно правы.
И вы во всем разберетесь и все получится.
Предчувствую что бред написал, но все же
А для чего вводить boolean? почему нельзя с каждым циклом увеличивать значение countButton и в зависимости от него выполнять нужный алгоритм?
///Все с чего то начинали.
Так тогда уже начинайте с правильного подхода. https://habrahabr.ru/post/160105/ читать до примера, понять почему флаги-плохо, думать где и какие состояния у Вас, рисовать диаграмму аналогичную приведеной.
Вот еще delay(5000); это не пауза в 5 секунд. А 5 секунд Ардуина ничего не видит, ничего не слышит, и главное ничего не делает. Если Ардуина предназначена только 1 светодиодом, то может прокатить. Но только чуточку больше уже все. Началась полная жопа, потому что
///Если Ардуина предназначена только 1 светодиодом, то может прокатить. Но только чуточку больше уже все.
Угу. Потому лучше к этому не привыкать изначально. Потом всеравно перучиватся прийдется.
Иногда мне кажется, что Дуина это кидалово. Поманить их красивыми пустыми возможностями и завести их в тупик. Это как научить новичков писать свое имя и предложить им подписать отказ от своего имущества.
///Если Ардуина предназначена только 1 светодиодом, то может прокатить. Но только чуточку больше уже все.
Угу. Потому лучше к этому не привыкать изначально. Потом всеравно перучиватся прийдется.
Ну так вся информация в сети построена на "delay". Я уже заметил что в течении этих 5 секунд ничего не происходит. тогда как по другому задать задержку между моментом когда диод горит и срабатыванием реле?
Ну так вся информация в сети построена на "delay". Я уже заметил что в течении этих 5 секунд ничего не происходит. тогда как по другому задать задержку между моментом когда диод горит и срабатыванием реле?
Ну не вся . Обычно новички millis() упор не замечают.
Ну так вся информация в сети построена на "delay".
Делей забыть, сеть сменить ;) delay - сильно лоховский подход о чем qwone по философски намекнул выше. Да, если чел совсем нулевый - ну чего делать?! Пусть хоть с delay пишет. Но если Вы сами уже замечаете проблему - так таки пора забыть делей. Вон, в соседней теме туда посылают - http://alxarduino.blogspot.ru/2013/09/BlinkAndPrintWithoutDelay.html
от Delay все равно не смог отказаться =) с Режимами работы реле согласно задачи разобрался, но возникла другая ошибка - диод горит только после первого срабатывания кнопки. во всех остальных случаях - нет. где искать ошибку?
kaar85, Ваша ошибка в выборе набора состояний. Их у Вас гораздо больше пяти:
1. Первое срабатывание датчика.
2. Первые две секунды после второго срабатывания датчика.
3. Последующие секунды после второго срабатывания датчика.
4. Первые две секунды после третьего срабатывания датчика.
5. Последующие секунды после третьего срабатывания датчика.
6. Первые две секунды после четвертого срабатывания датчика.
7. Последующие секунды после четвертого срабатывания датчика.
При этом переходы 2-3, 4-5 и 6-7 происходят не по датчику, а по времени. А если датчик сработал ранее 2 секунд, состояния перепрыгивают через одно.
kaar85, Ваша ошибка в выборе набора состояний. Их у Вас гораздо больше пяти:
1. Первое срабатывание датчика.
2. Первые две секунды после второго срабатывания датчика.
3. Последующие секунды после второго срабатывания датчика.
4. Первые две секунды после третьего срабатывания датчика.
5. Последующие секунды после третьего срабатывания датчика.
6. Первые две секунды после четвертого срабатывания датчика.
7. Последующие секунды после четвертого срабатывания датчика.
При этом переходы 2-3, 4-5 и 6-7 происходят не по датчику, а по времени. А если датчик сработал ранее 2 секунд, состояния перепрыгивают через одно.
1. Увеличить количесво режимов.
2. Предусмотреть переход из режима в режим не только по кнопке, но и по времени.