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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.01.2015, 19:00   #301
demtro
Старший Пользователь
 
Регистрация: 17.12.2014
Возраст: 33
Город: Самара
Регион: 63, 163
Машина: Lifan Solano
Сообщений: 184
demtro is on a distinguished road
По умолчанию

Ребят проблемка есть, заливаю вот этот скетч:
Цитата:
int analogPin=0; //пин для подключения кнопок
int data;
unsigned long flag = 0;
unsigned long eventTime = 0;
unsigned long pauseMillis = 0;

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

void loop()
{
data=analogRead(analogPin); //читаем значение нажатой кнопки

//********************** Громкость ************************************

if(data>=1023 && flag == 0) // все кнопки отпущены
{
eventTime=millis();
}

if(millis()-eventTime>10 && millis()-eventTime<499 && data>=884 && data<=904 && flag == 0) // короткое нажатие кнопки от 10 до 499 миллисекунд (изменяется здесь millis()-eventTime>10 && millis()-eventTime<499)
{
Remote.increase();
flag = 5;
delay(10);
Remote.clear();
}

if(millis()-eventTime>500 && data>=884 && data<=904 && flag == 5 || data>=210 && data<=230 && flag == 3) // удержание кнопки от 500 до ? миллисекунд (изменяется здесь millis()-eventTime>500)
{
Remote.increase(); // действие после удержание кнопки, Увеличить громкость каждые 0,1 секунды
flag = 3;
Remote.clear();
delay(100);
}

if(millis()-eventTime>10 && millis()-eventTime<499 && data>=824 && data<=844 && flag == 0) // короткое нажатие кнопки от 10 до 499 миллисекунд (изменяется здесь millis()-eventTime>10 && millis()-eventTime<499)
{
Remote.decrease();
flag = 6;
delay(10);
Remote.clear();
}

if(millis()-eventTime>500 && data>=824 && data<=844 && flag == 6 || data>=457 && data<=477 && flag == 3) // удержание кнопки от 500 до ? миллисекунд (изменяется здесь millis()-eventTime>500)
{
Remote.decrease(); // действие после удержание кнопки, Уменьшить громкость каждые 0,1 секунды
flag = 3;
Remote.clear();
delay(100);
}

//********************** AltTab + Ещё что то ************************************

if(millis()-eventTime>10 && millis()-eventTime<499 && data>=462 && data<=482) // короткое нажатие кнопки от 10 до 499 миллисекунд (изменяется здесь millis()-eventTime>10 && millis()-eventTime<499)
{
flag = 1;
}

if(data>=1023 && flag == 1 && pauseMillis == 0) // действие после короткого нажатия кнопки, Alt+Tab
{
Keyboard.press(KEY_LEFT_ALT);
Keyboard.press(KEY_TAB);
Keyboard.release(KEY_TAB);
Keyboard.press(KEY_TAB);
Keyboard.release(KEY_TAB);
flag = 0;
pauseMillis = millis();
}

if(data>=1023 && flag == 1 && pauseMillis != 0) // действие после короткого повторного нажатия кнопки, Alt+Tab
{
Keyboard.press(KEY_TAB);
Keyboard.release(KEY_TAB);
flag = 0;
pauseMillis = millis();
}

if(pauseMillis && millis()-pauseMillis >= 800 && data>=1023) // && flag == 7 && data>=950)
{
flag = 0;
pauseMillis = 0;
Keyboard.releaseAll();
}

if(millis()-eventTime>500 && data>=567 && data<=587 && flag == 1) // удержание кнопки от 500 до ? миллисекунд (изменяется здесь millis()-eventTime>500)
{
//Remote.play_pause(); // действие после удержание кнопки, Ещё что то
flag = 0;
//delay(10);
//Remote.clear();
}
//********************** Next и Fast Forward ************************************

if(millis()-eventTime>10 && millis()-eventTime<499 && data>=572 && data<=582) // короткое нажатие кнопки от 10 до 499 миллисекунд (изменяется здесь millis()-eventTime>10 && millis()-eventTime<499)
{
flag = 2;
}

if(data>=1023 && flag == 2) // действие после короткого нажатия кнопки, Next
{
Remote.next();
flag = 0;
delay(10);
Remote.clear();
}

if(millis()-eventTime>500 && data>=572 && data<=582 && flag == 2 || data>=0 && data<=10 && 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>=671 && data<=691) // короткое нажатие кнопки от 10 до 499 миллисекунд (изменяется здесь millis()-eventTime>10 && millis()-eventTime<499)
{
flag = 4;
}

if(data>=1023 && flag == 4) // действие после короткого нажатия кнопки, Previous
{
Remote.previous();
flag = 0;
delay(10);
Remote.clear();
}

if(millis()-eventTime>500 && data>=671 && data<=691 && flag == 4 || data>=74 && data<=94 && flag == 3) // удержание кнопки от 500 до ? миллисекунд (изменяется здесь millis()-eventTime>500)
{
Remote.rewind(); // действие после удержание кнопки, Rewind
flag = 3;
Remote.clear();
delay(100);
}

//********************** Play/pause + Ещё что то ************************************

if(millis()-eventTime>10 && millis()-eventTime<499 && data>=165 && data<=185) // короткое нажатие кнопки от 10 до 499 миллисекунд (изменяется здесь millis()-eventTime>10 && millis()-eventTime<499)
{
flag = 7;
}

if(data>=1023 && flag == 7) // действие после короткого нажатия кнопки, воспроизведение / пауза
{
Remote.play_pause();
flag = 0;
delay(10);
Remote.clear();
}

if(millis()-eventTime>500 && data>=165 && data<=185 && flag == 7) // удержание кнопки от 500 до ? миллисекунд (изменяется здесь millis()-eventTime>500)
{
//Remote.play_pause(); // действие после удержание кнопки, Ещё что то
flag = 0;
//delay(10);
//Remote.clear();
}

if(data>=1023 && flag == 3 || data>=1023 && flag == 5 || data>=1023 && flag == 6) // действие после отпускания кнопки
{
flag = 0;
}
}

кнопки громкости при удержании увеличивают/уменьшают на 1 деление и останавливаюся, next вообще не реагирует, замерил кнопки руля, получил очень странные числа: mute 680 Ом, next 4.4 kOm, prev 6.5 kOM, громкость "+" 22.6 кОм, громкость "-" 14,5 кОм, Mode (ALT+TAB....TAB....TAB) 2.8 кОм.
Какая-то очень странная разница между mute и всем остальным.
Скетч брал в Драйва у другого салановода (по идее кнопки должны быть одинаковыми)
demtro вне форума   Ответить с цитированием
Старый 29.01.2015, 19:28   #302
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
По умолчанию

Цитата:
Сообщение от demtro Посмотреть сообщение
Ребят проблемка есть, заливаю вот этот скетч:
кнопки громкости при удержании увеличивают/уменьшают на 1 деление и останавливаюся, next вообще не реагирует, замерил кнопки руля, получил очень странные числа: mute 680 Ом, next 4.4 kOm, prev 4.4 kOM, громкость "+" 22.6 кОм, громкость "-" 14,5 кОм, Mode (ALT+TAB....TAB....TAB) 2.8 кОм.
Какая-то очень странная разница между mute и всем остальным.
Скетч брал в Драйва у другого салановода (по идее кнопки должны быть одинаковыми)
Залейте сначала этот скетч и считайте коды своих кнопок через "монитор порта" Arduino Software (IDE), потом подставьте эти значения в скетч.
PHP код:
int analogPin=0//пин для подключения кнопок
int data;

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

void loop()
{
data=analogRead(analogPin); //читаем значение нажатой кнопки
Serial.println(data);
delay(1000);


Последний раз редактировалось lti1; 30.01.2015 в 00:07.
lti1 вне форума   Ответить с цитированием
Старый 29.01.2015, 19:33   #303
demtro
Старший Пользователь
 
Регистрация: 17.12.2014
Возраст: 33
Город: Самара
Регион: 63, 163
Машина: Lifan Solano
Сообщений: 184
demtro is on a distinguished road
По умолчанию

а можно ли это сделать через планшет? просто кнопки закреплены в руле и с ноутом не хочется туда идти
demtro вне форума   Ответить с цитированием
Старый 29.01.2015, 19:44   #304
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
По умолчанию

Цитата:
Сообщение от demtro Посмотреть сообщение
а можно ли это сделать через планшет? просто кнопки закреплены в руле и с ноутом не хочется туда идти
Нужен какой нибудь софт, который сможет читать данные с порта. С ноутом не придется бежать домой, что бы залить залить новый скетч, можно будет все сразу сделать в машине и проверить.
lti1 вне форума   Ответить с цитированием
Старый 29.01.2015, 19:55   #305
demtro
Старший Пользователь
 
Регистрация: 17.12.2014
Возраст: 33
Город: Самара
Регион: 63, 163
Машина: Lifan Solano
Сообщений: 184
demtro is on a distinguished road
По умолчанию

я правильно понимаю что значение кнопки это вот это - "data>=165 && data<=185" и для него задается интервал?
demtro вне форума   Ответить с цитированием
Старый 29.01.2015, 20:04   #306
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
По умолчанию

Цитата:
Сообщение от demtro Посмотреть сообщение
я правильно понимаю что значение кнопки это вот это - "data>=165 && data<=185" и для него задается интервал?
Да. Личку проверьте.
lti1 вне форума   Ответить с цитированием
Старый 07.02.2015, 22:47   #307
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
По умолчанию

Соберу всю информацию по одному из решений в одном месте, у кого есть возможность закрепите ссылку в первом сообщении.
Работает только с Arduino Pro Micro и Arduino Leonardo на чипе ATmega32u4.
Для начала меняем в папке \arduino-1.0.5\hardware\arduino\cores\arduino для IDE 1.0.5 или \arduino-1.6.5-r5\hardware\arduino\avr\cores\arduino для IDE 1.6.5 меняете два файла USBAPI.h, HID.cpp на те, что во вложении этого сообщения, при этом версия ПО Arduino Software IDE должна быть 1.0.5, скачать setup exe, скачать zip ИЛИ 1.6.5, на других не проверял.
После заливаете этот скетч и считайте коды всех кнопок через "монитор порта" Arduino Software (IDE).

PHP код:
int analogPin=0//пин для подключения кнопок
int data;

void setup()
{
analogReference(DEFAULT); // подключение внутреннего напряжение AVCC к выводу AREF (опорное напряжение)
Serial.begin(9600);
}

void loop()
{
data=analogRead(analogPin); //читаем значение нажатой кнопки
Serial.println(data);
delay(1000);

(Подробная инструкция, как считать коды кнопок находится в архиве Knopki.zip)

Подключаете кнопки к Arduino по следующим схемам, с подтяжкой к - или к +. Номинал сопротивления ~20 кОм.
Нажмите на изображение для увеличения
Название: кнопки.png
Просмотров: 5666
Размер:	30.2 Кб
ID:	38555
Потом заливаете этот скетч, только в начале скетча указываете свои значения, то есть вместо 111, 222, 333, 444, 555, 777 указываете значения своих кнопок, а также значение при отпущенных кнопках, в зависимости от схемы подключения будут либо ближе 0 либо ближе к 1023:
PHP код:
//****************** Здесь необходимо указать свои значения *************** 

int analogPin=0// пин для подключения кнопок, по умолчанию A0 

int release_button 1023// значение при отпущенных кнопках 
int button_release_range 50// диапазон значения + - при отпущенных кнопках 
int button_range 5// диапазон значения нажатых кнопок + - 
int time_holding 500// время для удержания кнопок в миллисекундах 
int time_tinkling 30// время исключающее дребезг контактов в миллисекундах 
int vol_up 111// значение кнопки увеличить громкость 
int vol_down 222// значение кнопки уменьшить громкость 
int alt_tab 333// значение кнопки которая будет работать как Alt + Tab 
int next 444// значение кнопки которая будет работать как Next при коротком нажатии и Fast Forward при удержании 
int previous 555// значение кнопки которая будет работать как Previous при коротком нажатии и Rewind при удержании 
int play_pause 777// значение кнопки которая будет работать как Play/Pause при коротком нажатии и Mute при удержании 

//************************************************************************** 

int data;  
unsigned long flag 0;  
unsigned long eventTime 0;  
unsigned long pauseMillis 0

void setup()  

analogReference(DEFAULT); // подключение внутреннего напряжение AVCC к выводу AREF (опорное напряжение) 
Keyboard.begin();  
}  

void loop()  
{  
data=analogRead(analogPin);  
if(
data>=release_button button_release_range && data<=release_button button_release_range && flag == 0)  
{  
eventTime=millis();  
}  

//********************** Громкость ************************************ 

if(millis()-eventTime<time_tinkling && millis()-eventTime<time_holding-&& data >= vol_up button_range && data <= vol_up button_range && flag == 0
{   
Remote.increase();  
flag 5;  
delay(10);  
Remote.clear();  
}  

if(
millis()-eventTime>time_holding && data >= vol_up button_range && data <= vol_up button_range && flag == || data >= vol_up button_range && data <= vol_up button_range && flag && flag == 3)  
{   
Remote.increase(); 
flag 3;  
Remote.clear();  
delay(100);  
}  

if(
millis()-eventTime<time_tinkling && millis()-eventTime<time_holding-&& data >= vol_down button_range && data <= vol_down button_range && flag == 0)  
{   
Remote.decrease();  
flag 6;  
delay(10);  
Remote.clear();  
}  

if(
millis()-eventTime>time_holding && data >= vol_down button_range && data <= vol_down button_range && flag == || data >= vol_down button_range && data <= vol_down button_range && flag == 3)  
{   
Remote.decrease();  
flag 3;  
Remote.clear();  
delay(100);  
}  

//********************** AltTab + Ещё что то ************************************   

if(millis()-eventTime<time_tinkling && millis()-eventTime<time_holding-&& data >= alt_tab button_range && data <= alt_tab button_range)  
{   
flag 1;  
}  

if(
data>=release_button button_release_range && data<=release_button button_release_range && flag == && pauseMillis == 0)  
{  
Keyboard.press(KEY_LEFT_ALT);  
Keyboard.press(KEY_TAB);  
Keyboard.release(KEY_TAB);  
Keyboard.press(KEY_TAB);  
Keyboard.release(KEY_TAB);  
flag 0;  
pauseMillis millis();  
}  

if(
data>=release_button button_release_range && data<=release_button button_release_range && flag == && pauseMillis != 0)  
{  
Keyboard.press(KEY_TAB);  
Keyboard.release(KEY_TAB);  
flag 0;  
pauseMillis millis();  
}  

if(
pauseMillis && millis()-pauseMillis >= 800 && data>=release_button button_release_range && data<=release_button button_release_range)  
{  
flag 0;  
pauseMillis 0;  
Keyboard.releaseAll();  
}  

if(
millis()-eventTime>time_holding && data >= alt_tab button_range && data <= alt_tab button_range && flag == 1)  
{   
flag 0;  
}  
//********************** Next и Fast Forward ************************************   

if(millis()-eventTime<time_tinkling && millis()-eventTime<time_holding-&& data >= next button_range && data <= next button_range)  
{   
flag 2;  
}  

if(
data>=release_button button_release_range && data<=release_button button_release_range && flag == 2)  
{  
Remote.next();  
flag 0;  
delay(10);  
Remote.clear();  
}  

if(
millis()-eventTime>time_holding && data >= next button_range && data <= next button_range && flag == || data >= next button_range && data <= next button_range && flag == 3)  
{   
Remote.forward();  
flag 3;  
Remote.clear();  
delay(100);  
}  
//********************** Previous и Rewind ************************************   

if(millis()-eventTime<time_tinkling && millis()-eventTime<time_holding-&& data >= previous button_range && data <= previous button_range)  
{   
flag 4;  
}  

if(
data>=release_button button_release_range && data<=release_button button_release_range && flag == 4)  
{  
Remote.previous();  
flag 0;  
delay(10);  
Remote.clear();  
}  

if(
millis()-eventTime>time_holding && data >= previous button_range && data <= previous button_range && flag == || data >= previous button_range && data <= previous button_range && flag == 3)  
{   
Remote.rewind(); 
flag 3;  
Remote.clear();  
delay(100);  
}  

//********************** Play/pause + Mute ************************************   

if(millis()-eventTime<time_tinkling && millis()-eventTime<time_holding-&& data >= play_pause button_range && data <= play_pause button_range)  
{   
flag 7;  
}  

if(
data>=release_button button_release_range && data<=release_button button_release_range && flag == 7)  
{  
Remote.play_pause();   
flag 0;  
delay(10);  
Remote.clear();  
}  

if(
millis()-eventTime>time_holding && data >= play_pause button_range && data <= play_pause button_range && flag == 7)  
{   
Remote.mute(); 
flag 0
delay(10); 
Remote.clear();  
}  

if(
data>=release_button button_release_range && data<=release_button button_release_range && flag == || data>=release_button button_release_range && data<=release_button button_release_range && flag == || data>=release_button button_release_range && data<=release_button button_release_range && flag == 6)  
{  
flag 0;  
}   

Алгоритм работы такой: короткое нажатие, более 10 (int time_tinkling = 10; можно менять в скетче) и менее 500 миллисекунд (int time_holding = 500; можно менять в скетче) - Play/pause; длинное, более 500 миллисекунд (int time_holding = 500; можно менять в скетче) - Mute.
Тоже самое с Next и Fast Forward, Previous и Rewind. При удержании увеличения и уменьшения громкости, увеличивает или уменьшает громкость на 10 делений в секунду, а при коротком нажатии, менее 500 миллисекунд - увеличивает или уменьшает громкость на 1 деление.
Alt + Tab, при первом нажатии эмулирует Alt и два раза Tab, то есть переходит предыдущему открытому приложении и в течении 0,8 секунды удерживает Alt, а повторные нажатия на кнопку в течении этого времени эмулируют только Tab. На удержание ни чего не назначен, можно добавить при необходимости.

Последний раз редактировалось skanch; 25.01.2023 в 21:59. Причина: Добавлен архив с инструкцией считывания кодов кнопок.
lti1 вне форума   Ответить с цитированием
Старый 07.02.2015, 23:15   #308
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 Отлично
Только добавь, что заливать скетч нужно с релизом ПО Arduino не выше 1.0.5. А лучше просто указать 1.0.5 и всё. Часто качают 1.0.6 с забугорного обменника и замена библиотек не проходит. Мне уже не раз задавали этот вопрос.
__________________
Nexus 7 2012 (grouper), Cyanogenmod 11 - M10
фото установки Nexus 7 2012 & Toyota Corolla
Chubaka885 вне форума   Ответить с цитированием
Старый 07.02.2015, 23:19   #309
murano
Пользователь
 
Регистрация: 10.10.2009
Возраст: 59
Регион: 35
Сообщений: 99
murano is on a distinguished road
По умолчанию

Previous и Rewind я так понимаю ускоряют и замедляют воспроизведение трека. А еcть команды которые листают папки (альбомы)?
murano вне форума   Ответить с цитированием
Старый 07.02.2015, 23:28   #310
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
По умолчанию

Цитата:
Сообщение от murano Посмотреть сообщение
Previous и Rewind я так понимаю ускоряют и замедляют воспроизведение трека. А еcть команды которые листают папки (альбомы)?
Нету. poweramp умеет переключать папки двойным нажатием переключения треков. Немного не удобно, но работает.
__________________
Nexus 7 2012 (grouper), Cyanogenmod 11 - M10
фото установки Nexus 7 2012 & Toyota Corolla
Chubaka885 вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

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

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



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


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