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)

<<МиТяЙ>> 24.09.2015 23:20

Код HTML:

int val;
 int encoder0PinA = 3;
 int encoder0PinB = 4;
 int encoder0PinC = 5;
 int encoder0PinD = 6;
 int encoder0Pos = 0;
 int encoder0PinALast = LOW;
 int encoder0PinCLast = LOW;
 int n = LOW;
 int d = LOW;

 void setup() {
  pinMode (encoder0PinA,INPUT);
  pinMode (encoder0PinB,INPUT);
  pinMode (encoder0PinC,INPUT);
  pinMode (encoder0PinD,INPUT);
  pinMode (8,INPUT_PULLUP);
  attachInterrupt(4, key_mute, FALLING);
  Serial.begin (9600);
 }
 
//  энкодер.1 - обработка звука
 void loop() {
  n = digitalRead(encoder0PinA);
  d = digitalRead(encoder0PinC);
 
  if ((encoder0PinALast == LOW) && (n == HIGH)) {
    if (digitalRead(encoder0PinB) == LOW) {
      Remote.increase(); 
delay(50); 
Remote.clear();
    } else {
        Remote.decrease(); 
delay(50); 
Remote.clear();
    }
    }
  encoder0PinALast = n;
 
//  энкодер.2 - обработка треков
   
  if ((encoder0PinCLast == LOW) && (d == HIGH)) {
    if (digitalRead(encoder0PinD) == LOW) {
      Remote.next(); 
delay(50); 
Remote.clear();
    } else {
        Remote.previous(); 
delay(50); 
Remote.clear();
    }
    }
  encoder0PinCLast = d;
}
   
//  энкодер.2 - обработка нажатия

 void key_mute() {       
        Remote.mute(); 
        delay(100); 
        Remote.clear();}

Подскажите вот такой код для обработки 2 энкодеров можно использовать.

nikopol70 11.10.2015 11:32

Цитата:

Сообщение от TransF (Сообщение 333525)
Уважаемый lti1 прислал мне свой скетч для энекодера

Код HTML:

//Скетч регулятора громкости на энкодере для Arduino PRO MICRO
// энкодер на 8 и 9 пинах  выводы подтянуты к питанию,
// конденсаторы на землю желательно.
//кнопка энкодера на 7 ноге, притянута к + программно. конденсатор желательно.
void setup() {           
PCICR=1< PCMSK0=(1< pinMode (7,INPUT_PULLUP);
pinMode (8,INPUT);
pinMode (9,INPUT);
attachInterrupt(4, key_mute, FALLING);
Keyboard.begin();
}
void loop() { }
 
ISR (PCINT0_vect){
static byte old_n=PINB&B00110000;
byte new_n=PINB&B00110000;
if (old_n==32&&new_n==48||old_n==16&&new_n==0) {
        Remote.increase(); 
        delay(10); 
        Remote.clear();}
if (old_n==16&&new_n==48||old_n==32&&new_n==0) {
        Remote.decrease();
        delay(10); 
        Remote.clear();}
old_n= new_n;
}
 
void key_mute() {       
        Remote.mute(); 
        delay(10); 
        Remote.clear();} 

И он на самом деле шикарный нет ни дребезга ни проскакиваний всё чётко.
Но видимо у меня кривые руки не могу обьеденить скетч для кнопок и энкодера.
Хочу переделать теперь кнопки потому как щелчки не красивые и именно они дают дребезг при нажатии на кнопки хотя новые:sad2:

шаг регулировки 4, а как сделать шаг 1?

lti1 11.10.2015 14:42

Цитата:

Сообщение от nikopol70 (Сообщение 340104)
шаг регулировки 4, а как сделать шаг 1?

Похоже на дребезг контактов, конденсаторы в схеме присутствуют? Если нет попробуйте поставить 100 nF.

nikopol70 11.10.2015 15:07

Цитата:

Сообщение от lti1 (Сообщение 340110)
Похоже на дребезг контактов, конденсаторы в схеме присутствуют? Если нет попробуйте поставить 100 nF.

Нет, не верно поняли, кондеры стоят и регулировка происходит четко. Дребезга нет взагали.
В винде шаг регурировки 4 единицы, т.е. 0-4-8-12... и т.д.

В андроиде тоже все четко, но от мин до макс ползунок проходит за 4-5 щелчков энкодера.

Rage2 11.10.2015 15:15

Цитата:

Сообщение от nikopol70 (Сообщение 340113)

В андроиде тоже все четко, но от мин до макс ползунок проходит за 4-5 щелчков энкодера.

Так значит нужно увеличить количество пунктов уровня громкости в андройд до нужного значения. Xposed в помошь
как пример http://ru.wikihow.com/увеличить-шаги...ойства-Андроид

TransF 19.10.2015 00:24

Вложений: 1
В связи с покупкой нового руля, и ковырянием в куче всякой информации выяснилось что подключить новый руль в машине с его заводским устройством не представится возможным. (единственное поможет замена почти всей проводки в авто)
Родилась идея воткнуть всё рулевое (4 кнопки и 2 энкодера) в ещё одну ардуину.
Вот тут нашёл пример включения 2 энкодеров.
Убрал всё что не относится к рулевому

Может кто посоветует что со скетчем?

ali_vlad 19.10.2015 09:25

Тут уже кучу скетчей выложили, выбирай любой. Но я бы посоветовал использовать не аппаратное прерывание, а библиотеки. Bounce.h для ликвидации дребезга и encoder.h. Описания и примеры в интернете навалом.
Вечером добирусь до компа - выложу пример.

TransF 19.10.2015 09:29

Все скетчи тут выложенные предусматривают подключение 3 пинов к ардуине, а в последнем варианте, всего 2.
В этом и вся сложность(((
Может я конечно совсем чайник, но мы тут и находимся все, чтобы делится опытом...

ali_vlad 19.10.2015 11:15

Ну хоть чуть теорию почитай. Есть аналоговые входы. На них резистивные кнопки вешаются. Есть цифровые входы. Без матчасти тяжело будет.

TransF 19.10.2015 11:44

Ну как всегда ((( повторюсь тем что было написано выше, мы тут для обсуждения того как и что тут реализовывает а не для ликвидации безграмотности.

Прошу прощения за грубость и с учетом Ваших заслуг и умений ali_vlad - Ваша позиция мне сейчас напоминает человека у которого всё есть и ему не хватает только кисточки для "чистки пупка". Можно же ткнуть туда, где есть реальные примеры которые можно переработать под мою идею, а "не возить меня по полу и указывать на мою безграмотность"

Я сравниваю скетчи которые у меня есть из разных примеров, и реально не могу понять алгоритм действий который необходим для реализации моей идеи.

Правый энкодер - горомкость + -
TEL - play+stop
кнопка на правом энкодере - mute

Левый энкодер - треки >> и <<
MODE - Alt+tab
кнопка на левом энкодере - хотелось бы реализовать как яркость экрана в связке с левым энкодером, нажал и покрутил


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

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