Возможность включать свет сенсорной кнопкой и голосом
- Войдите на сайт для отправки комментариев
Друзья помогите!
Есть сенсорная кнопка "HTTM емкостная кнопка" и easy vr для управления голосом.
Так вот сенсорной кнопкой я включаю и выключаю свет. Управляющий пин кнопки в режиме INPUT.
В цикле loop я проверяю если пин кнопки в HIGH я включаю свет подовая высокий уровень на пин с диодом, если в LOW то тушу свет подавая на диоl LOW. Тут пока все в порядке.
Теперь я подключил easy vr и по голосу подаю на диод HIGH включая его, но постаянная проверка сенсорной кнопки тутже тушит его, так как сенсорная кнопка находится в LOW.
т.е. что бы я не делал постоянное поджигая диод, проверка сенсорной кнопки всегда будет его тушить, так как кнопка изначально находится в LOW.
подскажите как подружить их что бы включать/выключать диод и кнопкой и голосом.
При переключении сенсора выставить флаг чтобы больше арбуина не тыкала включение света пока состояние сенсора не изменится на другое. Соответсвенно выкл аналогично.
ваша мысль логична, ибо классика))
но проблема в другом. Внимание!
Когда происходит первый запуск ардуин, сенсорная кнопка еще не трогалась и находиться в LOW, а значит бесконечно срабатывает выключение света.
т.е. когда я включу его голосом он сразу потухает так как сенсор в выключеном состоянии.
Логично было бы сделать сенсор в HIGH когда я включаю свет голосом, но пин сенсора находится в режиме INPUT поэтому управлять им в HIGH или LOW в ручную неполучится.
cron, Вы что нибудь слвшали о логических операциях?
Или давайте зайдем с другой стороны: напишите по-русски, при каких условиях должен гореть свет?
У сенсора есть индикация включено или выключено? Если нет. То все просто. При включении в сетапе проверяется состояние сенсора и выставляется значение выключено а также флаг. А потом в лупе
Проверяется состояние сенсора. Если оно меняется тогда включаем свет.
непонимаю! ММммммм сенсор имеет только три контакта один из них упровляющий и он подключен к пину INPUT и сенсор делает на пине ардуины либо 1 либо 0. Я вижу проблему в том что подать программно на сенсор 1 или 0 невозможно, так как пин в режиме INPUT или я не прав? ну у меня не получается. Т.е. ваши предложения заключаются в том что бы я программно с ардуины подал логическую единицу на сенсор, но это не получается. сам сенсор только устанавливает состояния пина. Отнеситесь с терпением.
непонимаю!
Это заметно.
Я вижу проблему в том что подать программно на сенсор 1 или 0 невозможно
Вообще-то это возможно, но это совсем не то, что Вам нужно. И именно в этом проблема. Т.е. в том, что Вы пока не понимаете, что именно Вам нужно.
А для того, чтобы понять, Вам нужно попытаться внятно сформулировать, чего же Вы хотите.
Еще раз перечитайте пост №3 и ответьте на поставленный там вопрос. Как только Вы это сделаете, Вы поймете, что делать дальше.
Ээ. А ардуина во всем этом учавствует?
И так задача:
включать свет! как голосом так и кнопкой-сенсором подовая HIGH на 23-й пин с диодами.
1) В setup я ставлю пин с сенсором в режим INPUT для того что бы управлять 10 пином устанаяливая его в HIGH или LOW самим сенсором. Исхожу из того что свет при старте выключен!
2) Сенсором я велючаю/выключаю свет устанавливая на 10 пине 1 или 0
Тут все работает!
3) Сенсор самый премитивный и неможет помнить своего состояния. Изначально он выключен.
в loop я делаю вот так, проверяя в каком состоянии находится сенсор(вернее его пин):
if (digitalRead(10) == HIGH) { manual_svet == 0; // func_manual_vkl_svet(1); } if (digitalRead(10) == LOW) { manual_svet == 1; func_manual_vkl_svet(0); }Если сенсор перевел 10 пин в HIGH то свет включаю иначе выключаю.
Как я вижу проблему:
Так как в loop-e постоянно крутится эта проверка то как только я голосом подаю на 23 мин HIGH поджигая диоды эта проверка сразу переводит его в LOW так как сенсор выключен.
На сколько я понимаю флаги тут не прокатят потому что, как только я выставлю флаг(типа свет включен) что бы свет не отключался сенсор перестанет работать, так как флаг не даст его потушить уже сенсором. Вроде я все понятно объясняю.
Возможно я пренципиально подхожу не так к этой задаче. Ну к вам я и обратился за помощью. Помогайте кто как может.
Вот так и дальше пишите .
class Cl_Lamp { private: byte pin; public: Cl_Lamp(byte _pin); setup() {}; loop() {}; }; class Cl_Voice { private: byte pin; public: Cl_Voice(byte _pin); setup() {}; loop() {}; }; class Cl_Btn { private: byte pin; public: Cl_Btn(byte _pin); setup() {}; loop() {}; }; Cl_Lamp Lamp(2);// лампа на 2 выводе void Do_Voice() { Lamp.ON(); } Cl_Voice Voice(А0, & Do_Voice); // датчик голоса на А0 выводе void Do_Btn() { Lamp.ON(); } Cl_Btn Btn(3, & Do_Btn ); //кнопка на 3 выводе void setup() { Lamp.setup(); Voice.setup(); Btn().setup(); } void loop() { Lamp.loop(); Voice.loop(); Btn().loop(); }ой-ё-ё-ё-й))))
А можно логику кода расписать или прокоментировать логику прям в коде)))
В си я не силен. Но попробую понять если логику мышления пойму.
Вы не только в Си не сильны, но и в логике. Если вам надо включить в комнате свет, вы включаете логику , или все же включаете свет кнопкой. В классе лампа есть метод ON(). вот он и включает Лампу. А классы Голос и Кнопка вызывают функции если они определили что кнопка нажата или звучит голос. Я написать вам программу не смогу, так как я отвык от Ардуиновского нубо стиля. А мой стиль вы не поймете, так как слабы не только в С++, но и в Си.
Логически задача неразрешима, если на включение можно задействовать оператор ИЛИ, то на выключение получается только с оператором И, попробуйте реализовать ваши хотелки на двух выключателях, получилось, нет, значит сие невозможно
cron, раз Вы не можете решить задачу сразу от начала до конца, нужно разбить ее на последовательные этапы.
Пока же у Вас последовательных этапов нет, а есть фрагменты разных этапов, которые Вы не можете увязать между собой.
На первом этапе нужно понять задачу. Вот давайте с этого этапа и начнем. А обсуждение реализации, а тем более кода - пока отложим.
Что у нас есть?
Есть два датчика:
- один может выдавать 0 или 1,
- что выдает другой, я из Вашего описания так и не понял. Если Вам это известно - напишите.
Кроме того, нам нужно при каких-то условиях включать и выключать свет (т.е. два состояния). Эти условия целиком определяются:
1 текущим состоянием 1-го датчика,
2 предыдущим состоянием 1-го датчика,
3 текущим состоянием 2-го датчика,
4 предыдущим состоянием 2-го датчика.
Это - в общем виде. В конкретном случае может оказаться, что какие-то из этих 4-х условий нам не понядобятся.
Так вот, нужно:
1. Уточнить, что же мы имеем на выходе 2-го датчика.
2. Сформулировать, как состояние света зависит от 4-х упомянутых выше условий. Если трудно сформулировать словами, то хотя бы привести таблицу, т.е. 16 строк с перебором всех возможных условий и желаемая реакция на эти условия.
эта задача не решается при использовании 1 пина в дуине, от сенсора и от датчика голоса выходные пины надо к разным пинам на дуине цеплять
эта задача не решается при использовании 1 пина в дуине, от сенсора и от датчика голоса выходные пины надо к разным пинам на дуине цеплять
Эта задача вообще не решается, если думаете иначе пожалуйста алгоритм в студию в формате уравнений булевой алгебры ну или схему на выключателях приведите, если нет схемы то нет и решения
а ТС для начала током не объяснил алгоритм работы датчиков
сенсор при касании что делает? включает высокий уровень, а затем при отпускании низкий? или для низкого уровня надо снова коснуться.
тоже и с датчиком голоса
а ТС для начала током не объяснил алгоритм работы датчиков
сенсор при касании что делает? включает высокий уровень, а затем при отпускании низкий? или для низкого уровня надо снова коснуться.
тоже и с датчиком голоса
да без разницы, задача не имеет решения
Задачу решил спомощью добавления переменной которая хранит состояние кнопки(По сути совет с флагом помог).
но я непонял сначала куда вставить флаг, т.е. мне нужна была логика поведения а не код. Но уже не суть.
в шапку добавил:
в loop изменил:
if (digitalRead(10) == HIGH) { // поменял на if (digitalRead(23) == HIGH && button_state == false) manual_svet == 0; // func_manual_vkl_svet(1); } if (digitalRead(10) == LOW) { // поменял на if (digitalRead(23) == LOW && button_state == true) { manual_svet == 1; func_manual_vkl_svet(0); }
andriano + 100 - за попытку разобратьсяв моей проблеме, при минимуме данных)
ua6em - 10 - за бла бла бла
evgta + 10 за реальные советы
Винипух + 5 - просто за то что винипух)
Ну а в целом всем спасибо)))
Задачу решил спомощью добавления переменной которая хранит состояние кнопки(По сути совет с флагом помог).
но я непонял сначала куда вставить флаг, т.е. мне нужна была логика поведения а не код. Но уже не суть.
в шапку добавил:
в loop изменил:
if (digitalRead(10) == HIGH) { // поменял на if (digitalRead(23) == HIGH && button_state == false) manual_svet == 0; // func_manual_vkl_svet(1); } if (digitalRead(10) == LOW) { // поменял на if (digitalRead(23) == LOW && button_state == true) { manual_svet == 1; func_manual_vkl_svet(0); }
andriano + 100 - за попытку разобратьсяв моей проблеме, при минимуме данных)
ua6em - 10 - за бла бла бла
evgta + 10 за реальные советы
Винипух + 5 - просто за то что винипух)
Ну а в целом всем спасибо)))
Весь код опубликуйте пожалуйста в котором " включать/выключать диод и кнопкой и голосом."
Позабавило - "Задачу решил с помощью добавления переменной которая хранит состояние кнопки"
Интересно, как это можно решить с помощью добавления переменной )))
L=K+Vs
!L=!K*!Vs
Весь код опубликуйте пожалуйста в котором " включать/выключать диод и кнопкой и голосом."
Что-то ГУРУ молчат да и ТС слился
Позабавило - "Задачу решил с помощью добавления переменной которая хранит состояние кнопки"
прям, как я в детстве.
Что-то ГУРУ молчат да и ТС слился
я не знаю, как отличать голос человека от мяукания или звуков телевизора.
я не знаю, как отличать голос человека от мяукания...
А что, мяукает человек не голосом? Тогда чем?
А что, мяукает человек не голосом? Тогда чем?
в каком месте я утверждал, что человек мяукает не голосом?[это риторический вопрос]
*рептилоид, свали в Сургут на пустом месте начинать дебаты.
не о голосе речь, о нереализуемости задачи )))
ОНИ сначала берутся программировать, а уж потом пытаются построить логические зависимости
Задача ведь выеденного яйца не стоит, то-есть - не решаемая, весь код одна строка всего, но при условии, что выключаться диод будет когда И сенсорный выключатель и датчик Vs в положении выключен, ну а включаться соответственно или от одного или от другого или от двух сразу )))
Но ТС утверждает, что у него всё работает, то-есть булева алгебра
L=K+Vs
!L=!K*!Vs
ИДЁТ ЛЕСОМ
*рептилоид, свали в Сургут на пустом месте начинать дебаты.
По каким признакам определяешь, не прикалываюсь, интересно
Логика простая- изменилось состояние чего то меняем состояние диода на противоположное.
хранить надо диод вкл или выключен. дотронулись до сенсора меняем состояние . пришла команда с голоса меняем сотояние.
Логика простая- изменилось состояние чего то меняем состояние диода на противоположное.
хранить надо диод вкл или выключен. дотронулись до сенсора меняем состояние . пришла команда с голоса меняем сотояние.
Ага, кошка мявкнула и свет потух
Логика простая- изменилось состояние чего то меняем состояние диода на противоположное.
хранить надо диод вкл или выключен. дотронулись до сенсора меняем состояние . пришла команда с голоса меняем сотояние.
В полуметре от сенсора втыкаем утюг в розетку, за время втыкания успеваем поменять состояние раз пятнадцать.
Логика простая- изменилось состояние чего то меняем состояние диода на противоположное.
хранить надо диод вкл или выключен. дотронулись до сенсора меняем состояние . пришла команда с голоса меняем сотояние.
В полуметре от сенсора втыкаем утюг в розетку, за время втыкания успеваем поменять состояние раз пятнадцать.
У ТС всё работает ))) вопрос не в утюге, а матмодели ))) чисто теоретический так сказать
хотелось бы увидеть код опровергающий все законы логики:
if (K==1 || Vs==1){L=1;} else {L=0;} digitalWrite(L_pn,L); // параллельное подключение выключателей или if (K==1 && Vs==1){L=1;} else {L=0;} digitalWrite(L_pn,L); // последовательное подключение выключателейсмутно чую - не увидим мы кода
Независимое подключение забыли.
Поищите коридорные(проходные) выключатели физические в каждом магазине электротоваров есть и опишите их схему в мат модели. Весь мир уже торгует, а у вас мат модель не получается, теоретик вы наш.
Поищите коридорные(проходные) выключатели физические
я запретил.
Независимое подключение забыли.
Поищите коридорные(проходные) выключатели физические в каждом магазине электротоваров есть и опишите их схему в мат модели. Весь мир уже торгует, а у вас мат модель не получается, теоретик вы наш.
А это что, практик вы наш!?
if (K==1 && Vs==1){L=1;} else {L=0;} digitalWrite(L_pn,L); // последовательное подключение выключателейif (K!=К1 && V!=V1){L=1;К1=К;V1=V} else {L=0;}if (K!=К1 && V!=V1){L=1;К1=К;V1=V} else {L=0;}Вы сами поняли что глупость написали? Или Вы всех тут за идиотов считаете?
Условие первичного включения - оба выключателя в положении ON, условия выключения, оба выключателя в положении OFF
По условию задачи выключаться и включаться должны ЛЮБЫМ ИЗ
if (K!=К1 && V!=V1){К1=К;V1=V if (L==1){L=0;} else {L=1;}}Точнее так. у сенсора и голоса нет положение есть действие дотронулись до сенсора -сказали кодовую фразу. указаная логика и фиксирует что произвели действие с любым из устройств. А вот вы как раз и подменили условия заменим его на горит пока дотрагиваюсь. или пока говорю.
if (K!=К1 && V!=V1){К1=К;V1=V if (L==1){L=0;} else {L=1;}}Точнее так. у сенсора и голоса нет положение есть действие дотронулись до сенсора -сказали кодовую фразу. указаная логика и фиксирует что произвели действие с любым из устройств. А вот вы как раз и подменили условия заменим его на горит пока дотрагиваюсь. или пока говорю.
Вот стандартный кнопочный пост в этой задаче, но только 4 кнопки, модифицируйте до двух выключателей
Не выключателей, а кнопок и при нажатии любой кнопки меняется состояние лампы на противоположное.
Не выключателей, а кнопок и при нажатии любой кнопки меняется состояние лампы на противоположное.
Нарисуй! Мы посмотрим...и без тра ля ля, СХЕМА
Чтото у меня рисунки нехотят грузиться. Как то так
________________
+_/ _________________ \__ лампочка __ -
любым можно включить, любым выключить
http://legkoe-delo.ru/remont-doma/remont/1557-prokhodnoj-vyklyuchatel-sk...
Чтото у меня рисунки нехотят грузиться. Как то так
________________
+_/ _________________ \__ лампочка __ -
любым можно включить, любым выключить
Это схема на переключателях, описывается так:
if(K==Vs) {L=1;} else {L=0;}digitalWrite(L_pin,L); //схема на переключателях // Или её разновидность (при одинаковом положении выключателей лампа НЕ ГОРИТ if(K!=Vs) {L=1;} else {L=0;}digitalWrite(L_pin,L); //схема на переключателяхСхема не удовлетворят условию задачи, почувствуйте разницу, что вы написали:
if (K!=К1 && V!=V1){К1=К;V1=V if (L==1){L=0;} else {L=1;}}Я написал для кнопки. нарисовал схему для переключателей. вы выдумали себе условие задачи и теперь выдергивате ответы на разные вопросы и неправильно их интерпритируете. Автор сказал что у него работает. сами привели 2 модели для кнопок и переключателей которые работает и продолжаете дальше тролить.
Я написал для кнопки. нарисовал схему для переключателей. вы выдумали себе условие задачи и теперь выдергивате ответы на разные вопросы и неправильно их интерпритируете. Автор сказал что у него работает. сами привели 2 модели для кнопок и переключателей которые работает и продолжаете дальше тролить.
я попросил нарисовать, вы нарисовали два переключателя или это кнопка с фиксацией?
Автор просил подсказать - подскажите как подружить их что бы включать/выключать диод и кнопкой и голосом.
Здесь разобрано уже три алгоритма реализованные в одну строку, так что именно автору надо???
Главное - независимая работа и кнопки и датчика - нереализуема
как не реализуема подошел к выключателю 1 нажал включил нажал еще раз выключил. подошел к 2 нажал квлючил нажал выключил.
или включил в 1 месте выключил в другом. хватить нести чуш и цепляться к словам.
как не реализуема подошел к выключателю 1 нажал включил нажал еще раз выключил. подошел к 2 нажал квлючил нажал выключил.
или включил в 1 месте выключил в другом. хватить нести чуш и цепляться к словам.
Если на клетке с буйволом увидите надпись тигр не верь глазам своим ...
У сенсоров есть индикация, она показывает, что включено к примеру, а по факту выключено и наоборот, если ТС это устраивает, то флаг в руки...
Совершенно не цепляюсь и не тролю, я прямо говорю, что вы там наворотили с кодом, это же начальные знания булевой алгебры, по сути - арифметика, а у вас там, как любил выражаться Израиль Моисеевич - обычный еврейский бардак...
у коллег вон за замену резистора марки ВС на МЛТ расстрел на месте ))) шучу конечно, но по существу - верно
Дайте нормальную человеческую реализацию, где включение датчика и сенсора отображаемое соответствующим индикатором лампу включает, а выключение - выключает, то-есть выключение сенсорной кнопки выключит и звуковой датчик, а включение звукового датчика включит и сенсорный
Заведомо невыполнимые условия
Иначе, всё работает как ТС описал в первом посте
У сенсоров есть индикация, она показывает, что включено к примеру, а по факту выключено и наоборот, если ТС это устраивает, то флаг в руки...
Ну да правильно написано. Сенсор не память и даже не триггер. Он точно не должен помнить свое состояние. Он должен определять состояние объекта, и не потому что примитивный, а потому что сенсор. Это и чукча может сказать. Если оленей нет, значит они убежали. :) И не зачем помнить, что они здесь были. Надо бежать за оленями.Потому что олени еда, а еда это жизнь.
У сенсоров есть индикация, она показывает, что включено к примеру, а по факту выключено и наоборот, если ТС это устраивает, то флаг в руки...
АГА - "но постаянная проверка сенсорной кнопки тутже тушит его, так как сенсорная кнопка находится в LOW."
По словарю значение этого слова -отухать, затухать, гаснуть, у(по)гасать. Огонь тухнет.
И шо там горело, если не индикация?
Тогда программный RS триггер:
If(K==1 || Vs==1) {L=!L;} digitalWrite(L_pin,L); //схема программного RS триггераВ любом случае в loop одна строка, а не то, что вы там наворочали