Вроде с таймерами разобрался, но никак не могу реализовать задуманное. Плиз, хелп!!!
- Войдите на сайт для отправки комментариев
Ср, 11/10/2017 - 01:33
Затея какая: от нажатия кнопки должен загореться один светодиод. По истечении 10 секунд первый светодиод должен погаснуть, а второй зажечься тоже на 10 секунд. При этом всем, нужно при нажатии второй кнопки весь этот процес прервать и вернуться в основную программу. Вот взял чужой скетч и на его основе пытаюсь реализовать. Второй LED либо совсем не зажигается, либо зажигается автоматически.
const int button1Pin = 5; const int button2Pin = 3; const int led1Pin = 13; const int led2Pin =4 ; unsigned long led1OnTime; unsigned long led2OnTime; //bool led1On; //Изначально было влючены везде эти переменные, но я их отключил и разницы в работе не увидел. //bool led2On; void setup() { /////////SETUP///////// pinMode(led1Pin, OUTPUT); pinMode(led2Pin, OUTPUT); pinMode(button1Pin, INPUT); pinMode(button2Pin, INPUT); //led1On = false; //led2On = false; } void loop(){ /////////LOOP///////// if (digitalRead(button1Pin) == HIGH) { //Кнопка1 нажата, лед включен, статус вкл, digitalWrite(led1Pin, HIGH); //led1On = true; led1OnTime = millis(); } if (digitalRead(button2Pin) == HIGH) { //Кнопка2 нажата, лед включен, статус вкл, digitalWrite(led2Pin, HIGH); //led2On = true; led2OnTime = millis(); } //if(led1On) if(millis() - led1OnTime > 10000) { digitalWrite(led1Pin, LOW); //led1On = false; } //if(led2On) if(millis() - led2OnTime > 10000) { digitalWrite(led2Pin, LOW); //led2On = false; } }
В чем сложность?
У Вас есть 4 события с действиями:
1. Надата кнопка1 (строка 21)
2. Нажата кнопка2 (27)
3. Закончилось время горения светодиода1 (34)
4. Закончилось время горения светодиода2 (41)
И действия:
1. вкл. светодиод1 (22,24)
2. выкл светодиод1 (35)
3. вкл светодиод2(28,30)
4. выкл светодиод2 (42)
Вам надо разложить действия по событиям.
Я пробовал. Пробовал с булин переменными, но вторая лампа либо вообще не зажигается, либо зажигается сама в цикле, либо постоянно горит. Топо не хватает либо знаний, либо клепки, либо вообще подход ложный, либо все вместе. Сюда обращаюсь только в крайних случаях, после нескольких дней самостоятельных поисков решений когда уже опускаются руки, не люблю напрягать других людей и вообще кайфую когда получается у самого, но тут уже резерв терпения закончился. Сам терпеть не могу когда люди не включают мозг и хотят, что бы все за них сделали. По этому прошу более конкретной помощи со скетчем, либо действительно дельного совета куда копать. То за что этот скетч отвечает я прекрасно знаю, но не знаю как из него сделать то что нужно.
P.S.
Я не программер, я самоучка, что в компьютерной тематике, что в программировании ардуины. С компьютерами я больше 15 лет работаю и было у кого спросить, то в программировании даже посоветоваться, кроме форума не с кем. Хотя есть мысли пойти на курсы программирования и этим зарабатывать на жизнь, но это пока мысли, сейчас я битву с ардуиной проигрываю(.
Странно, как можно быть с компьютерами 15 лет и даже просто из любопытства не научиться банальным алгоритмам (
Может и не стоит начинать.
Начинаем с начала :)
Опишите алгоритм работы в терминах из #1
Пример:
Событие98: выполняем действие №77, №88
Событие99: выполняем действие №....
Я попросил помощи, а не рассуждений как можно не научиться. Когда меня просят помочь настроить автоматический бэкап на облако я не начинаю строить из себя гуру и сверху в низ рассуждать как можно было этому не научиться, а либо даю конкретную статью, а не книгу по безопасности данных, либо лично пошагово направляю человека, в плоть до того, что удаленно подключаюсь и помогаю. Из за таких людей и не хочется сюда обращаться. Лично я не слишком дофига видел программеров, которые хорошо разбираются в системном администрировании. Ничего, что это вообще разные направления? Я думаю andycat такой суперовый, что у него сразу же все начало получаться как только попробовал? Верно? Не было никаких загвоздок, все было понятно и элементарно? Сидишь на форуме, видешь просьбу о помощи либо помоги, либо пройди мимо. Ты совсем не знаешь собеседника, что бы рассуждать стоит ли начинать или нет. Может я меньше недели занимаюсь контроллерами и это единственная часть, которую мне осталось доделать до рабочей сигналке на RFID, датчиков растояния (не движения), GSM , на разрыв периметра, вибрационных датчиков на попытку взлома замка, т.к. от ёмкостного датчика пришлось отказаться из-за слишком больших помех. Так, что? Все еще не стоит начинать заниматься???
"письками меряться" :)
и кстати все гораздо проще: я системный администратор уже лет 20 , и всякие бэкапы в облако, и настройка Linux/Windows,
и чего я только не умею, и да, я не программист по образованию. Но начинал в 90х на Z80 и ВМ80
(дай бог памяти так назывался аналог Intel8080) на ассемблере и я с трудом представляю системного администратора,
который не знает как работают микропроцессоры и не может нарисовать алкоритм из двух кнопок :(
а все на самом деле просто:
"Вот взял чужой скетч" - это не правильно - сначала в голове (на бумаге) нарисуте алгоритм. - а реализовать его в коде элементарно.
Лично я не слишком дофига видел программеров, которые хорошо разбираются в системном администрировании. Ничего, что это вообще разные направления?
все стало еще интереснее. Как можно быть сисадмином, не умея программировать? А как же системные скрипты? Пересборка софта? Правка исходников под свою систему, наконец? Или вы такой сисадмин, что только мышкой в винде дергаете? Тогда вы не сисадмин, а банальный эникей.
Я 8 лет был сисадмином небольшой сетки с десятком серверов - программировать нужно было ежедневно. Считай именно на этой работе и научился, хотя профильного образования никогда не имел.
пользуйтесь на здоровье, решение "в лоб", наверняка можно оптимизировать, но лень.
ЗЫ. Хороший сис.админ должен уметь почти все :)
кстати да, совсем забыл: со мной недавно работал такой "системный администратор", стаж работа лет 15 , а максимум он умел винду переставить и офис поставить - так что бывают такие :)
А все таки, почему в Ардуино так не любят машины состояний ?
А все таки, почему в Ардуино так не любят машины состояний ?
потому что область их применения слишком узкая. Новички ими не пользуются, потому что для них это слишком сложно, а для чуть более продвинутых проектов машины состояний уже получаются слишком громоздкими. Пример - вот сейчас делаю, в принципе, несложный проект весов с автоматической передачей показаний по GSM. Вроде и код небольшой. всего-то обработка событий от весов и от модема. А все равно уже пять вложенных друг в друга конечных автоматов...
А все таки, почему в Ардуино так не любят машины состояний ?
а можно расшифровать вопрос?
Почитал в Википедии ответ: я думаю все зависит от задачи, до 10ка уровней перехода можно и так запрограммировать.
Ну просто в данном случае автомат был бы как раз кстати.
Да и псевдо задачи на них делать легче.