Показать сообщение отдельно
Старый 22.02.2014, 22:32   #208
Chubaka885
Старший Пользователь
 
Регистрация: 08.10.2013
Возраст: 41
Регион: 56
Машина: Toyota Corolla e150
Сообщений: 325
Chubaka885 is a jewel in the roughChubaka885 is a jewel in the roughChubaka885 is a jewel in the roughChubaka885 is a jewel in the rough
По умолчанию

А кто нибудь реализовал на одной резистивной кнопке одиночное нажатие и удержание? Не поделитесь. А то никак не могу догнать как сделать(((

Вот вроде сделал, но при нажатии и удержании функция по одиночному нажатию всё равно сначала проходит.

Код:
int buttonPin=6; //пин для резистивных кнопок
int data;
int flag=0;
long previousMillis = 0; 
int val=0; 

void setup()
{
 Keyboard.begin();
 Serial.begin(9600);
}

void loop()
{
 data=analogRead(buttonPin); //читаем значение нажатой кнопки
 Serial.println(data); //для определения кодов нажатых кнопок на мониторе порта
 
  if (data<=900) //если нажата любая из кнопок начинается отсчёт
  { 
    if (millis() -previousMillis >200)    
    { 
      previousMillis = millis();     
      val++; 

//кнопка громкости +
      if (data>=210 && data<=232 && flag==0 && val==1)  //одиночное нажатие
      {
      Remote.increase(); //прибавить громкость на ед.
      Remote.clear();
      flag=1;
      val=0;
      }
      if (data>=210 && data<=232 && val>=2)  // удержание
      {
      Remote.increase(); //прибавлять громкость до отпускания
      Remote.clear();
      val=0;
      }

//кнопка громкости -
      if (data>=460 && data<=488 && flag==0 && val>=1 && val<=3)  //одиночное нажатие
      {
      Remote.decrease(); //убавить громкость на ед.
      Remote.clear();
      flag=1;
      val=0;
      }
      if (data>=460 && data<=488 && val>=4)  //удержание
      {
      Remote.decrease(); //убавлять громкость до отпускания
      Remote.clear();
      val=0;
      }

//кнопка следующий трек
      if (data==0 && flag==0 && val==1)  //одиночное нажатие
      {
      Remote.next(); //следующий трек
      Remote.clear();
      flag=1;
      val=0;
      }
      if (data==0 && val>=2)  //удержание
      {
      Remote.forward(); //перемотка вперёд
      Remote.clear();
      val=0;
      }
  
//кнопка предидущий трек
      if (data>=76 && data<=92 && flag==0 && val>=1 && val<=5)  //одиночное нажатие
      {
      Remote.previous(); //предидущий трек
      Remote.clear();
      flag=1;
      val=0;
      }
      if (data>=76 && data<=92 && val>=6)  //удержание
      {
      Remote.rewind(); //перемотка назад
      Remote.clear();
      val=0;
      }
    
//кнопка приглушения звука
      if (data>=565 && data<=594 && flag==0)  //нажата кнопка
      {
      Remote.mute();
      Remote.clear();
      flag=1;
      val=0;
      }
    }
  } 
//не нажата не одна из кнопок
   if (data>=950 && data<=960 && flag==1)
  {
   flag=0;
  }
}
Chubaka885 вне форума   Ответить с цитированием