20.01.2014, 22:23 | #201 |
Старший Пользователь
Регистрация: 12.12.2013
Возраст: 43
Город: Армавир
Регион: 23, 93
Машина: Nissan Qashqai
Сообщений: 510
|
А действие кода на две команды пробовал прописать?
Внутри стоит, поэкспериментировать не могу, но я бы на действие кнопки к примеру сделал если нажата кнопка ALT, то отправляем и код кнопки TAB. тяжело вспомнить азы программирования, когда 15 лет этим уже не занимался Код:
LastKeyPressed = CH_TAB; buf[0] = (код клавиши альт); buf[2]=CH_TA)B; LastTimeKeyPressed = TimeKeyPressed; Serial.write(buf, 8); releaseKey(); } Код:
LastKeyPressed = CH_LEFT_ALT; buf[0] = (код клавиши TAB); buf[2]=CH_LEFT_ALT; LastTimeKeyPressed = TimeKeyPressed; Serial.write(buf, 8); releaseKey(); } Последний раз редактировалось armlive; 20.01.2014 в 23:23. |
21.01.2014, 21:06 | #202 |
Новый Пользователь
Регистрация: 16.01.2011
Регион: 74
Сообщений: 26
|
Так пробовал. На windows 7 окна переключаются, причем ни как если с клавиатуры нажимать ALT+TAB появляется маленькое окошко с запущенными программами и там уже выбираешь нужное окно, а просто идет перебор открытых окон как на XP. Но вот андроид почему-то никак не реагирует на такую комбинацию.
|
21.01.2014, 23:25 | #203 |
Старший Пользователь
Регистрация: 25.03.2010
Возраст: 42
Регион: 61
Машина: FF2
Сообщений: 228
|
Народ, на тему Alt+Tab не совсем верный алгоритм.
Надо не отправлять Alt+Tab постоянно, а зажать Alt и удерживая его отправлять Tab вот кусок моего кода при получении команды с ИК-пульта (требуется доп библиотека Timer.h) Код для Leonardo, но думаю можно адаптировать и под UNO Код:
boolean altTabFirstPress = HIGH; //Первое нажатие alt+tab int altTabTimer; //Таймер ALT+TAB .... if(событие){ if(boolean(altTabFirstPress)==HIGH){ //Если это нажатие первое altTabTimer = timer.after(1000, resetAltTab); //Запускаем таймер (1000мс) сброса ALT+TAB altTabFirstPress = LOW; //Сбрасываем переменную Keyboard.press(KEY_ALT); //Нажимаем Alt Keyboard.press(KEY_TAB); //Нажимаем Tab Keyboard.release(KEY_TAB); //Отпускаем Alt } else{ //Если это нажатие НЕ первое timer.stop(altTabTimer); //Останавливаем таймер сброса ALT+TAB Keyboard.press(KEY_TAB); //Нажимаем Tab Keyboard.release(KEY_TAB); //Отпускаем Tab altTabTimer = timer.after(1000, resetAltTab); //Запускаем таймер сброса ALT+TAB снова } .... //отпускаем Alt+Tab void resetAltTab (){ altTabFirstPress = HIGH; //Устанавливаем переменную Keyboard.releaseAll(); //Отпускаем все кнопки, для UNO как я понимаю придется прописать каждую кнопку отдельно }
__________________
Nexus in Focus |
21.01.2014, 23:48 | #204 | |
Старший Пользователь
Регистрация: 12.12.2013
Возраст: 43
Город: Армавир
Регион: 23, 93
Машина: Nissan Qashqai
Сообщений: 510
|
Я нашел, что в андроиде есть своя одна команда для этих целей,
Цитата:
|
|
22.01.2014, 08:18 | #205 |
Новый Пользователь
Регистрация: 16.01.2011
Регион: 74
Сообщений: 26
|
|
22.01.2014, 11:12 | #206 |
Старший Пользователь
Регистрация: 12.12.2013
Возраст: 43
Город: Армавир
Регион: 23, 93
Машина: Nissan Qashqai
Сообщений: 510
|
|
11.02.2014, 09:38 | #207 | |
Старший Пользователь
Регистрация: 08.10.2013
Возраст: 41
Регион: 56
Машина: Toyota Corolla e150
Сообщений: 325
|
Цитата:
|
|
22.02.2014, 22:32 | #208 |
Старший Пользователь
Регистрация: 08.10.2013
Возраст: 41
Регион: 56
Машина: Toyota Corolla e150
Сообщений: 325
|
А кто нибудь реализовал на одной резистивной кнопке одиночное нажатие и удержание? Не поделитесь. А то никак не могу догнать как сделать(((
Вот вроде сделал, но при нажатии и удержании функция по одиночному нажатию всё равно сначала проходит. Код:
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; } } |
22.02.2014, 23:26 | #209 | |
Старший Пользователь
Регистрация: 17.01.2010
Возраст: 48
Город: Самара
Регион: 63, 163
Машина: Skoda Octavia A5 FL && Skoda Octavia Tour && ̶F̶F̶3̶
Сообщений: 457
|
Цитата:
Тоже самое с 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; } } Последний раз редактировалось lti1; 23.02.2014 в 16:36. |
|
23.02.2014, 17:56 | #210 |
Старший Пользователь
Регистрация: 08.10.2013
Возраст: 41
Регион: 56
Машина: Toyota Corolla e150
Сообщений: 325
|
lti1 Большое спасибо!! Всё заработало как надо.
Осталось, вместо play/pause сделать AltTab. Попробую сам. И ещё. Не подскажите, существует ли команда HID переключения папок в аудиоплеере? |
Здесь присутствуют: 6 (пользователей: 0 , гостей: 6) | |
|
|