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

PCCar.ru - Ваш автомобильный компьютер (http://pccar.ru/index.php)
-   Резистивные кнопки (http://pccar.ru/forumdisplay.php?f=165)
-   -   Encoder + Arduino + Резистивные кнопки (http://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(4key_muteFALLING);
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_nnew_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-&& 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()-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()-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()-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()-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()-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;  
}   


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

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(4keyMuteFALLING);

    
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-&& 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() - 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()-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()-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()-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()-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;  
    }   


Пробуйте

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, время: 15:15.

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