Цитата:
Сообщение от Chubaka885
А кто нибудь реализовал на одной резистивной кнопке одиночное нажатие и удержание? Не поделитесь. А то никак не могу догнать как сделать(((
Вот вроде сделал, но при нажатии и удержании функция по одиночному нажатию всё равно сначала проходит.
|
Алгоритм такой: короткое нажатие, более 100 и менее 500 миллисекунд - Play/pause; длинное, более 500 миллисекунд - Mute.
Тоже самое с Next и Fast Forward, Previous и Rewind. При удержании увеличения и уменьшения громкости, увеличивает или уменьшает громкость на 10 делений в секунду, а при коротком нажатии, менее 500 миллисекунд - увеличивает или уменьшает громкость на 1 деление.
Код:
int analogPin=0;
int data;
unsigned long flag = 0;
unsigned long eventTime = 0;
void setup()
{
Keyboard.begin();
}
void loop()
{
data=analogRead(analogPin); //читаем значение нажатой кнопки
//********************** Громкость ************************************
if(data<=100 && flag == 0) // все кнопки отпущены
{
eventTime=millis();
}
if(millis()-eventTime>10 && millis()-eventTime<499 && data>=600 && data<=630 && flag == 0) // короткое нажатие кнопки от 10 до 499 миллисекунд (изменяется здесь millis()-eventTime>10 && millis()-eventTime<499)
{
Remote.increase();
flag = 5;
delay(10);
Remote.clear();
}
if(millis()-eventTime>500 && data>=600 && data<=630 && flag == 5 || data>=600 && data<=630 && flag == 3) // удержание кнопки от 500 до ∞ миллисекунд (изменяется здесь millis()-eventTime>500)
{
Remote.increase(); // действие после удержание кнопки, Увеличить громкость каждые 0,1 секунды
flag = 3;
Remote.clear();
delay(100);
}
if(millis()-eventTime>10 && millis()-eventTime<499 && data>=500 && data<=530 && flag == 0) // короткое нажатие кнопки от 10 до 499 миллисекунд (изменяется здесь millis()-eventTime>10 && millis()-eventTime<499)
{
Remote.decrease();
flag = 6;
delay(10);
Remote.clear();
}
if(millis()-eventTime>500 && data>=500 && data<=530 && flag == 6 || data>=500 && data<=530 && flag == 3) // удержание кнопки от 500 до ∞ миллисекунд (изменяется здесь millis()-eventTime>500)
{
Remote.decrease(); // действие после удержание кнопки, Уменьшить громкость каждые 0,1 секунды
flag = 3;
Remote.clear();
delay(100);
}
//********************** Play/pause и Mute ************************************
if(millis()-eventTime>10 && millis()-eventTime<499 && data>=920 && data<=960) // короткое нажатие кнопки от 10 до 499 миллисекунд (изменяется здесь millis()-eventTime>10 && millis()-eventTime<499)
{
flag = 1;
}
if(data<=100 && flag == 1) // действие после короткого нажатия кнопки, воспроизведение / пауза
{
Remote.play_pause();
flag = 0;
delay(10);
Remote.clear();
}
if(millis()-eventTime>500 && data>=920 && data<=960 && flag == 1) // удержание кнопки от 500 до ∞ миллисекунд (изменяется здесь millis()-eventTime>500)
{
Remote.mute(); // действие после удержание кнопки, приглушение звука
flag = 0;
delay(10);
Remote.clear();
}
//********************** Next и Fast Forward ************************************
if(millis()-eventTime>10 && millis()-eventTime<499 && data>=815 && data<=845) // короткое нажатие кнопки от 10 до 499 миллисекунд (изменяется здесь millis()-eventTime>10 && millis()-eventTime<499)
{
flag = 2;
}
if(data<=100 && flag == 2) // действие после короткого нажатия кнопки, Next
{
Remote.next();
flag = 0;
delay(10);
Remote.clear();
}
if(millis()-eventTime>500 && data>=815 && data<=845 && flag == 2 || data>=815 && data<=845 && flag == 3) // удержание кнопки от 500 до ∞ миллисекунд (изменяется здесь millis()-eventTime>500)
{
Remote.forward(); // действие после удержание кнопки, Fast Forward
flag = 3;
Remote.clear();
delay(100);
}
//********************** Previous и Rewind ************************************
if(millis()-eventTime>10 && millis()-eventTime<499 && data>=700 && data<=740) // короткое нажатие кнопки от 10 до 499 миллисекунд (изменяется здесь millis()-eventTime>10 && millis()-eventTime<499)
{
flag = 4;
}
if(data<=100 && flag == 4) // действие после короткого нажатия кнопки, Previous
{
Remote.previous();
flag = 0;
delay(10);
Remote.clear();
}
if(millis()-eventTime>500 && data>=700 && data<=740 && flag == 4 || data>=700 && data<=740 && flag == 3) // удержание кнопки от 500 до ∞ миллисекунд (изменяется здесь millis()-eventTime>500)
{
Remote.rewind(); // действие после удержание кнопки, Rewind
flag = 3;
Remote.clear();
delay(100);
}
if(data<=100 && flag == 3 || data<=100 && flag == 5 || data<=100 && flag == 6) // действие после отпускания кнопки
{
flag = 0;
}
}