Не меняется переменная "а".
- Войдите на сайт для отправки комментариев
Сб, 06/01/2018 - 20:32
Написал программу для вывода на семисигментный индикатор цифры, соответствующей кнопке на ИК пульте, но возникла проблема: оглашённая переменная "а" не меняет значение при появлении сигнала с приёмника. Помогите пожалуйста. Вот код:
#include "IRremote.h" #define FIRST_SEGMENT_PIN 2 #define SEGMENT_COUNT 7 IRrecv irrecv(A0); // указываем вывод, к которому подключен приемник decode_results results; byte numberSegments[10] = { 0b00111111, 0b00001010, 0b01011101, 0b01011110, 0b01101010, 0b01110110, 0b01110111, 0b00011010, 0b01111111, 0b01111110, }; int a = 0; void setup() { Serial.begin(9600); // выставляем скорость COM порта irrecv.enableIRIn(); // запускаем прием } void loop() { if ( irrecv.decode( &results )) // если данные пришли { Serial.println( results.value, HEX ); // печатаем данные if (results.value == "926D12ED") { a = 0; } if (results.value == "926D629D") { a = 1; } if (results.value == "926D22DD") { a = 2; } if (results.value == "926D40BF") { a = 3; } if (results.value == "926DA25D") { a = 4; } if (results.value == "926DE01F") { a = 5; } if (results.value == "926D609F") { a = 6; } if (results.value == "926DD22D") { a = 7; } if (results.value == "926D52AD") { a = 8; } if (results.value == "926DA05F") { a = 9; } Serial.println( a ); irrecv.resume(); } // определяем число, которое собираемся отображать int number = a; // получаем код, в котором зашифрована арабская цифра int mask = numberSegments[number]; for (int i = 0; i < SEGMENT_COUNT; ++i) { // для каждого из 7 сегментов индикатора // определяем: должен ли он быть включён // считываем бит (англ. read bit), соответствующий текущему // сегменту «i». Истина — он установлен (1), ложь — нет (0) boolean enableSegment = bitRead(mask, i); // включаем/выключаем сегмент на основе полученного значения digitalWrite(i + FIRST_SEGMENT_PIN, enableSegment); } }
А с чего ей меняться? Ни одно из условий в строках 28-55 никогда не бывает истинным, потому код под if никогда не исполняется.
Извините, я новичёк, и не очень в этом разбираюсь. Можете подсказать как сделать чтоб при получении сигнала "926D629D" переменной "а" присваивалось значение "1"?
Ответьте на два вопроса, чтобы я мог понять что именно Вам посоветовать
1. Какого типа переменная results.value?
2. Что означает (и зачем Вы написали) слово HEX в строке 26?
Не совсем понимаю суть первого вопроса, но на второй могу ответить:
слово "HEX" я использовал для того, чтоб результат выводился в шестнадцатиричной системе, а не в десятиричной.
Первый вопрос очень простой. Что такое results.value? Число? Строка? Символ? Структура? Что это?
В данном случае переменная results.value представляет собой шестнадцатиричный код, который отправляет ИК приёмник при получении соответствующего сигнала который генерируется при нажатии кнопки на пульте, например для единицы - 926D629D.
Нет, так не пойдёт. Просто откройте текст библиотеки и посмотрите как она описана. char, int, long, String или ещё как.
Если Вы не знаете с каким именно объектом Вы работаете, Вы не можете с ним работать.
Ага! Так значит это длинное беззнаковое целое! То бишь число!
Так какого хрена Вы его со строками сравниваете?
Сравнивайте с числами. Просто запишите эти Ваши значение как числа, а не как строки. Попробуйте, скажите что получится.
То же самое
видимо Евгений хочет сказать, что ваша results.value не является строковой переменной, а вы сравниваете её со строковой константой (т.е. значение заключили в кавычки). Короче уберите кавычки и поставьте 0х перед кодом кнопки пульта
вместо
нужно это
эм опоздал чутка
К сожалению, эти изменения кода не дали положительного результата.
26 строка что в сериал выводит ?
Огромное всем спасибо, я забыл убрать кавычки, теперь всё работает!
К сожалению, эти изменения кода не дали положительного результата.
Знаете, Вы бы сначала показали какие "эти". Код выкладывайте.
Огромное всем спасибо, я забыл убрать кавычки, теперь всё работает!
Оххххх :)
Извините, первый раз спрашиваю, в следующий раз учту.
и сразу, чтоб не расслабляться, почитайте
http://easy-code.ru/lesson/switch-case-cpp
Спасибо, сейчас почитаю
К стати, тут нужно закрывать темы?