Re: Управление при помощи поворотного энкодера (Rotary Encoder)
очень странно, решил попробовать проверить второй энкодер, код такой:
PHP код:
#define encoder0PinA 5
#define encoder0PinB 6
#define encoder0PinC 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); // подключить подтягивающий резистор
attachInterrupt(0, doEncoderA, FALLING); // настроить прерывание interrupt 0 на pin 2
attachInterrupt(1, doEncoderB, FALLING); // настроить прерывание interrupt 0 на pin 3
Serial.begin (115200);
}
void loop()
{
if(digitalRead(encoder0PinC)==LOW)
{
bytes[1]=8;
Serial.write( bytes,2);
while(digitalRead(encoder0PinC)==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;
}
Работает только кнопка :(
Re: Управление при помощи поворотного энкодера (Rotary Encoder)
Методом проб остановился на таком скетче.
Первый энкодер работает как надо, у второго отсутствует вращение+нажатие.
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(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;
}
Re: Управление при помощи поворотного энкодера (Rotary Encoder)
chip подскажи что может влиять губительно на считывание энкодера?
Когда энкодер впаиваю в плату - периодическинаглухо отказывается читать его, или шлет мусор как будто контакт где-то плохой. Хотя подпаян прям к ножкам без дорожек, общая тока масса разведена.(на платке еще кнопки резистивные есть. с ними масса общая)
если же энкодер напрямую цеплять на провода, изолируя от платы, то считывается отлично. К плате с ардуиной плата энкодера подключена шлейфом от hdd
Re: Управление при помощи поворотного энкодера (Rotary Encoder)
вопрос к чипу. в начале темы написано примерно так "выпаял колесо от мыши и припаял к адруино"
а нельзя мышь целиком было использовать что бы не тратить плату ардуино?
Re: Управление при помощи поворотного энкодера (Rotary Encoder)
Я это делал для того что бы попробовать, проверить и выложить для других, под рукой энкодера не было вот и выпаял из неисправной старой мышки.
С таким подходом можно было бы написать здесь "Для чего этот форум, есть же еще форумы? "
Re: Управление при помощи поворотного энкодера (Rotary Encoder)
зачем всё в штыки принимать. просто было не ясно вот и спросил. ведь по идее можно использовать мышь целиком не расходуя плат правильно? Вопрос в следующем, можно ли использовать две мышки - два енкодера? что бы виндовс определял их разными? одну на громкость другую на радио поставить? я в послеке живу. мышь маленькую купить рублей за 200-300 проблем не возникнет, в отличии от андруино. енкодеры у меня есть. вот кстати прочтите пожалуйста тему
http://www.compcar.ru/forum/showthre...0768#post90768
вопрос про радио тебе адресовал, т.к. у тебя есть тема про радио из магнитол
Re: Управление при помощи поворотного энкодера (Rotary Encoder)
вопрос к знающим людям. запустил енкодер, все работает. но иногда либо зависает на одном месте положение звука (смотрю по микшеру) и пока паузу не выждешь так и будет на одном месте дергатся. либо значение в хоткей прыгает с нужных 1817 1797 до 6 тысяч и до 1243. поставил конденсаторы с маркировкой 104 и 103. может в них дело? какие в идеале нужно поставить подскажите пожалуйста, токо не в микрофаратах а для чайника - в таких же цифрах на кондерах. Еще вопрос, плата с которой снял енкодер, от два дин магнитолы, в принципе енкодер там идет через конденсаторы так же как и у чипа в схеме, но они smd и совсем не подписные, маленькие желтенькие. подключил вчера к ногам енкодера не снимая с платы (думал что эти конденсаторы пойдут) запустил монитор, в нем постоянно бегут цифры, значения сейчас не помню, может ли это происходить из за того что енкодер подключен в плате к микросхемам? и подойдут ли smd конденсаторы которые стоят на плате? если необходима фотография я ее сделаю.
Сегодня просто озадачился вчерашним фиаско - подумал что возможно надо было просто перерезать дороги идущие от енкодера к микросхеме.
Re: Управление при помощи поворотного энкодера (Rotary Encoder)
Re: Управление при помощи поворотного энкодера (Rotary Encoder)
перерезал дорожки. заработал енкодер с теми маленькими что там стоят :)
Re: Управление при помощи поворотного энкодера (Rotary Encoder)
Тема старая, но сейчас стала актуальна. Подключил 1 энкодер, всё работает, спасибо! Но вот с подключением второго пока не очень. Можно попросить кого-нибудь выложить схему подключения двух энкодеров? Заранее благодарю! :)