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)

lti1 03.12.2015 01:26

Цитата:

Сообщение от TransF (Сообщение 345332)
Помогите пожалуйста, дописать кусок скетча для переключения треков.

Второй энкодер подключается к D10 и D16, так же с резисторами и конденсаторами:
PHP код:

void setup() {             
PCICR=1<<PCIE0
PCMSK0=(1<<PCINT5)|(1<<PCINT4)|(1<<PCINT2)|(1<<PCINT6); 
pinMode (9,INPUT); 
pinMode (8,INPUT);
pinMode (16,INPUT);
pinMode (10,INPUT);
Keyboard.begin(); 

void loop() {


ISR (PCINT0_vect){ 
static 
byte old_n=PINB&B01110100
byte new_n=PINB&B01110100

if ((
old_n B00110000) == 32 && (new_n B00110000) == 48 || (old_n B00110000) == 16 && (new_n B00110000) == 0) { 
        
Remote.increase();    
        
Remote.clear();
      } 
if ((
old_n B00110000) == 16 && (new_n B00110000) == 48 || (old_n B00110000) == 32 && (new_n B00110000) == 0) { 
        
Remote.decrease();   
        
Remote.clear();
      } 
        
if ((
old_n B01000100) == 64 && (new_n B01000100) == 68 || (old_n B01000100) == && (new_n B01000100) == 0) { 
        
Remote.next();   
        
Remote.clear();
      } 
if ((
old_n B01000100) == && (new_n B01000100) == 68 || (old_n B01000100) == 64 && (new_n B01000100) == 0) { 
        
Remote.previous();  
        
Remote.clear();
      }
        
old_nnew_n



TransF 05.12.2015 15:45

Цитата:

Сообщение от lti1 (Сообщение 345338)
Второй энкодер подключается к D10 и D16, так же с резисторами и конденсаторами:
PHP код:

int analogPin=0;
int data;

void setup() {             
PCICR=1<<PCIE0
PCMSK0=(1<<PCINT5)|(1<<PCINT4)|(1<<PCINT2)|(1<<PCINT6); 
pinMode (9,INPUT); 
pinMode (8,INPUT);
pinMode (16,INPUT);
pinMode (10,INPUT);
Keyboard.begin(); 

void loop() {


ISR (PCINT0_vect){ 
static 
byte old_n=PINB&B01110100
byte new_n=PINB&B01110100

if ((
old_n B00110000) == 32 && (new_n B00110000) == 48 || (old_n B00110000) == 16 && (new_n B00110000) == 0) { 
        
Remote.increase();    
        
Remote.clear();
      } 
if ((
old_n B00110000) == 16 && (new_n B00110000) == 48 || (old_n B00110000) == 32 && (new_n B00110000) == 0) { 
        
Remote.decrease();   
        
Remote.clear();
      } 
        
if ((
old_n B01000100) == 64 && (new_n B01000100) == 68 || (old_n B01000100) == && (new_n B01000100) == 0) { 
        
Remote.next();   
        
Remote.clear();
      } 
if ((
old_n B01000100) == && (new_n B01000100) == 68 || (old_n B01000100) == 64 && (new_n B01000100) == 0) { 
        
Remote.previous();  
        
Remote.clear();
      }
        
old_nnew_n



Спасибо огромнейшее, теперь всё ровно и четко.

А не подскажете принцип вот этой строчки
if ((old_n & B01000100) == 4 && (new_n & B01000100) == 68 || (old_n & B01000100) == 64 && (new_n & B01000100) == 0) {
для собственного понимания?

TransF 05.12.2015 16:03

Закончил, на компе всё работает, на телефоне тоже.
иду проверять на планшете в машине)
Последняя версия скетча:blush:

Код HTML:

int analogPin=0;
int data;
void setup() {           
PCICR=1<<PCIE0;
PCMSK0=(1<<PCINT5)|(1<<PCINT4)|(1<<PCINT2)|(1<<PCINT6);
pinMode (9,INPUT);
pinMode (8,INPUT);
pinMode (16,INPUT);
pinMode (10,INPUT);
Keyboard.begin();
Serial.begin(9600);
}
void loop() {
    data=analogRead(analogPin); //читаем значение нажатой кнопки
    Serial.println(data); //для определения кодов нажатых кнопок на мониторе порта
if (data>
=28 && data<=35)  // приглушение звука
    {
      Remote.play_pause();
      Remote.clear();
    }
if (data>
=58 && data<=65)  // воспроизведение / пауза
    {
      Remote.mute();
      Remote.clear();
    }
  delay(100);
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)  // спать
    {
      Remote.power();
      Remote.clear();
    }
}
ISR (PCINT0_vect){
static byte old_n=PINB&B01110100;
byte new_n=PINB&B01110100;

if ((old_n & B00110000) == 32 && (new_n & B00110000) == 48 || (old_n & B00110000) == 16 && (new_n & B00110000) == 0) {
        Remote.increase();   
        Remote.clear();
      }
if ((old_n & B00110000) == 16 && (new_n & B00110000) == 48 || (old_n & B00110000) == 32 && (new_n & B00110000) == 0) {
        Remote.decrease(); 
        Remote.clear();
      }
       
if ((old_n & B01000100) == 64 && (new_n & B01000100) == 68 || (old_n & B01000100) == 4 && (new_n & B01000100) == 0) {
        Remote.previous(); 
        Remote.clear();
      }
if ((old_n & B01000100) == 4 && (new_n & B01000100) == 68 || (old_n & B01000100) == 64 && (new_n & B01000100) == 0) {
        Remote.next(); 
        Remote.clear();
      }
       
old_n= new_n;
}

ОГРОМНОЕ спасибо всем кто помог мне в этой совсем не простой (для меня) задаче)

lti1 05.12.2015 16:15

Цитата:

Сообщение от TransF (Сообщение 345479)
Спасибо огромнейшее, теперь всё ровно и четко.

А не подскажете принцип вот этой строчки
if ((old_n & B01000100) == 4 && (new_n & B01000100) == 68 || (old_n & B01000100) == 64 && (new_n & B01000100) == 0) {
для собственного понимания?

Так как оба энкодера пишутся в одну переменную, сравнение производится с применением битовой маски. Нагляднее будет так:
PHP код:

if ((old_n B01000100) == B00000100 && (new_n B01000100) == B01000100 || 
    (
old_n B01000100) == B01000000 && (new_n B01000100) == B00000000


TransF 05.12.2015 16:22

Проверяю на nexus-e,
Альт\таб - переключает между собой только последние 2 приложения
Мьют - вообще не работает( планшет думает что мьют включают на входящие звонки, во время воспроизведения звук не глушит как на компьютере (((
Рано радоваться(((
Цитата:

Сообщение от lti1 (Сообщение 345483)
Так как оба энкодера пишутся в одну переменную, сравнение производится с применением битовой маски. Нагляднее будет так:
PHP код:

if ((old_n B01000100) == B00000100 && (new_n B01000100) == B01000100 || 
    (
old_n B01000100) == B01000000 && (new_n B01000100) == B00000000


Спасибо за информацию. Чесно говоря ничего не понял.

lti1 05.12.2015 16:39

Цитата:

Сообщение от TransF (Сообщение 345484)
Проверяю на nexus-e,
Альт\таб - переключает между собой только последние 2 приложения
Мьют - вообще не работает( планшет думает что мьют включают на входящие звонки, во время воспроизведения звук не глушит как на компьютере (((
Рано радоваться(((

Спасибо за информацию. Чесно говоря ничего не понял.

Про Alt+Tab я же вам в личку писал, то что Вы сделали нормально работать не будет.

~aviator~ 26.02.2016 16:27

темка еще жива?
на панели компа есть энкодер с кнопкой и еще 2 кнопки
поможет ли мне этот скетч и схема в реализации задачи по регулирвки громкости например+ выкл/вкл звука и еще 2 кнопки например по переходу трека вперед/назад

TransF 27.02.2016 10:05

Цитата:

Сообщение от ~aviator~ (Сообщение 352915)
темка еще жива?
на панели компа есть энкодер с кнопкой и еще 2 кнопки
поможет ли мне этот скетч и схема в реализации задачи по регулирвки громкости например+ выкл/вкл звука и еще 2 кнопки например по переходу трека вперед/назад

Да поможет, но может там уже какое то устройство есть, чтобы не изобретать велосипед?

~aviator~ 28.02.2016 00:25

есть но дорого для меня пока

TransF 28.02.2016 00:27

Цитата:

Сообщение от ~aviator~ (Сообщение 353043)
есть но дорого для меня пока

Если устройство уже есть, ведь энкодер есть, значит просто нужно заставить работать.


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

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