Показать сообщение отдельно
Старый 09.07.2015, 18:55   #9
TransF
Старший Пользователь
 
Регистрация: 14.06.2009
Город: Ставрополь
Регион: 26
Машина: AUDI A6 (C5) 2000г.в. V6 2.8L
Сообщений: 131
TransF is on a distinguished road
По умолчанию

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

1.100% работающий код для энкодера
Код:
 //Скетч регулятора громкости на энкодере для Arduino PRO MICRO
// энкодер на 8 и 9 пинах  выводы подтянуты к питанию,
// конденсаторы на землю желательно.
//кнопка энкодера на 7 ноге, притянута к + программно. конденсатор желательно.
void setup() {            
PCICR=1<<PCIE0;
PCMSK0=(1<<PCINT5)|(1<<PCINT4);
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

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

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

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<<PCIE0;
    PCMSK0 = (1<<PCINT5)|(1<<PCINT4);
    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<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;  
    }   
}
__________________

AUDI A6 (C5) V6 2.8L
TransF вне форума   Ответить с цитированием