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

Вернуться   PCCar.ru - Ваш автомобильный компьютер > MP3Car ТехИнфа > Устройства ввода > Резистивные кнопки

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2015, 10:35   #41
Lexx09
Старший Пользователь
 
Регистрация: 18.04.2009
Город: Краснодар
Регион: 23, 93
Машина: Приора хэтчбек
Сообщений: 979
Lexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud of
По умолчанию

Разберись со скобками в блоке кода с 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, круиз-контроль...
Lexx09 вне форума   Ответить с цитированием
Старый 25.11.2015, 11:41   #42
ali_vlad
Старший Пользователь
 
Регистрация: 21.06.2014
Возраст: 47
Регион: 05
Машина: Hyundai Accent II
Сообщений: 556
ali_vlad is on a distinguished road
По умолчанию

Не хватает одной закрывающейся скобки в конце. Кстати про скобки: если курсор поместить на любую скобку то ответеая подсвеч вается. Самый простой способ проверки открытых и закрытых скобок.
ali_vlad вне форума   Ответить с цитированием
Старый 25.11.2015, 19:50   #43
TransF
Старший Пользователь
 
Регистрация: 14.06.2009
Город: Ставрополь
Регион: 26
Машина: AUDI A6 (C5) 2000г.в. V6 2.8L
Сообщений: 131
TransF is on a distinguished road
По умолчанию

Всё проверяю, всё сходится, поубирал лишние коменты что бы самому понимать что пытаюсь написать
всё тоже самое, в програматоре опять ошибка

sketch_nov25a.ino: In function 'void loop()':
при этом выделяется строка ISR (PCINT0_vect)

как я понял нет действия в loop
но ведь оно есть в setup как и в правом регуляторе громкости и там всё работает
__________________

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

Почти вторая часть моего руля
Код 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
TransF вне форума   Ответить с цитированием
Старый 26.11.2015, 11:33   #45
Lexx09
Старший Пользователь
 
Регистрация: 18.04.2009
Город: Краснодар
Регион: 23, 93
Машина: Приора хэтчбек
Сообщений: 979
Lexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud ofLexx09 has much to be proud of
По умолчанию

Вот этот кусок кода странный. Зачем два раза проверять одно и то же условие? Объедини.
Код:
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, круиз-контроль...
Lexx09 вне форума   Ответить с цитированием
Старый 26.11.2015, 15:03   #46
TransF
Старший Пользователь
 
Регистрация: 14.06.2009
Город: Ставрополь
Регион: 26
Машина: AUDI A6 (C5) 2000г.в. V6 2.8L
Сообщений: 131
TransF is on a distinguished road
По умолчанию

Если я обьеденяю их, то происходит:
1) нажание АЛЬТ,
2) нажатие ТАБ
3) отпуск ТАБ
4) нажатие ТАБ
5)отпуск ТАБ
6) ожидание 3 секунды
7) отпуск всего
В связи с этим: 1 - происходит перескакивание таба на 2 приложения и 2 - пока не пройдёт 3 секунды на кнопку не реагирует.

Цитата:
Сообщение от Lexx09 Посмотреть сообщение
Да, и сделай нормальные отступы...
Что значит нормальные отступы? (прошу прощения за тупость я гуманитарий и для меня нормальный отступ 1,25 в начале абзаца)
тут делал так просто для того чтобы себе понятнее было
__________________

AUDI A6 (C5) V6 2.8L
TransF вне форума   Ответить с цитированием
Старый 29.11.2015, 01:13   #47
TransF
Старший Пользователь
 
Регистрация: 14.06.2009
Город: Ставрополь
Регион: 26
Машина: AUDI A6 (C5) 2000г.в. V6 2.8L
Сообщений: 131
TransF is on a distinguished road
Question

Закончил с пайкой, и теперь у меня 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; 
}
второй энкодер использую на 6 и 7 ногах ардуины
__________________

AUDI A6 (C5) V6 2.8L

Последний раз редактировалось TransF; 15.03.2016 в 18:13.
TransF вне форума   Ответить с цитированием
Старый 29.11.2015, 12:28   #48
ali_vlad
Старший Пользователь
 
Регистрация: 21.06.2014
Возраст: 47
Регион: 05
Машина: Hyundai Accent II
Сообщений: 556
ali_vlad is on a distinguished road
По умолчанию

Дребезг контактов надо подавлять. Или аппаратно или программно. На мой взгляд самый простой способ - использование библиотеки bounce. А иначе глюки будут всегда.
Так же не забыаайте про "подтяжку" кнопок по питанию. Или к плюсу или к земле. На столе может работать идеально, а в машине может глючить.
ali_vlad вне форума   Ответить с цитированием
Старый 29.11.2015, 12:31   #49
TransF
Старший Пользователь
 
Регистрация: 14.06.2009
Город: Ставрополь
Регион: 26
Машина: AUDI A6 (C5) 2000г.в. V6 2.8L
Сообщений: 131
TransF is on a distinguished road
По умолчанию

Цитата:
Сообщение от ali_vlad Посмотреть сообщение
Дребезг контактов надо подавлять. Или аппаратно или программно. На мой взгляд самый простой способ - использование библиотеки bounce. А иначе глюки будут всегда.
Так же не забыаайте про "подтяжку" кнопок по питанию. Или к плюсу или к земле. На столе может работать идеально, а в машине может глючить.
(С дребезгом всё норм, по крайней мере на столе. аппаратно он заглушен 104 конденсаторам. Глюков НЕТ.) всё изменилось((

не смог реализовать переключения треков, нашел скетч, вот отсюда 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.
TransF вне форума   Ответить с цитированием
Старый 02.12.2015, 23:08   #50
TransF
Старший Пользователь
 
Регистрация: 14.06.2009
Город: Ставрополь
Регион: 26
Машина: AUDI A6 (C5) 2000г.в. V6 2.8L
Сообщений: 131
TransF is on a distinguished road
Question

Посидел покрутил в руках то что нашёл для энкодеров в инете, и пришел к выводу что скетча лучше чем от 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
TransF вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



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


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