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:

<<МиТяЙ>> 24.09.2015 23:20

Код HTML:

int val;
 int encoder0PinA = 3;
 int encoder0PinB = 4;
 int encoder0PinC = 5;
 int encoder0PinD = 6;
 int encoder0Pos = 0;
 int encoder0PinALast = LOW;
 int encoder0PinCLast = LOW;
 int n = LOW;
 int d = LOW;

 void setup() {
  pinMode (encoder0PinA,INPUT);
  pinMode (encoder0PinB,INPUT);
  pinMode (encoder0PinC,INPUT);
  pinMode (encoder0PinD,INPUT);
  pinMode (8,INPUT_PULLUP);
  attachInterrupt(4, key_mute, FALLING);
  Serial.begin (9600);
 }
 
//  энкодер.1 - обработка звука
 void loop() {
  n = digitalRead(encoder0PinA);
  d = digitalRead(encoder0PinC);
 
  if ((encoder0PinALast == LOW) && (n == HIGH)) {
    if (digitalRead(encoder0PinB) == LOW) {
      Remote.increase(); 
delay(50); 
Remote.clear();
    } else {
        Remote.decrease(); 
delay(50); 
Remote.clear();
    }
    }
  encoder0PinALast = n;
 
//  энкодер.2 - обработка треков
   
  if ((encoder0PinCLast == LOW) && (d == HIGH)) {
    if (digitalRead(encoder0PinD) == LOW) {
      Remote.next(); 
delay(50); 
Remote.clear();
    } else {
        Remote.previous(); 
delay(50); 
Remote.clear();
    }
    }
  encoder0PinCLast = d;
}
   
//  энкодер.2 - обработка нажатия

 void key_mute() {       
        Remote.mute(); 
        delay(100); 
        Remote.clear();}

Подскажите вот такой код для обработки 2 энкодеров можно использовать.

nikopol70 11.10.2015 11:32

Цитата:

Сообщение от TransF (Сообщение 333525)
Уважаемый 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:

шаг регулировки 4, а как сделать шаг 1?

lti1 11.10.2015 14:42

Цитата:

Сообщение от nikopol70 (Сообщение 340104)
шаг регулировки 4, а как сделать шаг 1?

Похоже на дребезг контактов, конденсаторы в схеме присутствуют? Если нет попробуйте поставить 100 nF.

nikopol70 11.10.2015 15:07

Цитата:

Сообщение от lti1 (Сообщение 340110)
Похоже на дребезг контактов, конденсаторы в схеме присутствуют? Если нет попробуйте поставить 100 nF.

Нет, не верно поняли, кондеры стоят и регулировка происходит четко. Дребезга нет взагали.
В винде шаг регурировки 4 единицы, т.е. 0-4-8-12... и т.д.

В андроиде тоже все четко, но от мин до макс ползунок проходит за 4-5 щелчков энкодера.

Rage2 11.10.2015 15:15

Цитата:

Сообщение от nikopol70 (Сообщение 340113)

В андроиде тоже все четко, но от мин до макс ползунок проходит за 4-5 щелчков энкодера.

Так значит нужно увеличить количество пунктов уровня громкости в андройд до нужного значения. Xposed в помошь
как пример http://ru.wikihow.com/увеличить-шаги...ойства-Андроид

TransF 19.10.2015 00:24

Вложений: 1
В связи с покупкой нового руля, и ковырянием в куче всякой информации выяснилось что подключить новый руль в машине с его заводским устройством не представится возможным. (единственное поможет замена почти всей проводки в авто)
Родилась идея воткнуть всё рулевое (4 кнопки и 2 энкодера) в ещё одну ардуину.
Вот тут нашёл пример включения 2 энкодеров.
Убрал всё что не относится к рулевому

Может кто посоветует что со скетчем?

ali_vlad 19.10.2015 09:25

Тут уже кучу скетчей выложили, выбирай любой. Но я бы посоветовал использовать не аппаратное прерывание, а библиотеки. Bounce.h для ликвидации дребезга и encoder.h. Описания и примеры в интернете навалом.
Вечером добирусь до компа - выложу пример.

TransF 19.10.2015 09:29

Все скетчи тут выложенные предусматривают подключение 3 пинов к ардуине, а в последнем варианте, всего 2.
В этом и вся сложность(((
Может я конечно совсем чайник, но мы тут и находимся все, чтобы делится опытом...

ali_vlad 19.10.2015 11:15

Ну хоть чуть теорию почитай. Есть аналоговые входы. На них резистивные кнопки вешаются. Есть цифровые входы. Без матчасти тяжело будет.

TransF 19.10.2015 11:44

Ну как всегда ((( повторюсь тем что было написано выше, мы тут для обсуждения того как и что тут реализовывает а не для ликвидации безграмотности.

Прошу прощения за грубость и с учетом Ваших заслуг и умений ali_vlad - Ваша позиция мне сейчас напоминает человека у которого всё есть и ему не хватает только кисточки для "чистки пупка". Можно же ткнуть туда, где есть реальные примеры которые можно переработать под мою идею, а "не возить меня по полу и указывать на мою безграмотность"

Я сравниваю скетчи которые у меня есть из разных примеров, и реально не могу понять алгоритм действий который необходим для реализации моей идеи.

Правый энкодер - горомкость + -
TEL - play+stop
кнопка на правом энкодере - mute

Левый энкодер - треки >> и <<
MODE - Alt+tab
кнопка на левом энкодере - хотелось бы реализовать как яркость экрана в связке с левым энкодером, нажал и покрутил

ali_vlad 19.10.2015 12:33

Цитата:

Сообщение от TransF (Сообщение 340792)
Ну как всегда ((( повторюсь тем что было написано выше, мы тут для обсуждения того как и что тут реализовывает а не для ликвидации безграмотности.

Прошу прощения за грубость и с учетом Ваших заслуг и умений ali_vlad - Ваша позиция мне сейчас напоминает человека у которого всё есть и ему не хватает только кисточки для "чистки пупка". Можно же ткнуть туда, где есть реальные примеры которые можно переработать под мою идею, а "не возить меня по полу и указывать на мою безграмотность"

Я сравниваю скетчи которые у меня есть из разных примеров, и реально не могу понять алгоритм действий который необходим для реализации моей идеи.

Правый энкодер - горомкость + -
TEL - play+stop
кнопка на правом энкодере - mute

Левый энкодер - треки >> и <<
MODE - Alt+tab
кнопка на левом энкодере - хотелось бы реализовать как яркость экрана в связке с левым энкодером, нажал и покрутил

Если Вы такой нервный - персенчику попейте, а кисточку себе оставьте.
Вы сами не представляете, чего просите. Левый, правый, яркость...
А если левый и средний тогда что, конец света, земля остановилась? Повторяю еще раз без элементарных знаний Ваша идея так и останется идеей. Вы даже не можете 2 скетча сложить, а уже начали советы давать. Не всё так просто в ардуине. Вот, почитайте. И это почитайте, про энкодер почитайте. Про управление яркостью - здесь ищите. А если у Вас есть время писать гневные коменты на дельные советы - значит Вы его бесполезно тратите. Потратьте его ан изучение матчасти.

ali_vlad 19.10.2015 12:37

А если Вам лень учить - здесь то, что Вы хотите, и знаний нужно 0,00000000000000000000000000000000.

TransF 19.10.2015 13:02

Ну вот и померились как говориться.....

А за ссылки большое спасибО!
Пошёл учить мат.часть)

ali_vlad 19.10.2015 13:12

И еще один совет: хотите безотказной работы - обратите особое внимание на последнюю ссылку. Ардуина - так, поиграться. Без серьезных знаний толку будет мало. Я тоже начинал с тех же граблей. Итог: ардуина так и осталась на макетке. Детей развлекать.
Дальше Вам понадобится умный блок питания. Тоже будете искать скетчи, складывать их. Ошибки неизбежны. А это тормоза, глюки, нервы. Потом посчитайте, сколько Вы туда вложили, сколько контроллеров спалили. Добавьте потраченное впустую время и у Вас выйдет...
Если Вы хотите нормальную вещь - берите то, что посоветовал. Можете мне сейчас не верить, но пойдет время и Вы поймете, что я был прав на 200%

ali_vlad 19.10.2015 13:17

Цитата:

Сообщение от TransF (Сообщение 340811)
померились

помЕрились или помИрились:big:
Если что, то у меня 25см

TransF 20.10.2015 11:40

Я лично и не сСорился чтобы мИриться.....
А размер не имеет значения, если не уметь пользоваться этим размером :big:

Теперь по теме: изучение показало, что информации по скетчам действительно море и каждый реализует свои идеи как ему вздумается, к сожалению нет ни рецепта ни конкретного языка которым можно было бы воспользоваться.
:shok: теперь пытаюсь сложить, нужные мне части из разных скетчей в единый.

пока не ясен вопрос только с переключением треков с помощью энкодера :be:

ali_vlad 20.10.2015 11:48

Одна голова хорошо, а две, три - уже бардак. :) Кидай наработки, вечером поковыряю. Переключение треков реализовать не сложно. Мой пример с громкостью и mute изучи. Там следует только заменить вызываемую из библиотеки remote финкцию.

TransF 21.10.2015 00:01

Да наработок то как я понимаю и не нужно, lti1 уже всё наработал и оно работает, осталось только разобраться как раз со вторым энкодером для переключения треков, чем я в принципе и занимался непонимая что и как:dntknw:
ДЛя себя решил что просто не буду подключать ненужные мне кнопки и всё.

Кстати благодаря ковыряниям в инфе по энкодерам решил прозвонить все свои энкодеры и выяснилось что мой основной который уже работает на громкости он постоянно разомкнут (т.е. сигнал проходит только в момент поворота), а те что стоят в руле (завод ауди, сделал постоянно замкнутыми и в момент поворота происходит разрыв)
Не повлияет ли это как-то на скетч?

ali_vlad 21.10.2015 08:14

Озадачил. Надо искать инфу по библиотеке bounce, так как она занимается обработкой энкодеров.

TransF 21.10.2015 09:27

Да, как выяснилось по bounce (спасибо за направление) библиотеке пофик что обрабатывать замыкание или разрыв,
http://greenoakst.blogspot.ru/2012/0...ounce.html?m=1
Вот пример это демонстрирующий, главное указать ей начальные и конечные значения.
Блин на вид всё так просто, а когда начинаешь копать скетч, голова кругом.
И ещё нюанс, теперь даже проверить не могу эти энкодеры со скетчем, планшет готовлю в машину, а ардуину вытаскивать уже не вариант(((
Жду другую из поднебесной....

ali_vlad 21.10.2015 10:39

Я ошибся. Библиотека encoder называется.

TransF 23.10.2015 17:26

Цитата:

Сообщение от ali_vlad (Сообщение 340990)
Я ошибся. Библиотека encoder называется.

Что-то я такой не нахожу ни где :dntknw:



НАШЕЛ)))
теперь бы как нибудь её изучить, сама библиотека есть теперь, а вот информации по ней, кто-то маловато будет (((

ali_vlad 23.10.2015 18:59

Посмотри ссылки, которые я осталял. Там готовый пример с регулятором громкости и библиотекой энкодер и с пояснениями. С ней вообще всё просто: 3 режима. С аппаратным прерыванием, без прерываний и еще какой-то. На мой взгляд, лучше без прерываний.

ali_vlad 23.10.2015 20:33

Забыл самое главное. Библиотека remote. Она всем рулит. А bounce, encoder это для избавления дребезга контактов.

defed 24.10.2015 17:55

Привет.Подскажите, может знает кто нибудь. Залил скетч на ардуино pro micro управление звуком энкодером,все отлично работает. Но если запуск pipo x8 идет с данным регулятором то при включении он не работает пока не отключишь и подключишь его обратно. Может есть способ программно побороть это без задержки включения 5 вольт на usb?

ali_vlad 24.10.2015 20:14

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

TransF 22.11.2015 18:34

Эпопея продолжается...
теперь есть всё необходимое для рулевого управления,
пишу скетч для правой (пока) чести управления

по отдельности 2 счетча работают
1 для кнопок
PHP код:

int analogPin=0;
int data;

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

void loop()
{
  
data=analogRead(analogPin); //читаем значение нажатой кнопки
  
Serial.println(data); //для определения кодов нажатых кнопок на мониторе порта
  /*поддерживаемые коды управляющих клавиш
  http://arduino.cc/en/Reference/KeyboardModifiers*/

  
if (data>=28 && data<=35)  // приглушение звука
    
{
      
Remote.mute();
      
Remote.clear();
    }
  if (
data>=58 && data<=65)  // воспроизведение / пауза
    
{
      
Remote.play_pause();
      
Remote.clear();
    }
  
delay(100);


2-й для энекодера громкости от lti1

а вот вместе они дружить не хотят ((((
что я могу не так соединять?
PHP код:

//Скетч регулятора громкости на энкодере для Arduino PRO MICRO 
// энкодер на 8 и 9 пинах  выводы подтянуты к питанию, 
// конденсаторы на землю желательно. 
//кнопка энкодера на 7 ноге, притянута к + программно. конденсатор желательно. 
int analogPin=0;
int data;
void setup() {             
PCICR=1<<PCIE0
PCMSK0=(1<<PCINT5)|(1<<PCINT4); 
pinMode (7,INPUT_PULLUP); 
pinMode (8,INPUT); 
pinMode (9,INPUT); 
attachInterrupt(4key_muteFALLING); 
Keyboard.begin(); 
Serial.begin(9600);

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_nnew_n

  
void key_mute() {         
        
Remote.mute();  
        
delay(10);  
        
Remote.clear();}  
        {
  
data=analogRead(analogPin); //читаем значение нажатой кнопки
  
Serial.println(data); //для определения кодов нажатых кнопок на мониторе порта
  /*поддерживаемые коды управляющих клавиш
  http://arduino.cc/en/Reference/KeyboardModifiers*/
  
if (data==614)  Keyboard.write(176); //ENTER
  
if (data==122)  Keyboard.write(216); //стрелка влево
  
if (data==165)  Keyboard.write(215); //стрелка вправо
  
if (data==216)  Keyboard.write(218); //стрелка вверх
  
if (data==276)  Keyboard.write(217); //стрелка вниз
  
if (data>=38 && data<=35)  // приглушение звука
    
{
      
Remote.mute();
      
Remote.clear();
    }
  if (
data>=58 && data<=65)  // воспроизведение / пауза
    
{
      
Remote.play_pause();
      
Remote.clear();
    }
  
delay(100);


выдает вот такую ошибку
sketch_encoder:37: error: expected unqualified-id before '{' token

lti1 22.11.2015 19:39

TransF, ну наверное потому, что в loop добавлять нужно, чтиво.
PHP код:

int analogPin=0;
int data;
void setup() {             
PCICR=1<<PCIE0
PCMSK0=(1<<PCINT5)|(1<<PCINT4); 
pinMode (7,INPUT_PULLUP); 
pinMode (8,INPUT); 
pinMode (9,INPUT); 
attachInterrupt(4key_muteFALLING); 
Keyboard.begin(); 
Serial.begin(9600);

void loop() {
 
data=analogRead(analogPin); //читаем значение нажатой кнопки
  
Serial.println(data); //для определения кодов нажатых кнопок на мониторе порта
  /*поддерживаемые коды управляющих клавиш
  http://arduino.cc/en/Reference/KeyboardModifiers*/
  
if (data==614)  Keyboard.write(176); //ENTER
  
if (data==122)  Keyboard.write(216); //стрелка влево
  
if (data==165)  Keyboard.write(215); //стрелка вправо
  
if (data==216)  Keyboard.write(218); //стрелка вверх
  
if (data==276)  Keyboard.write(217); //стрелка вниз
  
if (data>=38 && data<=35)  // приглушение звука
    
{
      
Remote.mute();
      
Remote.clear();
    }
  if (
data>=58 && data<=65)  // воспроизведение / пауза
    
{
      
Remote.play_pause();
      
Remote.clear();
    }

  
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_nnew_n

  
void key_mute() {         
        
Remote.mute();  
        
delay(10);  
        
Remote.clear();} 

И зачем delay(100); в конце цикла?
P.S.
Это не мой скетч, я его только подправил.

TransF 22.11.2015 23:59

Цитата:

Сообщение от lti1 (Сообщение 344412)
P.S.
Это не мой скетч, я его только подправил.

Прошу прощения исправлюсь :blush:

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

Опытным путем выяснено что дэлэй для энкодера в показателе 100 исключает дребезг контактов (вместо 10 в оригинальном скетче)
Верхний дэлэй пришлось вернуть, так как только с его помощью исключил дребезг в кнопках мьют и плэй/пауза

на данном этапе скетч выглядит вот так
Код:

int analogPin=0;
int data;
void setup() {           
PCICR=1< PCMSK0=(1< pinMode (8,INPUT);
pinMode (9,INPUT);
Keyboard.begin();
Serial.begin(9600);
}
void loop() {
 data=analogRead(analogPin); //читаем значение нажатой кнопки
  Serial.println(data); //для определения кодов нажатых кнопок на мониторе порта
  /*поддерживаемые коды управляющих клавиш
  http://arduino.cc/en/Reference/KeyboardModifiers*/
  if (data>=28 && data<=35)  // приглушение звука
    {
      Remote.mute();
      Remote.clear();
    }
  if (data>=58 && data<=65)  // воспроизведение / пауза
    {
      Remote.play_pause();
      Remote.clear();
    }
  delay(180);
}
 
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(100); 
        Remote.clear();}
old_n= new_n;
}

Может быть криво написано но работает. т.к. мои энкодеры без нажимных кнопок, удалил из части энкодера мьют

начал работу над левый частью, по особо не получается, мучаюсь с альт+табом

TransF 25.11.2015 02:02

Помогите пожалуйста люди добрые, где-то скосячил не пойму где

Код HTML:

int analogPin=0;
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 (8,INPUT);
pinMode (9,INPUT);
Keyboard.begin();
Serial.begin(9600);
}
void loop() {
 data=analogRead(analogPin); //читаем значение нажатой кнопки
  Serial.println(data); //для определения кодов нажатых кнопок на мониторе порта


             
if (data>
=28 && data<=35)  // альт+таб
  {
flag = 1;
  }
  {
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>
=58 && data<=65)  // воспроизведение / пауза
{
  Remote.play_pause();
  Remote.clear();
  delay(180);}
 
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.next(); 
        delay(10); 
        Remote.clear();}
if (old_n==16&&new_n==48||old_n==32&&new_n==0) {
        Remote.previous();
        delay(100); 
        Remote.clear();}
old_n= new_n;
}

выходят ошибки
Код HTML:

sketch_nov24a.ino: In function 'void loop()':
sketch_nov24a:40: error: expected unqualified-id before string constant
sketch_nov24a:41: error: a function-definition is not allowed here before '{' token
sketch_nov24a:53: error: expected `}' at end of input

я так понял первая потянула за собой остальной клубок


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

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