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

PCCar.ru - Ваш автомобильный компьютер (https://pccar.ru/index.php)
-   Резистивные кнопки (https://pccar.ru/forumdisplay.php?f=165)
-   -   Encoder + Arduino + Резистивные кнопки (https://pccar.ru/showthread.php?t=23202)

TransF 15.06.2015 18:15

Encoder + Arduino + Резистивные кнопки
 
В принципе в машине минимальный набор кнопок для любого кар-писишника это: Vol+, Vol-, AltTab, Previous и Rewind.Что на форуме уже реализовано в сообщении уважаемого lti1

есть ещё куча примеров и уроков как здесь на форуме так и на просторах инета о том как прикрутить энкодер к ардуине
например вот http://www.pccar.ru/showthread.php?t=20222

Теперь для меня встал вопрос как это объединить в один скетч и что бы это всё работало как клавиатура при подключении к любому PC в том числе и планшету. Прошу помощи знающих и ведающих програмированием :blush:

s.m. 16.06.2015 02:08

теория
http://arduino.ru/forum/programmirov...ra-pod-android

коды клавиш

https://code.google.com/p/androhid/wiki/Keycodes

ардуина годится любая, которая подключается напрямую к USB, без всяких USB-Serial мостов (FT232, CH340 etc.)

Читаем ссылки до полного просветления. Задаем вопросы, хотя там и так все понятно: прикидываемся USB-клавой, скетчем обрабатываем кнопки и энкодер, посылаем нужные сканкоды клавиатуры. Будет работать в любом аппарате на Андроид с поддержкой OTG.

TransF 16.06.2015 15:17

Спасибо за ликбез, но это я всё читал и ничего непонятно. Мои знания в програмировании заканчиваются на школьном уровне, это как построить космический корабль кандидату юридических наук.

Прошу помощи в предложениях что где и куда писать?
вот так выглядит рабочий скетч для энкодера

PHP код:

//Скетч регулятора громкости на энкодере для Arduino MICRO
// энкодер на 10 и 11 пинах  выводы подтянуты к питанию,
// конденсаторы на землю желательно.
//кнопка энкодера на 7 ноге, притянута к + программно. конденсатор желательно.
void setup() {            
PCICR=1<<PCIE0;
PCMSK0=(1<<PCINT7)|(1<<PCINT6);
pinMode (7,INPUT_PULLUP);
pinMode (10,INPUT);
pinMode (11,INPUT);
attachInterrupt(4, key_mute, FALLING);
Remote.begin();
}
void loop() { }
 
ISR (PCINT0_vect){
static 
byte old_n=PINB&B11000000;
byte new_n=PINB&B11000000;
if (
old_n==128&&new_n==192||old_n==64&&new_n==0) {Remote.increase();}
if (
old_n==64&&new_n==192||old_n==128&&new_n==0) {Remote.decrease();}
old_n= new_n;
}

void key_mute() {Remote.mute();} 

Вот так скетч для кнопок

PHP код:

//****************** Здесь необходимо указать свои значения *************** 

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

int release_button = 1023; // значение при отпущенных кнопках 
int button_release_range = 50; // диапазон значения + - при отпущенных кнопках 
int button_range = 10; // диапазон значения нажатых кнопок + - 
int time_holding = 500; // время для удержания кнопок в миллисекундах 
int time_tinkling = 10; // время исключающее дребезг контактов в миллисекундах 
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()  
{  
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()-time_tinkling && millis()-eventTime<time_holding-1 && 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 == 5 || data >= vol_up - button_range && data <= vol_up + button_range && flag && flag == 3)  
{   
Remote.increase(); 
flag = 3;  
Remote.clear();  
delay(100);  
}  

if(
millis()-time_tinkling && millis()-eventTime<time_holding-1 && 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 == 6 || data >= vol_down - button_range && data <= vol_down + button_range && flag == 3)  
{   
Remote.decrease();  
flag = 3;  
Remote.clear();  
delay(100);  
}  

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

if(millis()-time_tinkling && millis()-eventTime<time_holding-1 && 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 == 1 && 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 == 1 && 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()-time_tinkling && millis()-eventTime<time_holding-1 && 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 == 2 || data >= next - button_range && data <= next + button_range && flag == 3)  
{   
Remote.forward();  
flag = 3;  
Remote.clear();  
delay(100);  
}  
//********************** Previous и Rewind ************************************   

if(millis()-time_tinkling && millis()-eventTime<time_holding-1 && 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 == 4 || data >= previous - button_range && data <= previous + button_range && flag == 3)  
{   
Remote.rewind(); 
flag = 3;  
Remote.clear();  
delay(100);  
}  

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

if(millis()-time_tinkling && millis()-eventTime<time_holding-1 && 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 == 3 || data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 5 || data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 6)  
{  
flag = 0;  
}   
} 

Это то что я проверил на Ардуино Микро (Леонардо)
подскажите как их объединить?

TransF 18.06.2015 19:28

Нашел ещё одну тему
http://www.pccar.ru/showthread.php?t=20222
может всё таки кто нибудь подключится? или все грамотные а делиться грамотой стыдно?

Едиственное там все регулировки делаются фубаром, а хотелось бы на прямую в ОС регулировать громкость

s.m. 19.06.2015 00:15

Собрал два вместе
Откуда эти либы Keyboard и Remote - лучше спросить в тех ветках, откуда взяты эти куски кода.

PHP код:

//****************** Здесь необходимо указать свои значения *************** 

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

int release_button = 1023; // значение при отпущенных кнопках 
int button_release_range = 50; // диапазон значения + - при отпущенных кнопках 
int button_range = 10; // диапазон значения нажатых кнопок + - 
int time_holding = 500; // время для удержания кнопок в миллисекундах 
int time_tinkling = 10; // время исключающее дребезг контактов в миллисекундах 
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() {            
    
PCICR = 1<<PCIE0;
    
PCMSK0 = (1<<PCINT7)|(1<<PCINT6);
    
pinMode (7,INPUT_PULLUP);
    
pinMode (10,INPUT);
    
pinMode (11,INPUT);
    
attachInterrupt(4, keyMute, FALLING);

    
Remote.begin();
    
Keyboard.begin();  
}

ISR (PCINT0_vect) {
    static 
byte old_n = PINB&B11000000;
    
byte new_n = PINB&B11000000;
    if (
old_n == 128 && new_n == 192 || old_n == 64 && new_n == 0) {
        
Remote.increase();
    }
    if (
old_n == 64 && new_n == 192 || old_n == 128 && new_n == 0) {
        
Remote.decrease();
    }
    
old_n = new_n;
}

void keyMute() {
    
Remote.mute();
} 

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

    
//********************** Громкость ************************************ 
    
if (millis() - time_tinkling && millis() - eventTime < time_holding-1 && 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 == 5 || data >= vol_up - button_range && data <= vol_up + button_range && flag && flag == 3) {   
        
Remote.increase(); 
        
flag = 3;  
        
Remote.clear();  
        
delay(100);  
    }  

    if(
millis() - time_tinkling && millis() - eventTime < time_holding-1 && 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 == 6 || data >= vol_down - button_range && data <= vol_down + button_range && flag == 3)  
    {   
        
Remote.decrease();  
        
flag = 3;  
        
Remote.clear();  
        
delay(100);  
    }  

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

    
if(millis()-time_tinkling && millis()-eventTime<time_holding-1 && 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 == 1 && 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 == 1 && 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()-time_tinkling && millis()-eventTime<time_holding-1 && 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 == 2 || data >= next - button_range && data <= next + button_range && flag == 3)  
    {   
        
Remote.forward();  
        
flag = 3;  
        
Remote.clear();  
        
delay(100);  
    }  
    
//********************** Previous и Rewind ************************************   

    
if(millis()-time_tinkling && millis()-eventTime<time_holding-1 && 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 == 4 || data >= previous - button_range && data <= previous + button_range && flag == 3)  
    {   
        
Remote.rewind(); 
        
flag = 3;  
        
Remote.clear();  
        
delay(100);  
    }  

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

    
if(millis()-time_tinkling && millis()-eventTime<time_holding-1 && 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 == 3 || data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 5 || data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 6)  
    {  
        
flag = 0;  
    }   
} 

Пробуйте

TransF 23.06.2015 14:42

Спасибо за сборку данного скетча, и с библиотеками всё норм, ни каких ошибок нет.
Но вот почему-то часть отвечающая за энкодер не работает при чем не могу понять почему(((

Пытался заставить работать скетч с энкодером не получается, как он у меня заработал в прошлый раз не могу понять

может сделать всю сборку попроще типа вот такой?
PHP код:

pinMode (10,INPUT);
pinMode (11,INPUT);

void setup()  
{  
Keyboard.begin();  
}  
void loop()  
{  
data=pinRead(PinMode 10);
Keyboard.press(VOL_UP);  
}
{
data=pinRead(PinMode 11);
Keyboard.press(VOL_DOWN);  
} 


demonnwx 03.07.2015 20:39

Решил сделать Encoder + Arduino + Резистивные кнопки.

Только у меня другой подход.

Я хочу сделать плату на Atmega8. Размеры платы не более 5х5 см. В плату будут подключаться резистивные кнопки и энкодер.

Мультимедиа клавишы
3 цифровых входа Энкодер VOL+ //// VOL- //// MUTE //// UNMUTE

5 ¬ходов кнопки матрица 5х4

1 Play/Pause 2 Stop 3 Next 4 Previous 5 Brightness+
6 Brightness- 7 Power 8 Reset 9 Forward 10 Back
11 Refresh 12 Full Screen 13 Sleep 14 Tab 15 Enter
16 Space 17 Lock 18 Reserve 19 Reserve 20 Reserve

Схема соединений уже нарисована, плата разведена. Осталось сделать печатные платы и прошить.

Нужны соискатели готовые приобрести плату (без компонентов).

10 плат обойдется в 20$, 2$ за штуку при условии 10 человек.

Жду вопросов и предложений.

TransF 07.07.2015 10:39

Цитата:

Сообщение от demonnwx (Сообщение 331951)
Цитата:

Сообщение от demonnwx (Сообщение 331951)
Решил сделать Encoder + Arduino + Резистивные кнопки.

Только у меня другой подход.

Я хочу сделать плату на Atmega8. Размеры платы не более 5х5 см. В плату будут подключаться резистивные кнопки и энкодер.

Мультимедиа клавишы
3 цифровых входа Энкодер VOL+ //// VOL- //// MUTE //// UNMUTE

5 ¬ходов кнопки матрица 5х4

1 Play/Pause 2 Stop 3 Next 4 Previous 5 Brightness+
6 Brightness- 7 Power 8 Reset 9 Forward 10 Back
11 Refresh 12 Full Screen 13 Sleep 14 Tab 15 Enter
16 Space 17 Lock 18 Reserve 19 Reserve 20 Reserve

Схема соединений уже нарисована, плата разведена. Осталось сделать печатные платы и прошить.

Нужны соискатели готовые приобрести плату (без компонентов).

10 плат обойдется в 20$, 2$ за штуку при условии 10 человек.

Жду вопросов и предложений.


Вопрос не в цене, а в реализации и рациональности данного проекта.
Ардуино всё таки универсальная штуковина и каждый может настроить ее как ему удобно, а в Вашем сообщении только слова.
Есть хотя бы макетка или пример который реально существует и работает?

Посидев на разных форумах и почитав сообщения умных (не то что я) людей практически собрал полноценный пульт на ардуине. )))

Чуть позже выложу схему и скетч)))

TransF 09.07.2015 18:55

И так:
поиски по инету и общение с грамотными людьми дало свои результаты

1.100% работающий код для энкодера
Код:

//Скетч регулятора громкости на энкодере для Arduino PRO MICRO
// энкодер на 8 и 9 пинах  выводы подтянуты к питанию,
// конденсаторы на землю желательно.
//кнопка энкодера на 7 ноге, притянута к + программно. конденсатор желательно.
void setup() {           
PCICR=1< PCMSK0=(1< pinMode (7,INPUT_PULLUP);
pinMode (8,INPUT);
pinMode (9,INPUT);
attachInterrupt(4, key_mute, FALLING);
Remote.begin();
}
void loop() { }
 
ISR (PCINT0_vect){
static byte old_n=PINB&B00110000;
byte new_n=PINB&B00110000;
if (old_n==32&&new_n==48||old_n==16&&new_n==0) {Remote.increase();}
if (old_n==16&&new_n==48||old_n==32&&new_n==0) {Remote.decrease();}
old_n= new_n;
}
 
void key_mute() {Remote.mute();}

взято у этого доброго человека
http://arduino.ru/forum/programmirov...comment-111864

2. так же как и у всех тут на форуме работающий скетч от lti1

Сочленение этих двух скетчей ни выдает ни каких ошибок, проходит компиляцию, но работают только кнопки :unsure2: не могу понять в чем проблема. может у кого есть идеи где ошибка в скетче обьедененном?

Код:

//****************** Здесь необходимо указать свои значения ***************

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

int release_button = 1023; // значение при отпущенных кнопках
int button_release_range = 50; // диапазон значения + - при отпущенных кнопках
int button_range = 20; // диапазон значения нажатых кнопок + -
int time_holding = 500; // время для удержания кнопок в миллисекундах
int time_tinkling = 10; // время исключающее дребезг контактов в миллисекундах
int vol_up = 130; // значение кнопки увеличить громкость
int vol_down = 340; // значение кнопки уменьшить громкость
int alt_tab = 380; // значение кнопки которая будет работать как Alt + Tab
int next = 470; // значение кнопки которая будет работать как Next при коротком нажатии и Fast Forward при удержании
int previous = 600; // значение кнопки которая будет работать как Previous при коротком нажатии и Rewind при удержании
int play_pause = 700; // значение кнопки которая будет работать как Play/Pause при коротком нажатии и Mute при удержании

//**************************************************************************
int data; 
unsigned long flag = 0; 
unsigned long eventTime = 0; 
unsigned long pauseMillis = 0;


void setup() {           
    PCICR = 1<     PCMSK0 = (1<     pinMode (7,INPUT_PULLUP);
    pinMode (8,INPUT);
    pinMode (9,INPUT);
    attachInterrupt(4, keyMute, FALLING);

    Remote.begin();
    Keyboard.begin(); 
}

ISR (PCINT0_vect) {
    static byte old_n = PINB&B11000000;
    byte new_n = PINB&B11000000;
    if (old_n == 32&&new_n==48 || old_n == 16&&new_n == 0) {Remote.increase();}
    if (old_n == 16&&new_n==48 || old_n == 32&&new_n == 0) {Remote.decrease();}
    old_n = new_n;
}

void keyMute() {
    Remote.mute();
}

void loop() { 
    data = analogRead(analogPin); 
    if (data >= release_button - button_release_range && data <= release_button +

button_release_range && flag == 0) { 
        eventTime = millis(); 
    } 

    //********************** Громкость ************************************
    if (millis() - time_tinkling && millis() - eventTime < time_holding-1 && 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 == 5 || data >= vol_up - button_range && data <= vol_up +

button_range && flag && flag == 3) { 
        Remote.increase();
        flag = 3; 
        Remote.clear(); 
        delay(100); 
    } 

    if(millis() - time_tinkling && millis() - eventTime < time_holding-1 && 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 == 6 || data >= vol_down - button_range && data <=

vol_down + button_range && flag == 3) 
    { 
        Remote.decrease(); 
        flag = 3; 
        Remote.clear(); 
        delay(100); 
    } 

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

    if(millis()-time_tinkling && millis()-eventTime= 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 == 1 && 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 == 1 && 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()-time_tinkling && millis()-eventTime= 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 == 2 || data >= next - button_range && data <= next + button_range

&& flag == 3) 
    { 
        Remote.forward(); 
        flag = 3; 
        Remote.clear(); 
        delay(100); 
    } 
    //********************** Previous и Rewind ************************************ 

    if(millis()-time_tinkling && millis()-eventTime= 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 == 4 || data >= previous - button_range && data <=

previous + button_range && flag == 3) 
    { 
        Remote.rewind();
        flag = 3; 
        Remote.clear(); 
        delay(100); 
    } 

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

    if(millis()-time_tinkling && millis()-eventTime= 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 == 3 || data>=release_button - button_release_range &&

data<=release_button + button_release_range && flag == 5 || data>=release_button -

button_release_range && data<=release_button + button_release_range && flag == 6) 
    { 
        flag = 0; 
    } 
}


TransF 23.07.2015 14:59

Уважаемый lti1 прислал мне свой скетч для энекодера

Код HTML:

//Скетч регулятора громкости на энкодере для Arduino PRO MICRO
// энкодер на 8 и 9 пинах  выводы подтянуты к питанию,
// конденсаторы на землю желательно.
//кнопка энкодера на 7 ноге, притянута к + программно. конденсатор желательно.
void setup() {           
PCICR=1< PCMSK0=(1< pinMode (7,INPUT_PULLUP);
pinMode (8,INPUT);
pinMode (9,INPUT);
attachInterrupt(4, key_mute, FALLING);
Keyboard.begin();
}
void loop() { }
 
ISR (PCINT0_vect){
static byte old_n=PINB&B00110000;
byte new_n=PINB&B00110000;
if (old_n==32&&new_n==48||old_n==16&&new_n==0) {
        Remote.increase(); 
        delay(10); 
        Remote.clear();}
if (old_n==16&&new_n==48||old_n==32&&new_n==0) {
        Remote.decrease();
        delay(10); 
        Remote.clear();}
old_n= new_n;
}
 
void key_mute() {       
        Remote.mute(); 
        delay(10); 
        Remote.clear();} 

И он на самом деле шикарный нет ни дребезга ни проскакиваний всё чётко.
Но видимо у меня кривые руки не могу обьеденить скетч для кнопок и энкодера.
Хочу переделать теперь кнопки потому как щелчки не красивые и именно они дают дребезг при нажатии на кнопки хотя новые:sad2:


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

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