Не меняется переменная "а".
- Войдите на сайт для отправки комментариев
Сб, 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
Спасибо, сейчас почитаю
К стати, тут нужно закрывать темы?