Возможность включать свет сенсорной кнопкой и голосом

cron
Offline
Зарегистрирован: 01.02.2017

Друзья помогите!

Есть сенсорная кнопка "HTTM емкостная кнопка"  и easy vr для управления голосом.

Так вот сенсорной кнопкой я включаю и выключаю свет. Управляющий пин кнопки в режиме INPUT.
В цикле loop я проверяю если пин кнопки в HIGH я включаю свет подовая высокий уровень на пин с диодом, если в LOW то тушу свет подавая на диоl LOW. Тут пока все в порядке.

Теперь я подключил easy vr и по голосу подаю на диод HIGH включая его, но постаянная проверка сенсорной кнопки тутже тушит его, так как сенсорная кнопка находится в LOW. 

 

т.е. что бы я не делал постоянное поджигая диод, проверка сенсорной кнопки всегда будет его тушить, так как кнопка изначально находится в LOW. 

подскажите как подружить их что бы включать/выключать диод и кнопкой и голосом.
 

evgta
Offline
Зарегистрирован: 02.09.2016

При переключении сенсора выставить флаг чтобы больше арбуина не тыкала включение света пока состояние сенсора не изменится на другое. Соответсвенно выкл аналогично.

cron
Offline
Зарегистрирован: 01.02.2017

ваша мысль логична, ибо классика))

но проблема в другом. Внимание!
Когда происходит первый запуск ардуин, сенсорная кнопка еще не трогалась и находиться в LOW, а значит бесконечно срабатывает выключение света. 

т.е. когда я включу его голосом он сразу потухает так как сенсор в выключеном состоянии. 

Логично было бы сделать сенсор в HIGH когда я включаю свет голосом, но пин сенсора находится в режиме INPUT поэтому управлять им в HIGH или LOW в ручную неполучится. 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

cron, Вы что нибудь слвшали о логических операциях?

Или давайте зайдем с другой стороны: напишите по-русски, при каких условиях должен гореть свет?

evgta
Offline
Зарегистрирован: 02.09.2016

У сенсора есть индикация включено или выключено? Если нет. То все просто. При включении в сетапе проверяется состояние сенсора и выставляется значение выключено а также флаг. А потом в лупе
Проверяется состояние сенсора. Если оно меняется тогда включаем свет.

cron
Offline
Зарегистрирован: 01.02.2017

непонимаю! ММммммм сенсор имеет только три контакта один из них упровляющий и он подключен к пину INPUT и сенсор  делает на пине ардуины либо 1 либо 0. Я вижу проблему в том что подать программно на сенсор 1 или 0 невозможно, так как пин в режиме INPUT или я не прав? ну у меня не получается. Т.е. ваши предложения заключаются в том что бы я программно с ардуины подал логическую единицу на сенсор, но это не получается. сам сенсор только устанавливает состояния пина. Отнеситесь с терпением.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

cron пишет:

непонимаю!

Это заметно.

Цитата:

Я вижу проблему в том что подать программно на сенсор 1 или 0 невозможно

Вообще-то это возможно, но это совсем не то, что Вам нужно. И именно в этом проблема. Т.е. в том, что Вы пока не понимаете, что именно Вам нужно. 

А для того, чтобы понять, Вам нужно попытаться внятно сформулировать, чего же Вы хотите. 

Еще раз перечитайте пост №3 и ответьте на поставленный там вопрос. Как только Вы это сделаете, Вы поймете, что делать дальше.

evgta
Offline
Зарегистрирован: 02.09.2016

Ээ. А ардуина во всем этом учавствует?

cron
Offline
Зарегистрирован: 01.02.2017

И так задача:
включать свет! как голосом так и кнопкой-сенсором подовая 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 так как сенсор выключен.

На сколько я понимаю флаги тут не прокатят потому что, как только я выставлю флаг(типа свет включен) что бы свет не отключался сенсор перестанет работать, так как флаг не даст его потушить уже сенсором. Вроде я все понятно объясняю. 

Возможно я пренципиально подхожу не так к этой задаче. Ну к вам я и обратился за помощью. Помогайте кто как может.

 

 

 

 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Вот так и дальше пишите .

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();
}

 

cron
Offline
Зарегистрирован: 01.02.2017

ой-ё-ё-ё-й))))

А можно логику кода расписать или прокоментировать логику прям в коде))) 
В си я не силен. Но попробую понять если логику мышления пойму.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Вы не только в Си не сильны, но и в логике.  Если вам надо включить в комнате свет, вы включаете логику , или все же включаете свет кнопкой. В классе лампа есть метод ON(). вот он и включает Лампу. А классы Голос и Кнопка вызывают функции если они определили что кнопка нажата или звучит голос.  Я написать вам программу не смогу, так как я отвык от Ардуиновского нубо стиля. А мой стиль вы не поймете, так как слабы не только в С++, но и в Си.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Логически задача неразрешима, если на включение можно  задействовать оператор ИЛИ, то на выключение получается только с оператором И, попробуйте реализовать ваши хотелки на двух выключателях, получилось, нет, значит сие невозможно

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

cron, раз Вы не можете решить задачу сразу от начала до конца, нужно разбить ее на последовательные этапы.

Пока же у Вас последовательных этапов нет, а есть фрагменты разных этапов, которые Вы не можете увязать между собой.

На первом этапе нужно понять задачу. Вот давайте с этого этапа и начнем. А обсуждение реализации, а тем более кода - пока отложим.

Что у нас есть?

Есть два датчика:

- один может выдавать 0 или 1,

- что выдает другой, я из Вашего описания так и не понял. Если Вам это известно - напишите.

Кроме того, нам нужно при каких-то условиях включать и выключать свет (т.е. два состояния). Эти условия целиком определяются:

1 текущим состоянием 1-го датчика,

2 предыдущим состоянием 1-го датчика,

3 текущим состоянием 2-го датчика,

4 предыдущим состоянием 2-го датчика.

Это - в общем виде. В конкретном случае может оказаться, что какие-то из этих 4-х условий нам не понядобятся.

Так вот, нужно:

1. Уточнить, что же мы имеем на выходе 2-го датчика.

2. Сформулировать, как состояние света зависит от 4-х упомянутых выше условий. Если трудно сформулировать словами, то хотя бы привести таблицу, т.е. 16 строк с перебором всех возможных условий и желаемая реакция на эти условия.

evgta
Offline
Зарегистрирован: 02.09.2016

эта задача не решается при использовании 1 пина в дуине, от сенсора и от датчика голоса выходные пины надо к разным пинам на дуине цеплять

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

evgta пишет:

эта задача не решается при использовании 1 пина в дуине, от сенсора и от датчика голоса выходные пины надо к разным пинам на дуине цеплять

Эта задача вообще не решается, если думаете иначе пожалуйста алгоритм в студию в формате уравнений булевой алгебры ну или схему на выключателях приведите, если нет схемы то нет и решения

evgta
Offline
Зарегистрирован: 02.09.2016

а ТС для начала током не объяснил алгоритм работы датчиков

сенсор при касании что делает? включает высокий уровень, а затем при отпускании низкий? или для низкого уровня надо снова коснуться.

тоже и с датчиком голоса

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

evgta пишет:

а ТС для начала током не объяснил алгоритм работы датчиков

сенсор при касании что делает? включает высокий уровень, а затем при отпускании низкий? или для низкого уровня надо снова коснуться.

тоже и с датчиком голоса

да без разницы, задача не имеет решения

cron
Offline
Зарегистрирован: 01.02.2017

Задачу решил спомощью добавления переменной которая хранит состояние кнопки(По сути совет с флагом помог).
но я непонял сначала куда вставить флаг, т.е. мне нужна была логика поведения а не код. Но уже не суть.

в шапку добавил:
 

boolean button_state = false;

в 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 - просто за то что винипух)

Ну а в целом всем спасибо)))

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

cron пишет:

Задачу решил спомощью добавления переменной которая хранит состояние кнопки(По сути совет с флагом помог).
но я непонял сначала куда вставить флаг, т.е. мне нужна была логика поведения а не код. Но уже не суть.

в шапку добавил:
 

boolean button_state = false;

в 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 - просто за то что винипух)

Ну а в целом всем спасибо)))

Весь код опубликуйте пожалуйста в котором " включать/выключать диод и кнопкой и голосом."

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Позабавило - "Задачу решил с помощью добавления переменной которая хранит состояние кнопки"
Интересно, как это можно решить с помощью добавления переменной )))
L=K+Vs
!L=!K*!Vs

Весь код опубликуйте пожалуйста в котором " включать/выключать диод и кнопкой и голосом."

Что-то ГУРУ молчат да и ТС слился
 

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

ua6em пишет:

Позабавило - "Задачу решил с помощью добавления переменной которая хранит состояние кнопки"

прям, как я в детстве.

ua6em пишет:

Что-то ГУРУ молчат да и ТС слился

я не знаю, как отличать голос человека от мяукания или звуков телевизора.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Клапауций 112 пишет:

я не знаю, как отличать голос человека от мяукания...

А что, мяукает человек не голосом? Тогда чем?

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

andriano пишет:

А что, мяукает человек не голосом? Тогда чем?

в каком месте я утверждал, что человек мяукает не голосом?[это риторический вопрос]

*рептилоид, свали в Сургут на пустом месте начинать дебаты.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

не о голосе речь, о нереализуемости задачи )))

ОНИ сначала берутся программировать, а уж потом пытаются построить логические зависимости
Задача ведь выеденного яйца не стоит, то-есть - не решаемая, весь код одна строка всего, но при условии, что выключаться диод будет когда И сенсорный выключатель и  датчик Vs в положении выключен, ну а включаться соответственно или от одного или от другого или от двух сразу )))

Но ТС утверждает, что у него всё работает, то-есть булева алгебра
L=K+Vs
!L=!K*!Vs

ИДЁТ ЛЕСОМ

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Клапауций 112 пишет:

andriano пишет:

*рептилоид, свали в Сургут на пустом месте начинать дебаты.

По каким признакам определяешь, не прикалываюсь, интересно

uno
Offline
Зарегистрирован: 16.06.2016

Логика простая- изменилось состояние чего то меняем состояние диода на противоположное.

хранить надо диод вкл или выключен. дотронулись до сенсора меняем состояние . пришла команда с голоса меняем сотояние.

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

uno пишет:

Логика простая- изменилось состояние чего то меняем состояние диода на противоположное.

хранить надо диод вкл или выключен. дотронулись до сенсора меняем состояние . пришла команда с голоса меняем сотояние.

Ага, кошка мявкнула и свет потух

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

uno пишет:

Логика простая- изменилось состояние чего то меняем состояние диода на противоположное.

хранить надо диод вкл или выключен. дотронулись до сенсора меняем состояние . пришла команда с голоса меняем сотояние.

В полуметре от сенсора втыкаем утюг в розетку, за время втыкания успеваем поменять состояние раз пятнадцать.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ЕвгенийП пишет:

uno пишет:

Логика простая- изменилось состояние чего то меняем состояние диода на противоположное.

хранить надо диод вкл или выключен. дотронулись до сенсора меняем состояние . пришла команда с голоса меняем сотояние.

В полуметре от сенсора втыкаем утюг в розетку, за время втыкания успеваем поменять состояние раз пятнадцать.

У ТС всё работает ))) вопрос не в утюге, а матмодели ))) чисто теоретический так сказать
хотелось бы увидеть код опровергающий все законы логики:

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);  // последовательное подключение выключателей

смутно чую - не увидим мы кода

 

uno
Offline
Зарегистрирован: 16.06.2016

Независимое подключение забыли.

Поищите коридорные(проходные) выключатели физические в каждом магазине электротоваров есть и опишите их схему в мат модели. Весь мир уже торгует, а у вас мат модель не получается, теоретик вы наш.

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

uno пишет:

Поищите коридорные(проходные) выключатели физические

я запретил.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

uno пишет:

Независимое подключение забыли.

Поищите коридорные(проходные) выключатели физические в каждом магазине электротоваров есть и опишите их схему в мат модели. Весь мир уже торгует, а у вас мат модель не получается, теоретик вы наш.

А это что, практик вы наш!?
 

if (K==1 && Vs==1){L=1;} else {L=0;} digitalWrite(L_pn,L);  // последовательное подключение выключателей

 

uno
Offline
Зарегистрирован: 16.06.2016
if (K!=К1 && V!=V1){L=1;К1=К;V1=V} else {L=0;}

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

uno пишет:

if (K!=К1 && V!=V1){L=1;К1=К;V1=V} else {L=0;}

Вы сами поняли что глупость написали? Или Вы всех тут за идиотов считаете?

Условие первичного включения - оба выключателя в положении ON, условия выключения, оба выключателя в положении OFF

По условию задачи выключаться и включаться должны ЛЮБЫМ ИЗ

uno
Offline
Зарегистрирован: 16.06.2016
if (K!=К1 && V!=V1){К1=К;V1=V
if (L==1){L=0;} else {L=1;}}

Точнее так. у сенсора и голоса нет положение есть действие дотронулись до сенсора -сказали кодовую фразу. указаная логика и фиксирует что произвели действие с любым из устройств. А вот вы как раз и подменили условия заменим его на горит пока дотрагиваюсь. или пока говорю.

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

uno пишет:

if (K!=К1 && V!=V1){К1=К;V1=V
if (L==1){L=0;} else {L=1;}}

Точнее так. у сенсора и голоса нет положение есть действие дотронулись до сенсора -сказали кодовую фразу. указаная логика и фиксирует что произвели действие с любым из устройств. А вот вы как раз и подменили условия заменим его на горит пока дотрагиваюсь. или пока говорю.

Вот стандартный кнопочный пост в этой задаче, но только 4 кнопки, модифицируйте до двух выключателей

uno
Offline
Зарегистрирован: 16.06.2016

Не выключателей, а кнопок и при нажатии любой кнопки меняется состояние лампы на противоположное.

 

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

uno пишет:

Не выключателей, а кнопок и при нажатии любой кнопки меняется состояние лампы на противоположное.

Нарисуй! Мы посмотрим...и без тра ля ля, СХЕМА

uno
Offline
Зарегистрирован: 16.06.2016

Чтото у меня рисунки нехотят грузиться.  Как то так

           ________________

  +_/   _________________   \__ лампочка __ -

любым можно включить, любым выключить

uno
Offline
Зарегистрирован: 16.06.2016
ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

uno пишет:

Чтото у меня рисунки нехотят грузиться.  Как то так

           ________________

  +_/   _________________   \__ лампочка __ -

любым можно включить, любым выключить


 

Это схема на переключателях, описывается так:

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;}}

 

uno
Offline
Зарегистрирован: 16.06.2016

Я написал для кнопки. нарисовал схему для переключателей. вы выдумали себе условие задачи и теперь выдергивате ответы на разные вопросы и неправильно их интерпритируете. Автор сказал что у него работает. сами привели 2 модели для кнопок и переключателей которые работает и продолжаете дальше тролить.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

uno пишет:

Я написал для кнопки. нарисовал схему для переключателей. вы выдумали себе условие задачи и теперь выдергивате ответы на разные вопросы и неправильно их интерпритируете. Автор сказал что у него работает. сами привели 2 модели для кнопок и переключателей которые работает и продолжаете дальше тролить.

я попросил нарисовать, вы нарисовали два переключателя или это кнопка с фиксацией?

Автор просил подсказать - подскажите как подружить их что бы включать/выключать диод и кнопкой и голосом.

Здесь разобрано уже три алгоритма реализованные в одну строку, так что именно автору надо???

Главное - независимая работа и кнопки и датчика - нереализуема

 

uno
Offline
Зарегистрирован: 16.06.2016

как не реализуема подошел к выключателю  1 нажал включил нажал еще раз выключил. подошел к 2 нажал квлючил нажал выключил.

или включил в 1 месте выключил в другом. хватить нести чуш и цепляться к словам.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

uno пишет:

как не реализуема подошел к выключателю  1 нажал включил нажал еще раз выключил. подошел к 2 нажал квлючил нажал выключил.

или включил в 1 месте выключил в другом. хватить нести чуш и цепляться к словам.

Если на клетке с буйволом увидите надпись тигр не верь глазам своим ...
У сенсоров есть индикация, она показывает, что включено к примеру, а по факту выключено и наоборот, если ТС это устраивает, то флаг в руки...
Совершенно не цепляюсь и не тролю, я прямо говорю, что вы там наворотили с кодом, это же начальные знания булевой алгебры, по сути - арифметика, а у вас там, как любил выражаться Израиль Моисеевич - обычный еврейский бардак...
у коллег вон за замену резистора марки ВС на МЛТ расстрел на месте ))) шучу конечно, но по существу - верно

Дайте нормальную человеческую реализацию, где включение датчика и сенсора отображаемое соответствующим индикатором лампу включает, а выключение - выключает, то-есть выключение сенсорной кнопки выключит и звуковой датчик, а включение звукового датчика включит и сенсорный
Заведомо невыполнимые условия
Иначе, всё работает как ТС описал в первом посте

 

uno
Offline
Зарегистрирован: 16.06.2016

ua6em пишет:

У сенсоров есть индикация, она показывает, что включено к примеру, а по факту выключено и наоборот, если ТС это устраивает, то флаг в руки...

Чукча не читатель, чукча писатель . 8 пост -"сенсор самый приметивный не может помнить свое состояние". не помнит значит и не отображает.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

uno пишет:
Чукча не читатель, чукча писатель . 8 пост -"сенсор самый приметивный не может помнить свое состояние". не помнит значит и не отображает.

Ну да правильно написано. Сенсор не память и даже не триггер. Он точно не должен помнить свое состояние. Он должен определять состояние объекта, и не потому что примитивный, а потому что сенсор.  Это и чукча может сказать. Если оленей нет, значит они убежали. :) И не зачем помнить, что они здесь были. Надо бежать за оленями.Потому что олени еда, а еда это жизнь.

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

uno пишет:

ua6em пишет:

У сенсоров есть индикация, она показывает, что включено к примеру, а по факту выключено и наоборот, если ТС это устраивает, то флаг в руки...

Чукча не читатель, чукча писатель . 8 пост -"сенсор самый приметивный не может помнить свое состояние". не помнит значит и не отображает.

АГА - "но постаянная проверка сенсорной кнопки тутже тушит его, так как сенсорная кнопка находится в LOW."

По словарю значение этого слова -отухать, затухать, гаснуть, у(по)гасать. Огонь тухнет.
И шо там горело, если не индикация?

Тогда программный RS триггер:
 

If(K==1 || Vs==1) {L=!L;}  digitalWrite(L_pin,L);    //схема программного RS триггера

В любом случае в loop одна строка, а не то, что вы там наворочали