Просмотр полной версии : Можно ли подключить энкодер магнитолы к контроллеру мышки?
Alex-pet
06.11.2012, 20:09
Добрый день!
Подскажите, пожалуйста, может кто сталкивался: можно ли подключить поворотный энкодер от магнитолы к контроллеру мышки? Разобрал мышку, там стоит оптический энкодер. В магнитоле всего 2 поворотных энкодера, первый удалось подключить через Ардуино на регулировку громкости, а второй хотелось бы сделать в качестве прокрутки, как колесо прокрутки в мышке. Вот фото энкодера магнитолы и разобранной мышки (успел удалить из мышки оптический приёмник):
28401
28402
28403
Спасибо!
Почему второй тоже через адруины не сделать?
К этой мышке не подключишь - энкодер резистивный, а в мышке смещённые оптопары
Alex-pet
06.11.2012, 23:01
Дело в том, что я не очень дружу с Ардуино и первый я подключил просто залив готовый скетч и посмотрев схему подключения на соседнем форуме. Может, Вы хорошо с ним дружите? Может, подскажете, как правильно подключить второй энкодер к Ардуино? :)
Вот скетч на подключение двух енкодеров (взят с http://www.compcar.ru/forum/showthread.php?p=98884):
#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(encoder0PinA, INPUT);
digitalWrite(encoder0PinA, HIGH); // подключить подтягивающий резистор
pinMode(encoder0PinB, INPUT);
digitalWrite(encoder0PinB, HIGH); // подключить подтягивающий резистор
pinMode(encoder0PinC, INPUT);
digitalWrite(encoder0PinC, HIGH); // подключить подтягивающий резистор
pinMode(encoder1PinA, INPUT);
digitalWrite(encoder1PinA, HIGH); // подключить подтягивающий резистор
pinMode(encoder1PinB, INPUT);
digitalWrite(encoder1PinB, HIGH); // подключить подтягивающий резистор
pinMode(encoder1PinC, INPUT);
digitalWrite(encoder1PinC, HIGH); // подключить подтягивающий резистор
attachInterrupt(0, doEncoderA, FALLING); // настроить прерывание interrupt 0 на pin 2
attachInterrupt(1, doEncoderB, FALLING); // настроить прерывание interrupt 0 на pin 3
Serial.begin (115200);
}
unsigned graydecode(unsigned gray)
{
unsigned bin;
for (bin = 0; gray; gray >>= 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.write( bytes,2);
bytes[0]=0;
} else if (tmp_code == 1)
{
bytes[0]=9;
bytes[1]=7;
Serial.write( bytes,2);
bytes[0]=0;
}
}
tmp_code = code;
delay(2);
if(digitalRead(encoder0PinC)==LOW)
{
bytes[1]=8;
Serial.write( bytes,2);
while(digitalRead(encoder0PinC)==LOW){delay(50);}
bytes[1]=7;
}
if(digitalRead(encoder1PinC)==LOW)
{
bytes[1]=6;
Serial.write( bytes,2);
while(digitalRead(encoder1PinC)==LOW){delay(50);}
bytes[1]=7;
}
}
// обработка прерывания
void doEncoderA()
{
if(digitalRead(encoder0PinB)==HIGH){bytes[0]=25;}else{bytes[0]=5;}
Serial.write( bytes,2);
bytes[0]=0;
}
// обработка прерывания
void doEncoderB()
{
if(digitalRead(encoder0PinA)==HIGH){bytes[0]=5;}else{bytes[0]=25;}
Serial.write( bytes,2);
bytes[0]=0;
}
Понимаю что задействованы контакты 2, 3, 4, 5, 6, 7, но для подключения первого понадобилось 4 контакта.
Первый подключался по такой схеме:
28428
И использовался соответствующий скетч, а вот как два подключить не знаю :(
Заранее большое большое спасибо! :)
Alex-pet
06.11.2012, 23:26
Или, может кто-нибудь знает в каких мышках стоят резистивные энкодеры, чтобы можно было подключить энкодер от магнитолы?
attachInterrupt(0, doEncoderA, FALLING); // настроить прерывание interrupt 0 на pin 2
attachInterrupt(1, doEncoderB, FALLING); // настроить прерывание interrupt 0 на pin 3
это настройка прерываний по спадающему фронту на соответствующих ножках контроллера - к ним подключены две ножки энкодера, на которых напряжения из "1" падает в "0", соответственно прерывание срабатывает от той, на которой раньше это произошло - это определяет направление поворота
Чтобы подключить ещё один энкодер нужно добавить ещё два аналогичных прерывания - с ардуиной не сильно знаком, как сделать сходу не подскажу
первый подключался 3 контактами + земля, поэтому и 4 точки подключения
3 контакта - один на нажатие, два для определения направления поворота
Чтобы подключить ещё один энкодер нужно добавить ещё два аналогичных прерывания - с ардуиной не сильно знаком, как сделать сходу не подскажу
Не, не получится. У ардуины только 2 внешних прерывания, которые в этом скетче заняты. Придется цикл городить.
Alex-pet
07.11.2012, 18:30
Hamster, а может Вы знаете в каких мышках стоит механический энкодер, подключился бы к контроллеру мышки, мне бы этого хватило. Google ничего конкретного не выдаёт, а вот тут (http://www.mp3car.com/input-devices/134029-griffin-powermate-converted-to-send-mouse-wheel.html) человек сделал примерно то, что мне нужно, осталось подобрать донор.
Спасибо!
Не, не знаю. И лучше на "ты" :)
Попробуй на компкаре в теме про энкодеры народ поспрашать, у тебя же есть все что нужно для подключения (я про ардуино), надо только скетч поправить.
Alex-pet
07.11.2012, 18:47
Договорились :) Я написал автору работающего скетча для двух энкодеров (тот, который несколькими постами выше, он как раз для двух энкодеров). Пока он не ответил, его несколько дней не было уже. Проблема в том что я не знаю как правильно подключить, т.е. к каким контактам подключать второй энкодер.
Alex-pet
08.11.2012, 20:19
Ура! Получилось!
Если кому вдруг интересно: контроллер от китайской no name мышки с механическим энкодером на ура подцепился к энкодеру магнитолы и всё заработало! :)
Ура! Получилось!
Если кому вдруг интересно: контроллер от китайской no name мышки с механическим энкодером на ура подцепился к энкодеру магнитолы и всё заработало! :)
Конечно интересно!!! Поделись инфой, что да как...и фото желательно =)
Alex-pet
11.11.2012, 00:17
Всё очень просто: на барахолке купил вот такую (http://www.ebay.com/itm/Tomtop-USB-Car-Mouse-Shape-Wired-Optical-Cool-3D-Mice-Laptop-PC-Computer-/190612394433?_trksid=p5197.m1992&_trkparms=aid%3D111000%26algo%3DREC.CURRENT%26ao%3 D1%26asc%3D14%26meid%3D3367516817100436612%26pid%3 D100015%26prg%3D1006%26rk%3D1%26sd%3D190612394433% 26) китайскую мышку, там стоит механический энкодер на колесо прокрутки, выпаял его, припаял проводочками энкодер, который в магнитоле стоит (3 контакта и там, и там, припаиваются соответственно) и всё, теперь второй энкодер работает как колесо прокрутки, удобно листать списки песен, страницы в браузере, увеличивать/уменьшать масштаб карты. Можно также использовать как регулятор громкости, есть програмка Volumouse (http://www.nirsoft.net/utils/volumouse.html) для этого.
Работает на vBulletin® версия 3.8.4. Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot