Блокировка\разблокировка ввода\отображения данных с пульта
- Войдите на сайт для отправки комментариев
Пнд, 23/05/2022 - 19:25
Доброго времени, нуждаюсь в помощи (новичок).
О работе: Ардуина выводит цифры нажатые на пульте, (загрузка анимация, дальше мигает центральная ламель екрана, при получении цифри выводит на дисплей цифру, при нажатии на ноль мигает центральная ламель.)
Задача: Как сделать блокировку вывода последующей цифри. Нажал Например 1, на дисплее цифра отобразилась и все последующие не отображает до нажатия на ноль. Заранее благодарю
#define FIRST_SEGMENT_PIN 2 #define SEGMENT_COUNT 8 byte numberSegments[10] = { // Всего цифр 10, поэтому в массиве 10 чисел. // 0b01110111, 0b00000000, 0b00010100, 0b10110011, 0b10110110, 0b11010100, 0b11100110, 0b11100111, 0b00110100, 0b11110111, 0b11110110, }; #include <IRremote.h> int irPin = 10; IRrecv irReciver(irPin); // указываем вывод, к которому подключён приёмник decode_results results; int number =0; int d=50; // задержка между отрисовкой каждого сегмента, в миллисекундах void setup() { for (int i = 0; i < SEGMENT_COUNT; ++i) pinMode(i + FIRST_SEGMENT_PIN, OUTPUT); irReciver.enableIRIn(); // запускаем приём pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(5, OUTPUT); // Анимация for (byte i=1; i<=3; i++) { digitalWrite(8, HIGH); delay(d); digitalWrite(8, LOW); delay(d); digitalWrite(2, HIGH); delay(d); digitalWrite(2, LOW); delay(d); digitalWrite(3, HIGH); delay(d); digitalWrite(3, LOW); delay(d); digitalWrite(4, HIGH); delay(d); digitalWrite(4, LOW); delay(d); digitalWrite(6, HIGH); delay(d); digitalWrite(6, LOW); delay(d); digitalWrite(7, HIGH); delay(d); digitalWrite(7, LOW); delay(d); digitalWrite(3, HIGH); delay(d); digitalWrite(3, LOW); delay(d); digitalWrite(9, HIGH); delay(d); digitalWrite(9, LOW); delay(d); digitalWrite(7, HIGH); delay(d); digitalWrite(7, LOW); delay(d); } } // определяем значение нажатой клавиши void decodeIR() { switch (results.value) { case 0xFF9867: number=0; break; case 0xFFA25D: number=1; break; case 0xFF629D: number=2; break; case 0xFFE21D: number=3; break; case 0xFF22DD: number=4; break; case 0xFF02FD: number=5; break; case 0xFFC23D: number=6; break; case 0xFFE01F: number=7; break; case 0xFFA857: number=8; break; case 0xFF906F: number=9; break; } } void loop(){ //если получен 0 моргать палкою if (number<1) { digitalWrite(9, HIGH); delay(200); digitalWrite(9, LOW); delay(200); } if (irReciver.decode(&results)) { // если данные пришли decodeIR(); // расшифровываем данные irReciver.resume(); // принимаем следующую команду int mask = numberSegments[number]; // получаем код из массива, в котором содержится полученная цифра for (int i = 0; i < SEGMENT_COUNT; ++i) { // для каждого из 7 сегментов индикатора boolean enableSegment = bitRead(mask, i); // определяем: должен ли он быть включён. digitalWrite(i + FIRST_SEGMENT_PIN, enableSegment); // включаем/выключаем сегмент на основе полученного значения } } }
разве это не решит проблему
Завести переменную-флаг, определяющую, можно ли выводить цифры на экран.
Изначально флаг в состоянии "разрешено". Один раз пришел номер - выполнили строчки 134-138, показали его на экране, установили флаг в положение "запрет". Пока не придет ноль - флаг не меняем, цифры не показываем. Как пришел ноль - флаг снова сбрасываем.
разве это не решит проблему
нет
Благодарю буду сейчас поискать как ето делать)
Завести переменную-флаг, определяющую, можно ли выводить цифры на экран.
Изначально флаг в состоянии "разрешено". Один раз пришел номер - выполнили строчки 134-138, показали его на экране, установили флаг в положение "запрет". Пока не придет ноль - флаг не меняем, цифры не показываем. Как пришел ноль - флаг снова сбрасываем.
Как я понял ето должно быть связано с типом данных — boolean ?
Как я понял ето должно быть связано с типом данных — boolean ?
можно и так
Как я понял ето должно быть связано с типом данных — boolean ?
можно и так
вроде все заработало!))))
Один вопрос, связан с пультом, у меня данные приходят только в момент нажатия на клавишу, (когда пульт направлен на приёмник) но если зажать кнопку ы направить то результата ноль, Данная проблема излечима?
Один вопрос, связан с пультом, у меня данные приходят только в момент нажатия на клавишу, (когда пульт направлен на приёмник) но если зажать кнопку ы направить то результата ноль, Данная проблема излечима?
Если кратко, то нет.
но если зажать кнопку ы направить то результата ноль, Данная проблема излечима?
Замутите какой нибудь сканер кодов и гляньте что там приходит. Частенько первый код команды один, а код повторов другой.
но если зажать кнопку ы направить то результата ноль, Данная проблема излечима?
Замутите какой нибудь сканер кодов и гляньте что там приходит. Частенько первый код команды один, а код повторов другой.
Доброго дня, если использовать скетч IRrecvDemo, то зажатая клавиша в консоли отображается следующим образом
FF9867
FFFFFFFF
FFFFFFFF
FFFFFFFF
FFFFFFFF
FFFFFFFF
FFFFFFFF
FFFFFFFF
если использовать скетч IRrecvDemo, то зажатая клавиша в консоли отображается следующим образом
FF9867
FFFFFFFF
....
FFFFFFFF
FFFFFFFF
FFFFFFFF
все верно, большинство пультов так и работают - то есть посылают код клавиши только в момент нажатия. а потом шлют код повтора FFFFFFFF или что-то подобное.
Это поведение зашито в прошивке пульта и без замены софта не лечится, о чем я вам и писал выше в ответе #8.
если использовать скетч IRrecvDemo, то зажатая клавиша в консоли отображается следующим образом
FF9867
FFFFFFFF
....
FFFFFFFF
FFFFFFFF
FFFFFFFF
все верно, большинство пультов так и работают - то есть посылают код клавиши только в момент нажатия. а потом шлют код повтора FFFFFFFF или что-то подобное.
Это поведение зашито в прошивке пульта и без замены софта не лечится, о чем я вам и писал выше в ответе #8.
Решил проблему данной библиотекой https://github.com/tremaru/iarduino_IR
Решил проблему данной библиотекой https://github.com/tremaru/iarduino_IR
какую проблему?
Решил проблему данной библиотекой https://github.com/tremaru/iarduino_IR
какую проблему?
Пропусков срабатывания на клавишу пульта (если зажать клавишу)
было
FF9867
FFFFFFFF
FFFFFFFF
FFFFFFFF
FFFFFFFF
FFFFFFFF
FFFFFFFF
FFFFFFFF
стало
FF9867
FF9867
FF9867
FF9867
FF9867
FF9867
FF9867
FF9867
стало
FF9867
FF9867
FF9867
FF9867
FF9867
FF9867
FF9867
FF9867
смешно...