Изменение нескольких значений одним энкодером
- Войдите на сайт для отправки комментариев
Сб, 29/10/2016 - 11:30
Подскажите пожалуйста новичку, как можно изменять несколькозначений одним энкодером, причем с разным шагом!
Для начала мне нужно создать переменные для этих значений? и переменные для "шагов"?
int MyValue1 = 25; int MyValue1 = 100; int StemMyValue1 = 5; // шаг изменения первой переменной int StepMyValue2 = 20; // шаг изменения второй переменной
Как изменять их энкодером, переключаясь с помощью длиннного клика? Я не прошу готовый код, просто подскажите реализацию! Заранее спасибо!
Ну, во-первых, если Вы не планируете ментяь размеры шагов в процессе работы программы, то добавьте в описание слово const.
А что касается "несколькозначений одним энкодером", напишите, пожалуйста, как Вы меняеет одно. Одно значение Вы умеете менять?
К сожалению, пока не могу с уверенностью сказать, что умею программировать, но уже нашел готовую функцию для обработки энкодера! Вот она:
void doEncoderA(){ if ( rotating ) delay (1); if( digitalRead(encoderPinA) != A_set ) { A_set = !A_set; if ( A_set && !B_set ) encoderPos += stepChangeEncVal; rotating = false; } } void doEncoderB(){ if ( rotating ) delay (1); if( digitalRead(encoderPinB) != B_set ) { B_set = !B_set; if( B_set && !A_set ) encoderPos -= stepChangeEncVal; rotating = false; } }Она ведь мне подойдет? Верно?
Я не знаю, что Вам подойдёт, т.к. не знаю, что Вам нужно. Просто, когда Вы спросили как менять несколько переменных, я думал, что одну-то Вы менять умеете.
Давайте, Вы сначала научитесь менять одну, а там посмотрим.
уже умею! Не думал, что это настолько просто!
нашел готовый скетч:
/* ** Rotary Encoder Example ** Use the Sparkfun Rotary Encoder to vary brightness of LED ** ** Sample the encoder at 200Hz using the millis() function */ int brightness = 120; // how bright the LED is, start at half brightness int fadeAmount = 10; // how many points to fade the LED by unsigned long currentTime; unsigned long loopTime; const int pin_A = 12; // pin 12 const int pin_B = 11; // pin 11 unsigned char encoder_A; unsigned char encoder_B; unsigned char encoder_A_prev=0; void setup() { // declare pin 9 to be an output: pinMode(9, OUTPUT); pinMode(pin_A, INPUT); pinMode(pin_B, INPUT); currentTime = millis(); loopTime = currentTime; } void loop() { // get the current elapsed time currentTime = millis(); if(currentTime >= (loopTime + 5)){ // 5ms since last check of encoder = 200Hz encoder_A = digitalRead(pin_A); // Read encoder pins encoder_B = digitalRead(pin_B); if((!encoder_A) && (encoder_A_prev)){ // A has gone from high to low if(encoder_B) { // B is high so clockwise // increase the brightness, dont go over 255 if(brightness + fadeAmount <= 255) brightness += fadeAmount; } else { // B is low so counter-clockwise // decrease the brightness, dont go below 0 if(brightness - fadeAmount >= 0) brightness -= fadeAmount; } } encoder_A_prev = encoder_A; // Store value of A for next time // set the brightness of pin 9: analogWrite(9, brightness); loopTime = currentTime; // Updates loopTime } // Other processing can be done here }уже умею! Не думал, что это настолько просто!
нашел готовый скетч:
Вот и я говорю . Быть программистом просто. Главное найти готовый скетч. Так и Билл Гейц написал Винду. Он просто нашел готовый СКЕТЧ ВИНДЫ.
это значит, что если encoder_A равно 0 (нулю), а encoder_A_prev равно 1!
Разве это условие сработает, если в начале скетча стоит
unsigned char encoder_A_prev=0;
если энкодер вращается то на конце вывода будет это 1-1-1-0-0-0-1-1
а вот на условии -1-0- будет верно условие.
На счет изменения нескольких переменных мне пришла в голову идея просто ввести в скетч несколько дополнительных строк вроде
и т.д. и сделать дополнительную проверку, когда какой флаг поднят, такую переменную и изменять! Переключать, какой флаг включить, можно например длительным нажатием кнопки!
Как Вам такая идея? Или можно как-то проще?
Угу. У энкодера есть кнопка . Вот если нажать и крутить будет изменятся одна переменая. А если отпущена другая. А вот если 3 и более то надо щелкать по этой кнопке. 1 щелчек одна переменая 2 вторая 3 третья 4 снова 1 . А с диным и коротким нажатием это сложновато для вас.