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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.08.2017, 08:43   #91
Las42kuz
Пользователь
 
Регистрация: 11.02.2017
Возраст: 37
Город: Новокузнецк
Регион: 42
Машина: FordFocus 2
Сообщений: 68
Las42kuz is on a distinguished road
По умолчанию

Цитата:
Сообщение от jonikus81 Посмотреть сообщение
Las42kuz, как оно могло у Вас работать, если не хватает библиотек в обоих скетчах и желательно ссылку на них ибо стандартные не работают.
Я в этом не силен делал все по урокам на youtube по отдельности и энкодер и кнопки на руле работают :
https://yadi.sk/d/YrXiZwyB3Ltp8P
https://yadi.sk/d/1N16cgDh3Ltp7Y
Las42kuz вне форума   Ответить с цитированием
Старый 11.08.2017, 09:13   #92
Las42kuz
Пользователь
 
Регистрация: 11.02.2017
Возраст: 37
Город: Новокузнецк
Регион: 42
Машина: FordFocus 2
Сообщений: 68
Las42kuz is on a distinguished road
По умолчанию

Цитата:
Сообщение от jonikus81 Посмотреть сообщение
Las42kuz, как оно могло у Вас работать, если не хватает библиотек в обоих скетчах и желательно ссылку на них ибо стандартные не работают.
https://yadi.sk/d/hGU3nP4w3LtqKZ
Las42kuz вне форума   Ответить с цитированием
Старый 11.08.2017, 12:23   #93
jonikus81
Старший Пользователь
 
Аватар для jonikus81
 
Регистрация: 07.09.2015
Возраст: 43
Город: Алматы
Регион: Казахстан
Машина: MMC DELICA 94 (булка)
Сообщений: 209
jonikus81 is a jewel in the roughjonikus81 is a jewel in the roughjonikus81 is a jewel in the roughjonikus81 is a jewel in the rough
По умолчанию

https://yadi.sk/d/gjjMKyYZ3Lu7iB
пробуйте, так как все железки дома, протестировать не могу
jonikus81 вне форума   Ответить с цитированием
Старый 11.08.2017, 12:46   #94
Las42kuz
Пользователь
 
Регистрация: 11.02.2017
Возраст: 37
Город: Новокузнецк
Регион: 42
Машина: FordFocus 2
Сообщений: 68
Las42kuz is on a distinguished road
По умолчанию

Цитата:
Сообщение от jonikus81 Посмотреть сообщение
https://yadi.sk/d/gjjMKyYZ3Lu7iB
пробуйте, так как все железки дома, протестировать не могу
попробовал работает но жутко тормозит само нажатие кнопок и энкодера
Las42kuz вне форума   Ответить с цитированием
Старый 12.08.2017, 01:17   #95
lti1
Старший Пользователь
 
Аватар для lti1
 
Регистрация: 17.01.2010
Возраст: 48
Город: Самара
Регион: 63, 163
Машина: Skoda Octavia A5 FL && Skoda Octavia Tour && ̶F̶F̶3̶
Сообщений: 457
lti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond reputelti1 has a reputation beyond repute
По умолчанию

Las42kuz, пробуйте. Схема подключения резистивных кнопок здесь.
PHP код:
/*
вывод 1 энкодера к выводу 3 ардуино
вывод 2 энкодера к выводу 4 ардуино
общий вывод энкодера к выводу GND ардуино
резестивные кнопки к выводу A0 ардуино
*/
//****************** Здесь необходимо указать свои значения ***************

#define analogPin             0         // пин для подключения кнопок, по умолчанию A0

/* возможные действия
vol_up_action()    Увеличить громкость
vol_down_action() Уменьшить громкость
next_action()   Следующий трек
forward_action()  Предыдущий трек
previous_action() Перемотка вперед
rewind_action()   Перемотка назад
play_pause_action() Play/Pause
mute_action()   Приглушение звука
alt_tab_action()  Alt + Tab
home_action()   Переход на домашний экран
play_action()   Play
pause_action()    Pause
stop_action()   Stop
power_action()    Питание (Включить или выключить экран)
mouse_wheel_up()  Вращение колеса мыши от себя
mouse_wheel_down()  Вращение колеса мыши на себя
*/
// только на кнопках 1-4 при удержании действие повторяется 10 раз в секунду

#define encoder_up vol_up_action()      // действие на энкодер
#define encoder_down vol_down_action()      // действие на энкодер
#define key_1_press vol_up_action()      // действие на короткое нажатие кнопки 1 
#define key_1_holding vol_up_action()      // действие на удержание кнопки 1 
#define key_2_press vol_down_action()    // действие на короткое нажатие кнопки 2
#define key_2_holding vol_down_action()    // действие на удержание кнопки 2
#define key_3_press next_action()        // действие на короткое нажатие кнопки 3
#define key_3_holding forward_action()     // действие на удержание кнопки 3
#define key_4_press previous_action()    // действие на короткое нажатие кнопки 4
#define key_4_holding rewind_action()      // действие на удержание кнопки 4
#define key_5_press play_pause_action()  // действие на короткое нажатие кнопки 5
#define key_5_holding mute_action()        // действие на удержание кнопки 5
#define key_6_press alt_tab_action()     // действие на короткое нажатие кнопки 6
#define key_6_holding home_action()        // действие на удержание кнопки 6
#define key_7_press mouse_wheel_up()     // действие на короткое нажатие кнопки 7
#define key_7_holding                      // действие на удержание кнопки 7
#define key_8_press mouse_wheel_down()   // действие на короткое нажатие кнопки 8
#define key_8_holding                      // действие на удержание кнопки 8
#define key_9_press                      // действие на короткое нажатие кнопки 9
#define key_9_holding                        // действие на удержание кнопки 9

#define release_button        1023  // значение при отпущенных кнопках
#define button_release_range  50  // диапазон значения + - при отпущенных кнопках
#define button_range          10  // диапазон значения нажатых кнопок + -
#define time_holding          500 // время для удержания кнопок в миллисекундах
#define time_tinkling         30  // время исключающее дребезг контактов в миллисекундах
#define key_1                 1500  // значение кнопки 1
#define key_2                 1500  // значение кнопки 2
#define key_3                 1500  // значение кнопки 3
#define key_4                 1500  // значение кнопки 4
#define key_5                 1500  // значение кнопки 5
#define key_6                 1500  // значение кнопки 6
#define key_7                 1500  // значение кнопки 7
#define key_8                 1500  // значение кнопки 8
#define key_9                 1500  // значение кнопки 9
//**************************************************************************

uint32_t timerdata_savedata_keytimer_alt_tab;
uint16_t datacounter;
uint8_t pinb_statepinb_state_savepind_state;

void setup() {
  
analogReference(DEFAULT); // подключение внутреннего напряжение AVCC к выводу AREF (опорное напряжение)  
  
Keyboard.begin();
  
Mouse.begin();
  
DDRD &= ~(1<<0);
  
PORTD |= (1<<0);
  
DDRD &= ~(1<<4);
  
PORTD |= (1<<4);
}

void loop() {
  
data analogRead(analogPin);
  if((
millis() - timer) > 5) {
    
timer millis();
  
encoder();
    
key();
  }
  if((
millis() - timer_alt_tab) == 1000) {
    
Keyboard.release(KEY_LEFT_ALT);
  }
}

void encoder() {
  if ((
PIND B00010001) != B00010001 && (PIND B00010001)!= B00000000) {
    if ((
PIND B00010001) == B00010000 && pind_state == B00000001) {
      
encoder_up;
    }
    else if ((
PIND B00010001) == B00000001 && pind_state == B00010000) {
      
encoder_down;
    }
    
pind_state = (PIND B00010001); 
  }
  else if ((
PIND B00010001) == B00010001) {
    
pind_state B00000000
  }
}

void key() {
  if(
data >= release_button button_release_range && data <= release_button button_release_range) { // кнопки отпущены
    
if(counter > (time_tinkling 5) && counter < (time_holding 5)) { // короткое нажатие какой-либо кнопки и больше времени исключающее дребезг
      
data_key data_save counter;
      if(
data_key >= (key_1 button_range) && data_key <= (key_1 button_range)) {
        
key_1_press;
      }
      if(
data_key >= (key_2 button_range) && data_key <= (key_2 button_range)) {
        
key_2_press;
      }
      if(
data_key >= (key_3 button_range) && data_key <= (key_3 button_range)) {
        
key_3_press;
      }
      if(
data_key >= (key_4 button_range) && data_key <= (key_4 button_range)) {
        
key_4_press;
      }
      if(
data_key >= (key_5 button_range) && data_key <= (key_5 button_range)) { 
        
key_5_press;
      }
      if(
data_key >= (key_6 button_range) && data_key <= (key_6 button_range)) {
        
key_6_press;
      }
      if(
data_key >= (key_7 button_range) && data_key <= (key_7 button_range)) {
        
key_7_press;
      }
      if(
data_key >= (key_8 button_range) && data_key <= (key_8 button_range)) {
        
key_8_press;
      }
      if(
data_key >= (key_9 button_range) && data_key <= (key_9 button_range)) {
        
key_9_press;
      }
    }
    
data_save 0;
    
counter 0;
  }
  else { 
// нажата какая-то кнопка
    
counter++;
    
data_save data_save data;
    if(
counter >= (time_holding 5)) { // удержание какой-либо кнопки
      
data_key data_save counter;
      if((
counter 20) == 0) { // действие повторяется 10 раз в секунду, пока кнопка нажата
        
if(data_key >= (key_1 button_range) && data_key <= (key_1 button_range)) {
          
key_1_holding;
        }
        if(
data_key >= (key_2 button_range) && data_key <= (key_2 button_range)) {
         
key_2_holding;
        }
        if(
data_key >= (key_3 button_range) && data_key <= (key_3 button_range)) {
          
key_3_holding;
        }
        if(
data_key >= (key_4 button_range) && data_key <= (key_4 button_range)) {
         
key_4_holding;
        }
      }
      if(
counter == (time_holding 5)) { // действие выполняется 1 раз при удержании
        
if(data_key >= (key_5 button_range) && data_key <= (key_5 button_range)) {
         
key_5_holding;
        }
        if(
data_key >= (key_6 button_range) && data_key <= (key_6 button_range)) {
         
key_6_holding;
        }
        if(
data_key >= (key_7 button_range) && data_key <= (key_7 button_range)) {
         
key_7_holding;
        }
        if(
data_key >= (key_8 button_range) && data_key <= (key_8 button_range)) {
         
key_8_holding;
        }
        if(
data_key >= (key_9 button_range) && data_key <= (key_9 button_range)) {
         
key_9_holding;
        }
      }
    }
  }
}

void vol_up_action() {
  
Remote.increase();
  
Remote.clear();
}
void vol_down_action() {
  
Remote.decrease();
  
Remote.clear();
}
void next_action() {
  
Remote.next();
  
Remote.clear();
}
void forward_action() {
  
Remote.forward();
  
Remote.clear();
}
void previous_action() {
  
Remote.previous();
  
Remote.clear();
}
void rewind_action() {
  
Remote.rewind();
  
Remote.clear();
}
void play_pause_action() {
  
Remote.play_pause();
  
Remote.clear();
}
void mute_action() {
  
Remote.mute();
  
Remote.clear();
}
void alt_tab_action() {
  if((
millis() - timer_alt_tab) > 1000) {
    
Keyboard.press(KEY_LEFT_ALT);
    
Keyboard.press(KEY_TAB);
    
Keyboard.release(KEY_TAB);
    
Keyboard.press(KEY_TAB);
    
Keyboard.release(KEY_TAB);
    
timer_alt_tab millis();
  }
  else {
    
Keyboard.press(KEY_TAB);
    
Keyboard.release(KEY_TAB);
    
timer_alt_tab millis();
  }
}
void home_action() {
  
Remote.home();
  
Remote.clear();
}
void play_action() {
  
Remote.play();
  
Remote.clear();
}
void pause_action() {
  
Remote.pause();
  
Remote.clear();
}
void stop_action() {
  
Remote.stop();
  
Remote.clear();
}
void power_action() {
  
Remote.power();
  
Remote.clear();
}

void mouse_wheel_up() {
  
Mouse.move(001);
}

void mouse_wheel_down() {
  
Mouse.move(00, -1);

lti1 вне форума   Ответить с цитированием
Старый 14.08.2017, 07:24   #96
jonikus81
Старший Пользователь
 
Аватар для jonikus81
 
Регистрация: 07.09.2015
Возраст: 43
Город: Алматы
Регион: Казахстан
Машина: MMC DELICA 94 (булка)
Сообщений: 209
jonikus81 is a jewel in the roughjonikus81 is a jewel in the roughjonikus81 is a jewel in the roughjonikus81 is a jewel in the rough
По умолчанию

мой косяк, в привате отдал рабочий скетч, а сюда не выложил
jonikus81 вне форума   Ответить с цитированием
Старый 27.10.2020, 01:23   #97
palexsa
Новый Пользователь
 
Регистрация: 06.05.2017
Возраст: 49
Город: киев
Регион: Украина
Машина: трибека b9
Сообщений: 5
palexsa is on a distinguished road
По умолчанию

Скетч приведенный уважаемым lti1 работает только если резистивные кнопки притянуты к плюсу. У меня была схема с подтяжкой к земле. #define release_button приравнивал к нулю - энкодер работает, а кнопки нет. Скетч в посте #307 работает с обоими вариантами схемы.
palexsa вне форума   Ответить с цитированием
Ответ


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

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

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



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


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