DUE+encoder+DAC не могу разобраться что делаю не так.

tokima
Offline
Зарегистрирован: 29.08.2015

Здравтвуйте, использую ДУЕ, энкодер и ЦАП. При повороте энкодера значение изменяется на 4 единицы, это устанвки библиотеки энкодера. Мне необходимо увеличить значение, чтобы код изменялся на 24 единицы, вот как я пытаюсь сделать:

#include <UTFT.h>
#include <Encoder.h>
UTFT g = UTFT(CTE32HR, 38, 39, 40, 41);

Encoder myEncL(11, 12);
Encoder myEncR(7, 6);

const int pin_l = DAC0;       // pin DAC0
int newPosition_l = 0;       // начало с 0
const int pin_r = DAC1;       // pin DAC1
int newPosition_r = 0;       // начало с 0

void setup()
{
   analogWriteResolution(12);

 //энкодер
    analogWrite(pin_l, newPosition_l);   // устанавливаем DAC0
    analogWrite(pin_r, newPosition_r);   // устанавливаем DAC1

//Экран
  g.InitLCD();
 }

void loop() {

int newPosition_r = myEncR.read();
 
if(newPosition_r >= 4095){
      newPosition_r = 4095;
      myEncR.write(newPosition_r);               
      }   
      else if(newPosition_r <= 0){
       newPosition_r = 0;
       myEncR.write(newPosition_r);
      }
  int newPos_r = (newPosition_r + 20);   
      analogWrite(pin_r, newPos_r);   // устанавливаем DAC1

g.printNumI( newPos_r, 350, 240, 5);


}


При старте устанавливается 0, затем 20, а вот при повороте энкодера все равно только +4 единицы , двадцать не добавляет. Где косяк? Подскажите пожалуйста.





 

OlegK
OlegK аватар
Offline
Зарегистрирован: 26.11.2014

Потому, что newPosition увеличивается только на свои 4 единицы, к которым вы прибавляете 20.
Т.е. 0+20, 4+20, 8+20, и.т.д. От того и получаете 0, 20, 24, 28...
Нужно в newPosition тоже писать новое значение.

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

А что-то тут неправильно. Например знак равно. Обычно его не ставят.

tokima пишет:
UTFT g = UTFT(CTE32HR, 38, 39, 40, 41);

tokima
Offline
Зарегистрирован: 29.08.2015

Buzzer2010 пишет:

А что-то тут неправильно. Например знак равно. Обычно его не ставят.

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

tokima
Offline
Зарегистрирован: 29.08.2015

OlegK пишет:

Нужно в newPosition тоже писать новое значение.

Спасибо, не подскажите где в самой библиотеке это поменять? Либа скачана отсюда:

https://www.pjrc.com/teensy/td_libs_Encoder.html

OlegK
OlegK аватар
Offline
Зарегистрирован: 26.11.2014

В библу, думается, лучше не стоит лазить ))
Ваш энкодер на один щелчок изменяет значение на 4?
Можно попробовать как-нибудь так -

void loop() {

  int newPosition_r = myEncR.read() >> 2;
  
  if (newPosition_r > 684) {
    newPosition_r = 684; //171 steps
    myEncR.write(newPosition_r);
  }
  else if (newPosition_r < 0) {
    newPosition_r = 0;
    myEncR.write(newPosition_r);
  }

  newPosition_r *= 24;
  analogWrite(pin_r, newPosition_r);
  g.printNumI( newPosition_r, 350, 240, 5);
  
}
vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014

Может так, чтоб не трогать библиотеку

int newPos_r = (newPosition_r /4*24); 

 

OlegK
OlegK аватар
Offline
Зарегистрирован: 26.11.2014

Ну я так выше и предложил..

tokima
Offline
Зарегистрирован: 29.08.2015

vosara пишет:

Может так, 

Спасибо друг, ты гений.. 

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