Что именно не выходит?
Что именно не выходит?
АП: кнопочка тоже заработала, но при повороте энкодера в любую сторону кнопка все равно программно жмется.
Значение кнопки: 2048.
Только я понимаю что работает у меня немного кривовато?
Например при быстром и медленном вращении значения разные.
А что показывает монитор вобще все отличается (скетч для монитора я кстати не заливал, использовал из первого поста).
Последний раз редактировалось WhyMax; 21.11.2011 в 03:50.
Короче объясню по другому, проблема такая:
Крутилки работают, по ним вопросов нет, я даже могу назначить разные действия на быстрое и на медленное вращение (4 разных комбинации клавиш).
Теперь что касаемо кнопки:
Назначил действие на кнопку.
Нажимаю - все работает (например плей/пауза в винампе).
Затем начинаю крутить энкодер в любую сторону, у меня увеличивается/уменьшается громкость, а так же при вращении нажимается кнопка плей/пауза!
Вот такая проблема.
Ошибка монтажа, скорее всего на энкодере при прозванивании что то напутал
При прозванивании почему-то все было как надо:
http://www.compcar.ru/forum/showpost...&postcount=120
Я победил свой энкодер, все дело было в 2-х резисторах, которые соединяли 2 контакта на плате, их надо выпаять или перерезать дорожки, идущие к ним:
Все отлично работает!!
Теперь есть целых 5 кнопок:
поворот влево
поворот вправо
нажатие
поворот влево + нажатие
поворот вправо + нажатие
Надо еще заставить работать второй энкодер.
Последний раз редактировалось WhyMax; 22.11.2011 в 02:14.
Про второй энкодер поищи на форуме , я выкладывал пример
В данной теме я нашел только это:
http://www.compcar.ru/forum/showpost...&postcount=383
И еще:
http://www.compcar.ru/forum/showpost...&postcount=102
Оно?
Последний раз редактировалось WhyMax; 22.11.2011 в 02:25.
Вторая ссылка
Пытаюсь по аналогии заставить работать вторую крутилку.
Код получился такой:
У второго энкодера заработала только кнопка, но эта кнопка дублирует кнопку первого энкодера.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
attachInterrupt(0, doEncoder1A, FALLING); // настроить прерывание interrupt 0 на pin 2
attachInterrupt(1, doEncoder1B, 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;
}
if(digitalRead(encoder1PinC)==LOW)
{
bytes[1]=8;
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;
}
// обработка прерывания
void doEncoder1A()
{
if(digitalRead(encoder1PinB)==HIGH){bytes[0]=25;}else{bytes[0]=5;}
Serial.write( bytes,2);
bytes[0]=0;
}
// обработка прерывания
void doEncoder1B()
{
if(digitalRead(encoder1PinA)==HIGH){bytes[0]=5;}else{bytes[0]=25;}
Serial.write( bytes,2);
bytes[0]=0;
}
5, 6 ноги - крутилка, 7 - кнопка.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)