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

PCCar.ru - Ваш автомобильный компьютер (http://pccar.ru/index.php)
-   Вопросы и ответы (http://pccar.ru/forumdisplay.php?f=26)
-   -   Можно ли подключить энкодер магнитолы к контроллеру мышки? (http://pccar.ru/showthread.php?t=18135)

Alex-pet 06.11.2012 20:09

Можно ли подключить энкодер магнитолы к контроллеру мышки?
 
Вложений: 3
Добрый день!
Подскажите, пожалуйста, может кто сталкивался: можно ли подключить поворотный энкодер от магнитолы к контроллеру мышки? Разобрал мышку, там стоит оптический энкодер. В магнитоле всего 2 поворотных энкодера, первый удалось подключить через Ардуино на регулировку громкости, а второй хотелось бы сделать в качестве прокрутки, как колесо прокрутки в мышке. Вот фото энкодера магнитолы и разобранной мышки (успел удалить из мышки оптический приёмник):

Вложение 28401
Вложение 28402
Вложение 28403

Спасибо!

Gorynch 06.11.2012 22:31

Почему второй тоже через адруины не сделать?

К этой мышке не подключишь - энкодер резистивный, а в мышке смещённые оптопары

Alex-pet 06.11.2012 23:01

Вложений: 1
Дело в том, что я не очень дружу с Ардуино и первый я подключил просто залив готовый скетч и посмотрев схему подключения на соседнем форуме. Может, Вы хорошо с ним дружите? Может, подскажете, как правильно подключить второй энкодер к Ардуино? :)

Вот скетч на подключение двух енкодеров (взят с http://www.compcar.ru/forum/showthread.php?p=98884):

PHP код:

#define encoder0PinA  2 
#define encoder0PinB  3
#define encoder0PinC  4
#define encoder1PinA  5
#define encoder1PinB  6
#define encoder1PinC  7
byte bytes[2]={0,7} ;     

void setup()     
{       
  
pinMode(encoder0PinAINPUT);     
  
digitalWrite(encoder0PinAHIGH);     // подключить подтягивающий резистор    
  
pinMode(encoder0PinBINPUT);     
  
digitalWrite(encoder0PinBHIGH);    // подключить подтягивающий резистор   
  
pinMode(encoder0PinCINPUT);     
  
digitalWrite(encoder0PinCHIGH);    // подключить подтягивающий резистор  
  
pinMode(encoder1PinAINPUT);     
  
digitalWrite(encoder1PinAHIGH);    // подключить подтягивающий резистор    
  
pinMode(encoder1PinBINPUT);     
  
digitalWrite(encoder1PinBHIGH);    // подключить подтягивающий резистор  
  
pinMode(encoder1PinCINPUT);     
  
digitalWrite(encoder1PinCHIGH);    // подключить подтягивающий резистор  
    
  
attachInterrupt(0doEncoderAFALLING);  // настроить прерывание interrupt 0 на pin 2    
  
attachInterrupt(1doEncoderBFALLING);  // настроить прерывание interrupt 0 на pin 3    
  
Serial.begin (115200);    
}    

unsigned graydecode(unsigned gray

 
unsigned bin

 for (
bin 0graygray >>= 1
    
bin ^= gray

 return 
bin


void loop()    
{      
 static 
uint8_t tmp_code 0;  
 
uint8_t gray_code digitalRead(encoder1PinA) | (digitalRead(encoder1PinB) << 1), 
  
code graydecode(gray_code); 
 if (
code == 0
 { 
   if (
tmp_code == 3
     { 
       
bytes[0]=9
       
bytes[1]=6;    
      
Serial.writebytes,2);   
      
bytes[0]=0;   
     } else if (
tmp_code == 1
               { 
                  
bytes[0]=9
                 
bytes[1]=7;    
                  
Serial.writebytes,2);   
                  
bytes[0]=0;  
               } 
  } 
 
tmp_code code
 
delay(2); 
 
  if(
digitalRead(encoder0PinC)==LOW)  
   { 
     
bytes[1]=8
      
Serial.writebytes,2);   
      while(
digitalRead(encoder0PinC)==LOW){delay(50);} 
       
bytes[1]=7;  
   }
    if(
digitalRead(encoder1PinC)==LOW)  
   { 
     
bytes[1]=6
      
Serial.writebytes,2);   
      while(
digitalRead(encoder1PinC)==LOW){delay(50);} 
       
bytes[1]=7;  
   }
}    

// обработка прерывания    
void doEncoderA()    
{    
  if(
digitalRead(encoder0PinB)==HIGH){bytes[0]=25;}else{bytes[0]=5;}     
  
Serial.writebytes,2);   
  
bytes[0]=0;  
}      

// обработка прерывания    
void doEncoderB()    
{    
    if(
digitalRead(encoder0PinA)==HIGH){bytes[0]=5;}else{bytes[0]=25;}    
    
Serial.writebytes,2);   
    
bytes[0]=0;    


Понимаю что задействованы контакты 2, 3, 4, 5, 6, 7, но для подключения первого понадобилось 4 контакта.
Первый подключался по такой схеме:

Вложение 28428

И использовался соответствующий скетч, а вот как два подключить не знаю :(

Заранее большое большое спасибо! :)

Alex-pet 06.11.2012 23:26

Или, может кто-нибудь знает в каких мышках стоят резистивные энкодеры, чтобы можно было подключить энкодер от магнитолы?

Gorynch 07.11.2012 10:01

Цитата:

attachInterrupt(0, doEncoderA, FALLING); // настроить прерывание interrupt 0 на pin 2
attachInterrupt(1, doEncoderB, FALLING); // настроить прерывание interrupt 0 на pin 3
это настройка прерываний по спадающему фронту на соответствующих ножках контроллера - к ним подключены две ножки энкодера, на которых напряжения из "1" падает в "0", соответственно прерывание срабатывает от той, на которой раньше это произошло - это определяет направление поворота

Чтобы подключить ещё один энкодер нужно добавить ещё два аналогичных прерывания - с ардуиной не сильно знаком, как сделать сходу не подскажу

первый подключался 3 контактами + земля, поэтому и 4 точки подключения
3 контакта - один на нажатие, два для определения направления поворота

Hamster 07.11.2012 17:36

Цитата:

Сообщение от Gorynch (Сообщение 235726)
Чтобы подключить ещё один энкодер нужно добавить ещё два аналогичных прерывания - с ардуиной не сильно знаком, как сделать сходу не подскажу

Не, не получится. У ардуины только 2 внешних прерывания, которые в этом скетче заняты. Придется цикл городить.

Alex-pet 07.11.2012 18:30

Hamster, а может Вы знаете в каких мышках стоит механический энкодер, подключился бы к контроллеру мышки, мне бы этого хватило. Google ничего конкретного не выдаёт, а вот тут человек сделал примерно то, что мне нужно, осталось подобрать донор.
Спасибо!

Hamster 07.11.2012 18:36

Не, не знаю. И лучше на "ты" :)
Попробуй на компкаре в теме про энкодеры народ поспрашать, у тебя же есть все что нужно для подключения (я про ардуино), надо только скетч поправить.

Alex-pet 07.11.2012 18:47

Договорились :) Я написал автору работающего скетча для двух энкодеров (тот, который несколькими постами выше, он как раз для двух энкодеров). Пока он не ответил, его несколько дней не было уже. Проблема в том что я не знаю как правильно подключить, т.е. к каким контактам подключать второй энкодер.

Alex-pet 08.11.2012 20:19

Ура! Получилось!
Если кому вдруг интересно: контроллер от китайской no name мышки с механическим энкодером на ура подцепился к энкодеру магнитолы и всё заработало! :)


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

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