1

Topic: одно нажатие кнопки +1 к переменной а не десятки

Добрый вечер!
имеется код (кусок)
if (RemoteXY.mn_set_temp!=0)
  {
   Temp_Avto = Temp_Avto - 1;
   
   } //минус 1 градус
но при таком раскладе при нажатии отнимает черт знает что и это понятно почему.
Вводить милисы для всех кнопок не очень хотелось бы(( уж не мало их

Может есть проще способ, добавить внутрь
  {
   Temp_Avto = Temp_Avto - 1;
   
   }
чтоб переменная изменилась только на 1 а не на 20-30 при одном нажатии пальцем на кнопку?
Вы не планируете ввести кнопку с "разовым" срабатыванием?
Приобрел проверсию. накидал управление отоплением а тут такой облом(((

Помогите пожалуйста разобраться в данной ситуации)

2

Re: одно нажатие кнопки +1 к переменной а не десятки

Информации мало но думаю тебе поможет библиотека OneButton вот ссылка " https://github.com/mathertel/OneButton.git "

3

Re: одно нажатие кнопки +1 к переменной а не десятки

Все элементарно просто.
Пока нажата кнопка у вас пролетает несколько циклов контроллера и успевает несколько раз добавить по единице.
Попробуйте отловить сам момент нажатия кнопки, т.е. фронт изменения значения от 0 к 1 и только в этот момент плюсуйте единицу. Для этого вам потребуется дополнительная глобальная переменная что бы запомнить предыдущее значение кнопки.

int mn_set_temp_prev = 0;
void loop ()
  RemoteXY_Handler ();
  if ((RemoteXY.mn_set_temp!=0) && (mn_set_temp_prev==0)) {
    { 
      Temp_Avto = Temp_Avto - 1;
     } //минус 1 градус
  }
  mn_set_temp_prev = RemoteXY.mn_set_temp;
}

4

Re: одно нажатие кнопки +1 к переменной а не десятки

ну почти тем же путем и ушел))
int flag=0;

void setup()   
{
       
    pinMode(13, OUTPUT);         
     
       
}

void loop()

{
       
     if(digitalRead(14)==HIGH&&flag==0)//если кнопка нажата   
     // и перемення flag равна 0 , то ...
     {
           
       digitalWrite(13,!digitalRead(13));
       flag=1;
        //это нужно для того что бы с каждым нажатием кнопки
        //происходило только одно действие
        // плюс защита от "дребезга"  100%
       
     }
       
      if(digitalRead(14)==LOW&&flag==1)//если кнопка НЕ нажата
     //и переменная flag равна - 1 ,то ...
     {
           
        flag=0;//обнуляем переменную flag
     }
}

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

5 (edited by maxvalin 2018-02-11 15:02:49)

Re: одно нажатие кнопки +1 к переменной а не десятки

ну или точнее:
uint8_t flag_pl_1 = 0;


if ((RemoteXY.pl_1!=0) && (flag_pl_1 == 0))
  {
   podazh = podazh + 1;
   flag_pl_1 = 1; 
  }
   else
  {
    flag_pl_1 = 0;
  }