25.11.2015, 10:35 | #41 |
Старший Пользователь
Регистрация: 18.04.2009
Город: Краснодар
Регион: 23, 93
Машина: Приора хэтчбек
Сообщений: 979
|
Разберись со скобками в блоке кода с 20-й по 32-ю строку. В строке 24 у тебя открывается скобка просто так, это неправильно. Вероятно, лишние скобки в строках 23 и 24, но тогда непонятки с переменной flag.
__________________
Приора хэтчбек Win7 x64 Pro, Intel Core i3-3240 Ivy Bridge 2x3.4GHz HT, DDR3 2x4Gb, SSD SiliconPower Ace A55 128GB SATAIII, ASRock B75M-ITX, M2-ITX rev.2F, GPS Beitian BN-808, Logitech Wireless Touch Keyboard K400r, ИК-пульт Prology RCD-350, круиз-контроль... |
25.11.2015, 11:41 | #42 |
Старший Пользователь
Регистрация: 21.06.2014
Возраст: 47
Регион: 05
Машина: Hyundai Accent II
Сообщений: 556
|
Не хватает одной закрывающейся скобки в конце. Кстати про скобки: если курсор поместить на любую скобку то ответеая подсвеч вается. Самый простой способ проверки открытых и закрытых скобок.
|
25.11.2015, 19:50 | #43 |
Старший Пользователь
Регистрация: 14.06.2009
Город: Ставрополь
Регион: 26
Машина: AUDI A6 (C5) 2000г.в. V6 2.8L
Сообщений: 131
|
Всё проверяю, всё сходится, поубирал лишние коменты что бы самому понимать что пытаюсь написать
всё тоже самое, в програматоре опять ошибка sketch_nov25a.ino: In function 'void loop()': при этом выделяется строка ISR (PCINT0_vect) как я понял нет действия в loop но ведь оно есть в setup как и в правом регуляторе громкости и там всё работает
__________________
AUDI A6 (C5) V6 2.8L |
26.11.2015, 01:06 | #44 |
Старший Пользователь
Регистрация: 14.06.2009
Город: Ставрополь
Регион: 26
Машина: AUDI A6 (C5) 2000г.в. V6 2.8L
Сообщений: 131
|
Почти вторая часть моего руля
Код HTML:
int analogPin=0; int data; unsigned long flag = 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) // ALT+TAB { Keyboard.press(KEY_LEFT_ALT); Keyboard.press(KEY_TAB); Keyboard.release(KEY_TAB); flag = 0; pauseMillis = millis(); } if (data>=28 && data<=35) // ALT+TAB { Keyboard.press(KEY_TAB); Keyboard.release(KEY_TAB); flag = 0; pauseMillis = millis(); delay(1800); Keyboard.releaseAll(); } if (data>=58 && data<=65) // домой { Keyboard.press(KEY_ESC); Keyboard.release(KEY_ESC); } 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.forward(); delay(100); Remote.clear();} old_n= new_n; } почему-то приложения не все подряд перелистывает а ровно через одно. После еще придется объединить скетчи, это я думаю осилю)
__________________
AUDI A6 (C5) V6 2.8L |
26.11.2015, 11:33 | #45 |
Старший Пользователь
Регистрация: 18.04.2009
Город: Краснодар
Регион: 23, 93
Машина: Приора хэтчбек
Сообщений: 979
|
Вот этот кусок кода странный. Зачем два раза проверять одно и то же условие? Объедини.
Код:
if (data>=28 && data<=35) // ALT+TAB { Keyboard.press(KEY_LEFT_ALT); Keyboard.press(KEY_TAB); Keyboard.release(KEY_TAB); flag = 0; pauseMillis = millis(); } if (data>=28 && data<=35) // ALT+TAB { Keyboard.press(KEY_TAB); Keyboard.release(KEY_TAB); flag = 0; pauseMillis = millis(); delay(1800); Keyboard.releaseAll(); }
__________________
Приора хэтчбек Win7 x64 Pro, Intel Core i3-3240 Ivy Bridge 2x3.4GHz HT, DDR3 2x4Gb, SSD SiliconPower Ace A55 128GB SATAIII, ASRock B75M-ITX, M2-ITX rev.2F, GPS Beitian BN-808, Logitech Wireless Touch Keyboard K400r, ИК-пульт Prology RCD-350, круиз-контроль... |
26.11.2015, 15:03 | #46 |
Старший Пользователь
Регистрация: 14.06.2009
Город: Ставрополь
Регион: 26
Машина: AUDI A6 (C5) 2000г.в. V6 2.8L
Сообщений: 131
|
Если я обьеденяю их, то происходит:
1) нажание АЛЬТ, 2) нажатие ТАБ 3) отпуск ТАБ 4) нажатие ТАБ 5)отпуск ТАБ 6) ожидание 3 секунды 7) отпуск всего В связи с этим: 1 - происходит перескакивание таба на 2 приложения и 2 - пока не пройдёт 3 секунды на кнопку не реагирует. Что значит нормальные отступы? (прошу прощения за тупость я гуманитарий и для меня нормальный отступ 1,25 в начале абзаца) тут делал так просто для того чтобы себе понятнее было
__________________
AUDI A6 (C5) V6 2.8L |
29.11.2015, 01:13 | #47 |
Старший Пользователь
Регистрация: 14.06.2009
Город: Ставрополь
Регион: 26
Машина: AUDI A6 (C5) 2000г.в. V6 2.8L
Сообщений: 131
|
Закончил с пайкой, и теперь у меня 2 половинки управления моим мультирулём.
скомпоновал скетч, всё кроме второго энкодера для переключения треков ни как не получается ничего((( подскажите что как дописать вот в этот рабочий скетч для второго энкодера? Код HTML:
int analogPin=0; int data; 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); //для определения кодов нажатых кнопок на мониторе порта /*поддерживаемые коды управляющих клавиш [url]http://arduino.cc/en/Reference/KeyboardModifiers*/[/url] if (data>=28 && data<=35) // приглушение звука { Remote.mute(); Remote.clear(); } if (data>=58 && data<=65) // воспроизведение / пауза { Remote.play_pause(); Remote.clear(); } if (data>=140 && data<=150) // домой { Keyboard.press(KEY_ESC); Keyboard.release(KEY_ESC); } if (data>=88 && data<=95) // ALT+TAB { Keyboard.press(KEY_LEFT_ALT); Keyboard.press(KEY_TAB); Keyboard.release(KEY_TAB); Keyboard.press(KEY_TAB); Keyboard.releaseAll(); } 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; }
__________________
AUDI A6 (C5) V6 2.8L Последний раз редактировалось TransF; 15.03.2016 в 18:13. |
29.11.2015, 12:28 | #48 |
Старший Пользователь
Регистрация: 21.06.2014
Возраст: 47
Регион: 05
Машина: Hyundai Accent II
Сообщений: 556
|
Дребезг контактов надо подавлять. Или аппаратно или программно. На мой взгляд самый простой способ - использование библиотеки bounce. А иначе глюки будут всегда.
Так же не забыаайте про "подтяжку" кнопок по питанию. Или к плюсу или к земле. На столе может работать идеально, а в машине может глючить. |
29.11.2015, 12:31 | #49 | |
Старший Пользователь
Регистрация: 14.06.2009
Город: Ставрополь
Регион: 26
Машина: AUDI A6 (C5) 2000г.в. V6 2.8L
Сообщений: 131
|
Цитата:
не смог реализовать переключения треков, нашел скетч, вот отсюда https://www.drive2.ru/c/2347322/ он к сожалению далек от идеала, и появился бешенный зребезг поскажите пожалуйста как в этом скетче реализовать подавление дребезга библиотекой bounce Код HTML:
int analogPin=0; int data; unsigned long currentTime; unsigned long loopTime; const int pin_enc_A = 8; /// звук const int pin_enc_B = 9; /// звук const int pin_enc_C = 5; /// переключение const int pin_enc_D = 4; /// переключение unsigned char encoder_A; unsigned char encoder_B; unsigned char encoder_A_prev=0; unsigned char encoder_C; unsigned char encoder_D; unsigned char encoder_C_prev=0; void setup() { Keyboard.begin(); Serial.begin(9600); pinMode(pin_enc_A, INPUT_PULLUP); // encoder 1 pinMode(pin_enc_B, INPUT_PULLUP); // encoder 2 pinMode(pin_enc_C, INPUT_PULLUP); // encoder 1 pinMode(pin_enc_D, INPUT_PULLUP); // encoder 2 currentTime = millis(); loopTime = currentTime; ///attachInterrupt(4, key_mute, FALLING); } void loop() { currentTime = millis(); if(currentTime >= (loopTime + 5)){ // проверяем каждые 5мс (200 Гц) encoder_C = digitalRead(pin_enc_C); // считываем состояние выхода А энкодера encoder_D = digitalRead(pin_enc_D); // считываем состояние выхода А энкодера if((!encoder_C) && (encoder_C_prev)){ // если состояние изменилось с положительного к нулю if(encoder_D) { // выход В в полож. сост., значит вращение по часовой стрелке Remote.next(); delay(10); Remote.clear(); } else { Remote.previous(); delay(10); Remote.clear(); } } encoder_C_prev = encoder_C; } ////энкодер 2 currentTime = millis(); if(currentTime >= (loopTime + 5)){ // проверяем каждые 5мс (200 Гц) encoder_A = digitalRead(pin_enc_A); // считываем состояние выхода А энкодера encoder_B = digitalRead(pin_enc_B); // считываем состояние выхода А энкодера if((!encoder_A) && (encoder_A_prev)){ // если состояние изменилось с положительного к нулю if(encoder_B) { // выход В в полож. сост., значит вращение по часовой стрелке Remote.increase(); delay(5); Remote.clear(); } else { Remote.decrease(); delay(5); Remote.clear(); } } encoder_A_prev = encoder_A; // сохраняем значение А для следующего цикла loopTime = currentTime; } 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(); } if (data>=140 && data<=150) // домой { Keyboard.press(KEY_ESC); Keyboard.release(KEY_ESC); } if (data>=88 && data<=95) // ALT+TAB { Keyboard.press(KEY_LEFT_ALT); Keyboard.press(KEY_TAB); Keyboard.release(KEY_TAB); Keyboard.press(KEY_TAB); Keyboard.releaseAll(); } delay(180); }
__________________
AUDI A6 (C5) V6 2.8L Последний раз редактировалось TransF; 29.11.2015 в 23:02. |
|
02.12.2015, 23:08 | #50 |
Старший Пользователь
Регистрация: 14.06.2009
Город: Ставрополь
Регион: 26
Машина: AUDI A6 (C5) 2000г.в. V6 2.8L
Сообщений: 131
|
Посидел покрутил в руках то что нашёл для энкодеров в инете, и пришел к выводу что скетча лучше чем от lti1 просто не найти, дополнил его кнопками.
Код HTML:
int analogPin=0; int data; void setup() { PCICR=1<<PCIE0; PCMSK0=(1<<PCINT5)|(1<<PCINT4); pinMode (9,INPUT); pinMode (8,INPUT); Keyboard.begin(); Serial.begin(9600); } void loop() { data=analogRead(analogPin); //читаем значение нажатой кнопки Serial.println(data); //для определения кодов нажатых кнопок на мониторе порта if (data>=28 && data<=35) // приглушение звука { Remote.mute(); Remote.clear(); } if (data>=58 && data<=65) // воспроизведение / пауза { Remote.play_pause(); Remote.clear(); } delay(180); if (data>=88 && data<=95) // ALT+TAB { Keyboard.press(KEY_LEFT_ALT); Keyboard.press(KEY_TAB); Keyboard.release(KEY_TAB); Keyboard.press(KEY_TAB); Keyboard.releaseAll(); } delay(180); if (data>=140 && data<=150) // домой { Keyboard.press(KEY_ESC); Keyboard.release(KEY_ESC); } } 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; }
__________________
AUDI A6 (C5) V6 2.8L |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
Опции темы | Поиск в этой теме |
|
|