Очень интересная логическая задача, на опрос состояния кнопок (help)

yozhikovd
Offline
Зарегистрирован: 17.10.2018

Друзья, добрый день!) История такая: пишу цикл проверки состояния кнопок. Условие: есть 2 тактовые кнопки, которые должны работать по ИДЕЕ в взаимоисключающем состоянии, другими словами если на кнопке 1 - HIGH, то на кнопке 2 обязательно -  LOW, и если HIGH у кнопки, то должно выводиться в сериал определенное сообщение. Так вот, возможна такая ситуация (не спрашивайте, как, почему, зачем, откуда корни), что эти кнопки, будут не в взаимоисключающем состоянии, обе либо в HIGH либо в LOW, что является состоянием ошибки, и на это событие (когда обе в одинаковом состоянии), тоже нужно реагировать определенным сообщением. Я написал определенный код, который делает прерывание событий + обработка дребезга, сравнивает состояние друг с другом и все хорошо, если нажимаешь кнопки по очереди, но есть одно маленькое НО: в моем проекте состоянием ошибки, является ТО состояние, когда кнопки находятся в одинаковом состоянии некоторое время (скажем 1 секунду), а рабочий режим кнопок их поочередное нажатие, другими словами, когда я нажал кнопку 1 и РЕЗКО ее отпускаю и нажимаю кнопку 2, в момент переключения, когда я отпустил кнопку 1, программа сравнивает свое состояние со 2 кнопкой на, которой LOW, и думает, что это состояние ошибки (мой кривокод), вот, а это не состояние ошибки, а рабочий момет переключения, как мне это пофиксить, надеюсь у меня получилось объяснить, код прикладываю) 

//1
const int switchPin1 = 2;
boolean switchPin1_memory = 0;
boolean switchPin1_now_memory = 0;
unsigned long switchPin1_lastPress;
boolean error1 = true;
  //2
const int switchPin2 = 3;
boolean switchPin2_memory = 0;
boolean switchPin2_now_memory = 0;
unsigned long switchPin2_lastPress;
boolean error2 = false;

void setup() {
 pinMode (switchPin1, INPUT);
 pinMode (switchPin2, INPUT);
 Serial.begin(9600);
 while(!Serial);
}

void loop() {

  //порт 1
  
switchPin1_now_memory = digitalRead(switchPin1);
  if (switchPin1_now_memory == 1 && switchPin1_memory == 0 && millis() - switchPin1_lastPress > 100)
  {
      switchPin1_memory = true;
      switchPin1_lastPress = millis(); 
       if (switchPin2_memory == switchPin1_memory)
           {
            error1 = !error1;
            Serial.println("Ошибка1");
            error1 = !error1;
           } 
               if (error1 != error2)
               { 
                 error1 = !error1;
                 Serial.println("Кнопка 1 нажата");
               }
  
  }
  
  if (switchPin1_now_memory == 0 && switchPin1_memory == 1)
  {
      switchPin1_memory = false;
      if (switchPin2_memory == switchPin1_memory)
      {
      error1 = !error1;
      }
      if (error1 != error2)
      {
      Serial.println("Ошибка11");
      }
      
     
  }

// Второй порт
  
  switchPin2_now_memory = digitalRead(switchPin2);
  
  if (switchPin2_now_memory == 1 && switchPin2_memory == 0 && millis() - switchPin2_lastPress > 100){
      switchPin2_memory = true;
      switchPin2_lastPress = millis();
      if (switchPin2_memory == switchPin1_memory)
        {
          error2 = !error2;
          Serial.println("Ошибка2");
          error2 = !error2;
         } 
              if (error1 != error2)
                     {
                      error2 = !error2;
                      Serial.println("кнопка 2 нажата");
                      
                     }
    
  }
  
  if (switchPin2_now_memory == 0 && switchPin2_memory == 1){
     switchPin2_memory = false;
      if (switchPin2_memory == switchPin1_memory)
     {
     error2 = !error2;
     }
     if (error1 != error2)
     {
      Serial.println("Ошибка2");
     } 
     
  }
  }
  

 

kalapanga
Offline
Зарегистрирован: 23.10.2016

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

yozhikovd
Offline
Зарегистрирован: 17.10.2018

Так я так и делаю

Senovik
Offline
Зарегистрирован: 06.10.2018

Попробуйте изменить:

(switchPin2_memory == switchPin1_memory)

Добавить условие, что это уже давно (условие выполняется больше секунды).

И очень неясно назначение вот этих "переворачиваний". Но тут уже дело ваше)

error1 = !error1;
Serial.println("Ошибка1");
error1 = !error1;

 

yozhikovd
Offline
Зарегистрирован: 17.10.2018

"Переворачивания" - кнопками я эмитирую реле) котакты могут притянуться и зарработает одна цепь питания(кнопка 1 нажата), могут отпасть и заработает совсем другая цепь(2кнопка нажата), а могут застрять в промежуточном положении - это и есть ошибка

yozhikovd
Offline
Зарегистрирован: 17.10.2018

Сделать еще временную переменную, например unsigned long ?

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

yozhikovd пишет:

"Переворачивания" - кнопками я эмитирую реле) котакты могут притянуться и зарработает одна цепь питания(кнопка 1 нажата), могут отпасть и заработает совсем другая цепь(2кнопка нажата), а могут застрять в промежуточном положении - это и есть ошибка

Так в реальности не две кнопки, а одна (одно реле или одна двухпозиционная кнопка - не важно), но с возможным залипанием в промежуточном состоянии?

Проблема элементарно решаеется RS-триггером. Причём решается полностью, раз и навсегда. А заодно он (триггер) и с дребезгом разберётся, можете забыть о нём (дребезге).

Так что ставьте триггер и не мудрите.

yozhikovd
Offline
Зарегистрирован: 17.10.2018

1) аппаратно эту проблему уже решали, и да вы правы можно rs-триггером, но! у меня сейчас задача стоит решить программно, ибо в виду некоторых обстоятельств невозможно решить физически. 

2) По поводу "Так в реальности не две кнопки, а одна (одно реле или одна двухпозиционная кнопка - не важно)", так то оно так, но когда реле притянуто, включется одна контактная группа и одна цепь питания, когда реле опускается, размыкая при этом прошлую цепь, и опустившись, замыкает другую контактную группу и включется совершенно другая цепь. И эти положения мне нужно логгировать в ардуино, по этому мне все равно придется с реле брать сигналы на два разных пина, и 2 кнопки сейчас это прекрасно эмулируют.

yozhikovd
Offline
Зарегистрирован: 17.10.2018

yozhikovd
Offline
Зарегистрирован: 17.10.2018

Вот, такая схема, мне просто тупо (не спрашивая) дают 2 провода с реле, и говорят, что нужно прогррамно сделать проверку 

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

Так делайте программный RS-триггер, чего Вы там лукаво мудрствуете?

Если Вы понимаете, что такое RS-триггер, то должны знать, что это просто операция NOR, которая программно пишется элементарно. Так вот её и надо писать именно в терминах логической операции  и таблицы истинности, а не пытаться сделать тоже самое, но  так, как будто Вы о логике никогда не слышали.

Распишите в программе таблицу истинности NOR и всё будет отлично работать.

yozhikovd
Offline
Зарегистрирован: 17.10.2018

Так пол логике у меня все нормально в коде, просто нужно еще создать какое то условие, чтобы в момент переключения контактов при условии, что в этот момент состояние кнопок будет одинаковое, аррдуино понимало, что это нужно игнорировать, но если этот момент равенста больше определенного кол ва времени, то это уже ошибка

sadman41
Онлайн
Зарегистрирован: 19.10.2016

У Ардуины еще пока не зафиксировано наличие сознания и воли - понимать и игнорировать оно не в состоянии по объективным причинам.

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

sadman41 пишет:

У Ардуины еще пока не зафиксировано наличие сознания и воли

Ну, почему, был тут такой деятель, всё ИИ на ардуино создавал.

b707
Offline
Зарегистрирован: 26.05.2017

я вот не пойму, что в этой задаче интересного с логической точки зрения? Две кнопки прочитать не можем? Прочитали одну, вторую, сравнили. Если обе нажаты - запомнили время, когда это случилось. Далее, если кнопки остаются нажатыми более оговоренного интервала - выдаем ошибку. ВСЕ.

Логика на уровне третьего класса, по-моему.

yozhikovd
Offline
Зарегистрирован: 17.10.2018

Я вот смотрю все такие "умные", даже сарказма не понимают. Одна из прорблем русского народа "выё*истость", вот человек посоветовал добавить условие временное, до меня сразу дошло, я спросил, как это реализовать мб чере времнную переменную. Нет надо же вые*, как обычно. Спасибо

yozhikovd
Offline
Зарегистрирован: 17.10.2018

По любому сидят 40 летние стесняшки и закомплексы. А если у человека просто не хватает  банально опыта и знаний в этой области, сразу тапками кидаться? вот после такого на форумы не хочется писать 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Откудова оне все вылазиють?

b707
Offline
Зарегистрирован: 26.05.2017

yozhikovd пишет:

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

не писайте в наш форум

ALEGYR
Offline
Зарегистрирован: 20.09.2018

yozhikovd пишет:

По любому сидят 40 летние стесняшки и закомплексы. А если у человека просто не хватает  банально опыта и знаний в этой области, сразу тапками кидаться? вот после такого на форумы не хочется писать 

Так обманывать нехорошо!

Тема-то объявлена для взрослых людей 

Цитата:

Очень интересная логическая задача, на опрос состояния кнопок (help)

а оказывается тут "у человека просто не хватает  банально опыта и знаний в этой области"!

Вот дяденьки и обиделись! Думали что будут иметь дело со специалистом, а их оказывается просто дилетант развел!

b707
Offline
Зарегистрирован: 26.05.2017

yozhikovd пишет:

Я вот смотрю все такие "умные", даже сарказма не понимают. Одна из прорблем русского народа "выё*истость"

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

Если ты не умеешь читать и не понимаешь советов - то это твои проблемы, не надо тут жалиться на то, что тебе форумы не нравятся.

yozhikovd
Offline
Зарегистрирован: 17.10.2018

Мне человек с ником Senovik, уже ответил я уже понял в какую сторону "капнуть", зато потом началось "у ардуино еще нет собственного разума, логика на уровне 3 класса,прочитать кнопку не можем". Вообще исходя из "логика на уровне 3 класса", так можно про все сказать, руководствуясь "все гениальное просто". "дяденьки обиделись", как девочки, ну если не интересна тебе эта тема, не пиши и все, в чем проблема? "Тема-то объявлена для взрослых людей", взрослые серьезные люди, которые действительно высококлассные специалисты, которые реально разбираются в "коде" просто не нуждаются в формуах, и не являются их активными участниками, так, что не считайте себя крутыми спецами, особенно если идет речь о разработке на ардуино :D

yozhikovd
Offline
Зарегистрирован: 17.10.2018

так, что расслабься боинг)

yozhikovd
Offline
Зарегистрирован: 17.10.2018

Ты вообще по братски ответил) Спасибо еще раз)

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

yozhikovd пишет:

Ты вообще по братски ответил) Спасибо еще раз)

Алаверды, прими добрый совет: форумы - они разные. У каждого - своя атмосфера. На этом форуме - борзеть не стоит, тут не заржавеет. Тебе и правда b707 дал годный совет, содержащий решение проблемы. Ну а дальше - всё пошло не так.

Честно предупреждаю: если ты продолжишь общение в том же духе - то на этом форуме тебе не прижиться. И я лично - буду всячески этому способствовать.

b707
Offline
Зарегистрирован: 26.05.2017

Очень интересная математическая проблема - 2+2 ?

yozhikovd
Offline
Зарегистрирован: 17.10.2018

Ой да ладно тебе чел, согласен совет годный, но если бы этот дядя не начал в духе "Шо за тупые вопросы", я бы сказал ему огромное спасибо. А если люди не понимают, что их пытаются привлесь, как можно быстрее к теме, такими заголовками, то тогда я не понимаю о чем с ними разговаривать, надеюсь я не сильно потратил его драгоценнейшее время, вдруг он второй фейсбук придумал, а тут отвлекся на проблему маленькго характера

yozhikovd
Offline
Зарегистрирован: 17.10.2018

Спасибо тебе огромное от всей души, просто огромнейшее, что обратил свой царский взор, что потратил самое дорогое, что у нас есть - время. Брат, не забуду никогда этого

ALEGYR
Offline
Зарегистрирован: 20.09.2018

yozhikovd пишет:

Мне человек с ником Senovik, уже ответил я уже понял в какую сторону "капнуть", зато потом началось "у ардуино еще нет собственного разума, логика на уровне 3 класса,прочитать кнопку не можем". Вообще исходя из "логика на уровне 3 класса", так можно про все сказать, руководствуясь "все гениальное просто". "дяденьки обиделись", как девочки, ну если не интересна тебе эта тема, не пиши и все, в чем проблема? "Тема-то объявлена для взрослых людей",

Так тему для взрослых людей окрывают взрослые люди!

yozhikovd пишет:

взрослые серьезные люди, которые действительно высококлассные специалисты, которые реально разбираются в "коде" просто не нуждаются в формуах, и не являются их активными участниками, так, что не считайте себя крутыми спецами, особенно если идет речь о разработке на ардуино :D

Так чего тогда обижаться на то что дилетанту ответили дилетанты?

yozhikovd
Offline
Зарегистрирован: 17.10.2018

"Так чего тогда обижаться на то что дилетанту ответили дилетанты?"

Проблема в том, что я признаю свою бестолковость в этом вопросе, а другие, считают себя великими спецами и великими кодерами

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Это не ты вчера RGB светодиод адресовал?

yozhikovd
Offline
Зарегистрирован: 17.10.2018

Нет, я 3 часа назад зарегистрировался

b707
Offline
Зарегистрирован: 26.05.2017

DetSimen пишет:

Это не ты вчера RGB светодиод адресовал?

не, не он. Тот был вежливый и называл меня единственным приличным человеком на этом форуме :)))

yozhikovd
Offline
Зарегистрирован: 17.10.2018

Жополизом кароч

ALEGYR
Offline
Зарегистрирован: 20.09.2018

yozhikovd пишет:

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

Так люди  сразу и поняли, что некто "Вася Пупкин", просто, как можно быстрее, пытается привлечь такими заголовками  к своей детской проблеме.  Ты пошутил! И с тобой пошутили!!!

yozhikovd
Offline
Зарегистрирован: 17.10.2018

Да успокойтесь, взрослые дяди, а то я по настоящему шутить начну)ALEGYR, ты то вообще кто?, с тобой вообще никто не разговаривает)    

ALEGYR
Offline
Зарегистрирован: 20.09.2018

yozhikovd пишет:

"Так чего тогда обижаться на то что дилетанту ответили дилетанты?"

Проблема в том, что я признаю свою бестолковость в этом вопросе, а другие, считают себя великими спецами и великими кодерами

Если признаешь свою бестолковость, то и начинать надо скромнее,  а не с использования современных маркетинговых технологий. Люди все-таки тут тусуются и делятся СВОИМ опытом, а не обучают, чтобы уже не один год, каждый день, по нескольку раз в день,  серьезно решать НЕ серьезные задачки! 

yozhikovd
Offline
Зарегистрирован: 17.10.2018

ALEGYR пишет:

yozhikovd пишет:

"Так чего тогда обижаться на то что дилетанту ответили дилетанты?"

Проблема в том, что я признаю свою бестолковость в этом вопросе, а другие, считают себя великими спецами и великими кодерами

Если признаешь свою бестолковость, то и начинать надо скромнее,  а не с использования современных маркетинговых технологий. Люди все-таки тут тусуются и делятся СВОИМ опытом, а не обучают, чтобы уже не один год, каждый день, по нескольку раз в день,  серьезно решать НЕ серьезные задачки! 

Я же тебе еще раз говорю, с тобой тут диалог вообще никто не ведет, ты можешь не писать твои сообщения вообще не интересны. По крайней мере моя задача, как маркетолога выполнена, вы заинтересовались. А писать в духе "пфф, 2+2 - это интересно? это интересная логическая задача", бля*ь да, мне интересно, для меня это какой то шаг в изучении чего то нового, если кто то из вас сверх разум и ему это соответственно не интересно, могли сразу закрыть тему? 

ALEGYR
Offline
Зарегистрирован: 20.09.2018

yozhikovd пишет:

Да успокойтесь, взрослые дяди, а то я по настоящему шутить начну)

Это будет интересно!

yozhikovd пишет:
ALEGYR, ты то вообще кто?, с тобой вообще никто не разговаривает)    

 

В отличие от тебя, Я тут уже почти "старик",  и делюсь своим опытом с салагой! 

yozhikovd
Offline
Зарегистрирован: 17.10.2018

Да кто-нибудь, вынесите этого старика уже вперед ногами с этого форума, сколько раз мне ему написать, что его сообщения не интересны? это же простая логика, еще проще чем моя задача, да мистер боинг?)

ALEGYR
Offline
Зарегистрирован: 20.09.2018

yozhikovd пишет:

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

Не заинтересовались,  а развлеклись!

yozhikovd пишет:
А писать в духе "пфф, 2+2 - это интересно? 

Это повод для развлечения и проведения досуга!

yozhikovd пишет:
это интересная логическая задача", бля*ь да, мне интересно, для меня это какой то шаг в изучении чего то нового, если кто то из вас сверх разум и ему это соответственно не интересно, могли сразу закрыть тему? 

Когда мне что-то было интересно, я читал книжки,  а не бежал в двор, чтобы у  взрослых пацанов узнать "откуда беруться дети".

yozhikovd
Offline
Зарегистрирован: 17.10.2018

ALEGYR пишет:

Когда мне что-то было интересно, я читал книжки,  а не бежал в двор, чтобы у  взрослых пацанов узнать "откуда беруться дети".

Ты по этому до сих пор девственник? Слишком много теории было? 

b707
Offline
Зарегистрирован: 26.05.2017

yozhikovd пишет:

Да кто-нибудь, вынесите этого старика уже вперед ногами с этого форума, сколько раз мне ему написать, что его сообщения не интересны? это же простая логика, еще проще чем моя задача, да мистер боинг?)

ого, делаешь успехи. 20 минут на форуме, а уже кое-что понял. АЛЕГИР - старик не плохой. но отвязаться от него невозможно. Единственный вариант - просто не вступать в разговор.

ALEGYR
Offline
Зарегистрирован: 20.09.2018

yozhikovd пишет:

Да кто-нибудь, вынесите этого старика уже вперед ногами с этого форума, сколько раз мне ему написать, что его сообщения не интересны? 

Поздно! Ты уже успел нахамить старшим! И они уже теперь просто смотрят как первоклашка бодается с второклашкой!

yozhikovd пишет:
это же простая логика, еще проще чем моя задача, да мистер боинг?)

Если бы у тебя было нормально с логикой, то ты давно-бы нажал на кнопочку "выход",  и занялся бы реализоцией тех советов,  которые ты тут уже получил!

ALEGYR
Offline
Зарегистрирован: 20.09.2018

yozhikovd, ты спашивал меня "Кто я такой?", вот тебе и ответ

b707 пишет:
 АЛЕГИР - старик не плохой. 
 

Видишь, сынок, я на форуме почти месяц,  а меня тут уже здешние деды уважают!

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

 

yozhikovd
Offline
Зарегистрирован: 17.10.2018

Больше !!!!!!, Алегир, в сообщениях!!!!!!!

ALEGYR
Offline
Зарегистрирован: 20.09.2018

yozhikovd пишет:

Ты по этому до сих пор девственник? Слишком много теории было? 

Дружок, не надо так шутить! Это я с виду девственник, а по жизни могу оказазаться твоим биологическим папой!

yozhikovd
Offline
Зарегистрирован: 17.10.2018

Я и не шучу, шутила твоя мамка, когда говорила твоему бате, что сделает аборт от него) так смешно, когда вотаны или взрослые люди, пытаются тролить

bwn
Offline
Зарегистрирован: 25.08.2014

b707 пишет:

Очень интересная математическая проблема - 2+2 ?

А мы таки покупаем или продаем?

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Веселуха - ёжик троллит тролля :) Я уже во всеоружии:

ALEGYR
Offline
Зарегистрирован: 20.09.2018

yozhikovd пишет:

Я и не шучу, шутила твоя мамка, когда говорила твоему бате, что сделает аборт от него) так смешно, когда вотаны или взрослые люди, пытаются тролить

Ну ладно,  твоим биологическим папой я действтительно быть не могу! Вижу не мои гены!