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)

ali_vlad 21.10.2015 10:39

Я ошибся. Библиотека encoder называется.

TransF 23.10.2015 17:26

Цитата:

Сообщение от ali_vlad (Сообщение 340990)
Я ошибся. Библиотека encoder называется.

Что-то я такой не нахожу ни где :dntknw:



НАШЕЛ)))
теперь бы как нибудь её изучить, сама библиотека есть теперь, а вот информации по ней, кто-то маловато будет (((

ali_vlad 23.10.2015 18:59

Посмотри ссылки, которые я осталял. Там готовый пример с регулятором громкости и библиотекой энкодер и с пояснениями. С ней вообще всё просто: 3 режима. С аппаратным прерыванием, без прерываний и еще какой-то. На мой взгляд, лучше без прерываний.

ali_vlad 23.10.2015 20:33

Забыл самое главное. Библиотека remote. Она всем рулит. А bounce, encoder это для избавления дребезга контактов.

defed 24.10.2015 17:55

Привет.Подскажите, может знает кто нибудь. Залил скетч на ардуино pro micro управление звуком энкодером,все отлично работает. Но если запуск pipo x8 идет с данным регулятором то при включении он не работает пока не отключишь и подключишь его обратно. Может есть способ программно побороть это без задержки включения 5 вольт на usb?

ali_vlad 24.10.2015 20:14

defed, мне кажется тебе с этой проблемой обратиться на ардуиновский форум. Там программистов больше чем здесь, а значит и вероятность получить решение проблемы больше.

TransF 22.11.2015 18:34

Эпопея продолжается...
теперь есть всё необходимое для рулевого управления,
пишу скетч для правой (пока) чести управления

по отдельности 2 счетча работают
1 для кнопок
PHP код:

int analogPin=0;
int data;

void setup()
{
  
Keyboard.begin();
  
Serial.begin(9600);
}

void loop()
{
  
data=analogRead(analogPin); //читаем значение нажатой кнопки
  
Serial.println(data); //для определения кодов нажатых кнопок на мониторе порта
  /*поддерживаемые коды управляющих клавиш
  http://arduino.cc/en/Reference/KeyboardModifiers*/

  
if (data>=28 && data<=35)  // приглушение звука
    
{
      
Remote.mute();
      
Remote.clear();
    }
  if (
data>=58 && data<=65)  // воспроизведение / пауза
    
{
      
Remote.play_pause();
      
Remote.clear();
    }
  
delay(100);


2-й для энекодера громкости от lti1

а вот вместе они дружить не хотят ((((
что я могу не так соединять?
PHP код:

//Скетч регулятора громкости на энкодере для Arduino PRO MICRO 
// энкодер на 8 и 9 пинах  выводы подтянуты к питанию, 
// конденсаторы на землю желательно. 
//кнопка энкодера на 7 ноге, притянута к + программно. конденсатор желательно. 
int analogPin=0;
int data;
void setup() {             
PCICR=1<<PCIE0
PCMSK0=(1<<PCINT5)|(1<<PCINT4); 
pinMode (7,INPUT_PULLUP); 
pinMode (8,INPUT); 
pinMode (9,INPUT); 
attachInterrupt(4key_muteFALLING); 
Keyboard.begin(); 
Serial.begin(9600);

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_nnew_n

  
void key_mute() {         
        
Remote.mute();  
        
delay(10);  
        
Remote.clear();}  
        {
  
data=analogRead(analogPin); //читаем значение нажатой кнопки
  
Serial.println(data); //для определения кодов нажатых кнопок на мониторе порта
  /*поддерживаемые коды управляющих клавиш
  http://arduino.cc/en/Reference/KeyboardModifiers*/
  
if (data==614)  Keyboard.write(176); //ENTER
  
if (data==122)  Keyboard.write(216); //стрелка влево
  
if (data==165)  Keyboard.write(215); //стрелка вправо
  
if (data==216)  Keyboard.write(218); //стрелка вверх
  
if (data==276)  Keyboard.write(217); //стрелка вниз
  
if (data>=38 && data<=35)  // приглушение звука
    
{
      
Remote.mute();
      
Remote.clear();
    }
  if (
data>=58 && data<=65)  // воспроизведение / пауза
    
{
      
Remote.play_pause();
      
Remote.clear();
    }
  
delay(100);


выдает вот такую ошибку
sketch_encoder:37: error: expected unqualified-id before '{' token

lti1 22.11.2015 19:39

TransF, ну наверное потому, что в loop добавлять нужно, чтиво.
PHP код:

int analogPin=0;
int data;
void setup() {             
PCICR=1<<PCIE0
PCMSK0=(1<<PCINT5)|(1<<PCINT4); 
pinMode (7,INPUT_PULLUP); 
pinMode (8,INPUT); 
pinMode (9,INPUT); 
attachInterrupt(4key_muteFALLING); 
Keyboard.begin(); 
Serial.begin(9600);

void loop() {
 
data=analogRead(analogPin); //читаем значение нажатой кнопки
  
Serial.println(data); //для определения кодов нажатых кнопок на мониторе порта
  /*поддерживаемые коды управляющих клавиш
  http://arduino.cc/en/Reference/KeyboardModifiers*/
  
if (data==614)  Keyboard.write(176); //ENTER
  
if (data==122)  Keyboard.write(216); //стрелка влево
  
if (data==165)  Keyboard.write(215); //стрелка вправо
  
if (data==216)  Keyboard.write(218); //стрелка вверх
  
if (data==276)  Keyboard.write(217); //стрелка вниз
  
if (data>=38 && data<=35)  // приглушение звука
    
{
      
Remote.mute();
      
Remote.clear();
    }
  if (
data>=58 && data<=65)  // воспроизведение / пауза
    
{
      
Remote.play_pause();
      
Remote.clear();
    }

  
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_nnew_n

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

И зачем delay(100); в конце цикла?
P.S.
Это не мой скетч, я его только подправил.

TransF 22.11.2015 23:59

Цитата:

Сообщение от lti1 (Сообщение 344412)
P.S.
Это не мой скетч, я его только подправил.

Прошу прощения исправлюсь :blush:

И еще спасибо за чтиво, пока только читаю кучу теории и не совсем понимаю для чего какая команда,скорее даже пытаюсь повторить что делают другие :be:

Опытным путем выяснено что дэлэй для энкодера в показателе 100 исключает дребезг контактов (вместо 10 в оригинальном скетче)
Верхний дэлэй пришлось вернуть, так как только с его помощью исключил дребезг в кнопках мьют и плэй/пауза

на данном этапе скетч выглядит вот так
Код:

int analogPin=0;
int data;
void setup() {           
PCICR=1< PCMSK0=(1< pinMode (8,INPUT);
pinMode (9,INPUT);
Keyboard.begin();
Serial.begin(9600);
}
void loop() {
 data=analogRead(analogPin); //читаем значение нажатой кнопки
  Serial.println(data); //для определения кодов нажатых кнопок на мониторе порта
  /*поддерживаемые коды управляющих клавиш
  http://arduino.cc/en/Reference/KeyboardModifiers*/
  if (data>=28 && data<=35)  // приглушение звука
    {
      Remote.mute();
      Remote.clear();
    }
  if (data>=58 && data<=65)  // воспроизведение / пауза
    {
      Remote.play_pause();
      Remote.clear();
    }
  delay(180);
}
 
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(100); 
        Remote.clear();}
old_n= new_n;
}

Может быть криво написано но работает. т.к. мои энкодеры без нажимных кнопок, удалил из части энкодера мьют

начал работу над левый частью, по особо не получается, мучаюсь с альт+табом

TransF 25.11.2015 02:02

Помогите пожалуйста люди добрые, где-то скосячил не пойму где

Код HTML:

int analogPin=0;
int data;
unsigned long flag = 0; 
unsigned long eventTime = 0; 
unsigned long pauseMillis = 0;
void setup() {           
PCICR=1<<PCIE0;
PCMSK0=(1<<PCINT5)|(1<<PCINT4);
pinMode (8,INPUT);
pinMode (9,INPUT);
Keyboard.begin();
Serial.begin(9600);
}
void loop() {
 data=analogRead(analogPin); //читаем значение нажатой кнопки
  Serial.println(data); //для определения кодов нажатых кнопок на мониторе порта


             
if (data>
=28 && data<=35)  // альт+таб
  {
flag = 1;
  }
  {
Keyboard.press(KEY_LEFT_ALT); 
Keyboard.press(KEY_TAB); 
Keyboard.release(KEY_TAB); 
Keyboard.press(KEY_TAB); 
Keyboard.release(KEY_TAB); 
flag = 0; 
pauseMillis = millis();
}
// что-то
if (data>
=58 && data<=65)  // воспроизведение / пауза
{
  Remote.play_pause();
  Remote.clear();
  delay(180);}
 
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.next(); 
        delay(10); 
        Remote.clear();}
if (old_n==16&&new_n==48||old_n==32&&new_n==0) {
        Remote.previous();
        delay(100); 
        Remote.clear();}
old_n= new_n;
}

выходят ошибки
Код HTML:

sketch_nov24a.ino: In function 'void loop()':
sketch_nov24a:40: error: expected unqualified-id before string constant
sketch_nov24a:41: error: a function-definition is not allowed here before '{' token
sketch_nov24a:53: error: expected `}' at end of input

я так понял первая потянула за собой остальной клубок


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

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