Сохранение значения одним кликом
У меня есть поворотный энкодер и 2 кнопки для a. Сохраните значение энкодера b. Сбросьте значение энкодера на 0. Кнопки сброса работают нормально, проблема связана с кнопкой установки/сохранения. Где значение меняется и без нажатия кнопки. Любая помощь приветствуется.
int encoderPin1 = 2;
int encoderPin2 = 3;
volatile int lastEncoded = 0;
volatile double encoderValue = 0;
long lastencoderValue = 0;
int lastMSB = 0;
int lastLSB = 0;
// кнопки
int resetPin = 43;
int settPin = 22;
int val = 0;
int val2 = 0;
//сброс-установка
double setValue = 0.0;
double resetValue = 0.0;
void setup() {
Serial.begin (9600);
pinMode(encoderPin1, INPUT);
pinMode(encoderPin2, INPUT);
digitalWrite(encoderPin1, HIGH);
digitalWrite(encoderPin2, HIGH);
attachInterrupt(0, updateEncoder, CHANGE);
attachInterrupt(1, updateEncoder, CHANGE);
//кнопки
pinMode(resetPin, INPUT);
pinMode(settPin, INPUT);
pinMode(LED_BUILTIN, OUTPUT);
}
void loop(){
//Serial.println(encoderValue); //Распечатать
delay(1000);
//
val = digitalRead(settPin);
if (val == HIGH){
set();
digitalWrite(LED_BUILTIN, HIGH);
}
/*val2 = digitalRead(resetPin);
if (val2 == HIGH){
//перезагрузить
encoderValue = resetValue;
Serial.println(encoderValue);
Serial.print("reset");
delay(100);
}*/
}
void set(){
// устанавливаем значение
setValue = encoderValue;
Serial.println(setValue);
Serial.print("setValue");
delay(100);
}
void updateEncoder(){
int MSB = digitalRead(encoderPin1);
int LSB = digitalRead(encoderPin2);
int encoded = (MSB << 1) |LSB;
int sum = (lastEncoded << 2) | encoded;
if(sum == 0b1101 || sum == 0b0100 || sum == 0b0010 || sum == 0b1011) encoderValue ++;
if(sum == 0b1110 || sum == 0b0111 || sum == 0b0001 || sum == 0b1000) encoderValue --;
lastEncoded = encoded;
}
@Kashish Sharma, 👍1
Обсуждение1 ответ
▲ 1
Спасибо за ваше предложение. Проблема не в коде, а в кнопке. Я поменял кнопку и все заработало. Спасибо за помощь!
,
@Kashish Sharma
Смотрите также:
- Считывание нескольких поворотных энкодеров
- Выводы прерываний Arduino Mega 2560 и отображение портов с помощью поворотного энкодера
- Взаимодействие с датчиком SSI?
- Наилучший метод проектирования схемы с 20 кнопками
- Возникла проблема с переобъявлением символа другого типа
- Несколько кнопок для управления реле
- Как выбрать входной контакт 600 кГц, разделить его на 4 и сгенерировать низкочастотный сигнал на выходном контакте Arduino
- Нужна помощь в создании кода, который перемещает двигатель постоянного тока CW или CCW с помощью двух разных кнопок
в чем проблема с вашим кодом? ... вы получаете ошибки?, @jsotola
Используете ли вы внешние подтягивающие резисторы?, @chrisl
энкодер не требует прерывания на обоих сигнальных контактах ... разрешить прерывание при подъеме (или опускании) на одном сигнальном контакте ... состояние другого контакта во время прерывания указывает направление вращения, @jsotola