PCCar.ru - Ваш автомобильный компьютер

Вернуться   PCCar.ru - Ваш автомобильный компьютер > MP3Car ТехИнфа > AndroidCar > Дополнительные устройства

Ответ
 
Опции темы Поиск в этой теме
Старый 20.01.2014, 22:23   #201
armlive
Старший Пользователь
 
Регистрация: 12.12.2013
Возраст: 43
Город: Армавир
Регион: 23, 93
Машина: Nissan Qashqai
Сообщений: 510
armlive is a glorious beacon of lightarmlive is a glorious beacon of lightarmlive is a glorious beacon of lightarmlive is a glorious beacon of lightarmlive is a glorious beacon of light
По умолчанию

Цитата:
Сообщение от ilya174 Посмотреть сообщение
Это для Arduino Leonardo, у меня UNO
А действие кода на две команды пробовал прописать?
Внутри стоит, поэкспериментировать не могу, но я бы на действие кнопки к примеру сделал
если нажата кнопка 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.
armlive вне форума   Ответить с цитированием
Старый 21.01.2014, 21:06   #202
ilya174
Новый Пользователь
 
Регистрация: 16.01.2011
Регион: 74
Сообщений: 26
ilya174 is on a distinguished road
По умолчанию

Так пробовал. На windows 7 окна переключаются, причем ни как если с клавиатуры нажимать ALT+TAB появляется маленькое окошко с запущенными программами и там уже выбираешь нужное окно, а просто идет перебор открытых окон как на XP. Но вот андроид почему-то никак не реагирует на такую комбинацию.
ilya174 вне форума   Ответить с цитированием
Старый 21.01.2014, 23:25   #203
Andrey_61
Старший Пользователь
 
Регистрация: 25.03.2010
Возраст: 41
Регион: 61
Машина: FF2
Сообщений: 228
Andrey_61 is just really niceAndrey_61 is just really niceAndrey_61 is just really niceAndrey_61 is just really niceAndrey_61 is just really nice
По умолчанию

Народ, на тему 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
Andrey_61 вне форума   Ответить с цитированием
Старый 21.01.2014, 23:48   #204
armlive
Старший Пользователь
 
Регистрация: 12.12.2013
Возраст: 43
Город: Армавир
Регион: 23, 93
Машина: Nissan Qashqai
Сообщений: 510
armlive is a glorious beacon of lightarmlive is a glorious beacon of lightarmlive is a glorious beacon of lightarmlive is a glorious beacon of lightarmlive is a glorious beacon of light
По умолчанию

Я нашел, что в андроиде есть своя одна команда для этих целей,
Цитата:
APP_SWITCH (RECENT_APP) – вызов панели «Недавние» с возможностью переключаться между приложениями (либо вызов диспетчера приложений в зависимости от прошивки. APP_SWITCH или RECENT_APP зависит от производителя и прошивки, так в HTC это APP_SWITCH, а в Gigabyte Gsmart это RECENT_APP)
Надо найти методом подбора в нексусе
armlive вне форума   Ответить с цитированием
Старый 22.01.2014, 08:18   #205
ilya174
Новый Пользователь
 
Регистрация: 16.01.2011
Регион: 74
Сообщений: 26
ilya174 is on a distinguished road
По умолчанию

Цитата:
Сообщение от armlive Посмотреть сообщение
Я нашел, что в андроиде есть своя одна команда для этих целей,

Надо найти методом подбора в нексусе
Обе команды пробовал в нексусе- не заработало.
ilya174 вне форума   Ответить с цитированием
Старый 22.01.2014, 11:12   #206
armlive
Старший Пользователь
 
Регистрация: 12.12.2013
Возраст: 43
Город: Армавир
Регион: 23, 93
Машина: Nissan Qashqai
Сообщений: 510
armlive is a glorious beacon of lightarmlive is a glorious beacon of lightarmlive is a glorious beacon of lightarmlive is a glorious beacon of lightarmlive is a glorious beacon of light
По умолчанию

Цитата:
Сообщение от ilya174 Посмотреть сообщение
Обе команды пробовал в нексусе- не заработало.
Я же написал, нужно подбирать из тех, что есть в нексусе
armlive вне форума   Ответить с цитированием
Старый 11.02.2014, 09:38   #207
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
По умолчанию

Цитата:
Сообщение от Andrey_61 Посмотреть сообщение
Народ, на тему 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 как я понимаю придется прописать каждую кнопку отдельно
}
Почему то ругается на timer.after.... Говорит что timer не декларирован. Хотя библиотеку Timer скопировал в либы программы. В начале скетча добавил Timer.h
Chubaka885 вне форума   Ответить с цитированием
Старый 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 вне форума   Ответить с цитированием
Старый 22.02.2014, 23:26   #209
lti1
Старший Пользователь
 
Аватар для lti1
 
Регистрация: 17.01.2010
Возраст: 48
Город: Самара
Регион: 63, 163
Машина: Skoda Octavia A5 FL && Skoda Octavia Tour && ̶F̶F̶3̶
Сообщений: 457
lti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond repute
По умолчанию

Цитата:
Сообщение от 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;
   }   
}

Последний раз редактировалось lti1; 23.02.2014 в 16:36.
lti1 вне форума   Ответить с цитированием
Старый 23.02.2014, 17:56   #210
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
По умолчанию

lti1 Большое спасибо!! Всё заработало как надо.

Осталось, вместо play/pause сделать AltTab. Попробую сам.

И ещё. Не подскажите, существует ли команда HID переключения папок в аудиоплеере?
Chubaka885 вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 3 (пользователей: 0 , гостей: 3)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



Часовой пояс GMT +4, время: 18:05.


Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot