![]() |
|
|
#41 |
|
Старший Пользователь
![]() Регистрация: 18.04.2009
Город: Краснодар
Регион: 23, 93
Машина: Приора хэтчбек
Сообщений: 980
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Разберись со скобками в блоке кода с 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, круиз-контроль... |
|
|
|
|
|
#42 |
|
Старший Пользователь
![]() Регистрация: 21.06.2014
Возраст: 48
Регион: 05
Машина: Hyundai Accent II
Сообщений: 556
![]() |
Не хватает одной закрывающейся скобки в конце. Кстати про скобки: если курсор поместить на любую скобку то ответеая подсвеч вается. Самый простой способ проверки открытых и закрытых скобок.
|
|
|
|
|
|
#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 |
|
|
|
|
|
#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 |
|
|
|
|
|
#45 |
|
Старший Пользователь
![]() Регистрация: 18.04.2009
Город: Краснодар
Регион: 23, 93
Машина: Приора хэтчбек
Сообщений: 980
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Вот этот кусок кода странный. Зачем два раза проверять одно и то же условие? Объедини.
Код:
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, круиз-контроль... |
|
|
|
|
|
#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 |
|
|
|
|
|
#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. |
|
|
|
|
|
#48 |
|
Старший Пользователь
![]() Регистрация: 21.06.2014
Возраст: 48
Регион: 05
Машина: Hyundai Accent II
Сообщений: 556
![]() |
Дребезг контактов надо подавлять. Или аппаратно или программно. На мой взгляд самый простой способ - использование библиотеки bounce. А иначе глюки будут всегда.
Так же не забыаайте про "подтяжку" кнопок по питанию. Или к плюсу или к земле. На столе может работать идеально, а в машине может глючить. |
|
|
|
|
|
#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. |
|
|
|
|
|
|
#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) | |
| Опции темы | Поиск в этой теме |
|
|