Что означает строка в коде
- Войдите на сайт для отправки комментариев
Ср, 13/06/2018 - 01:42
#include <IRremote.h> // подключаем библиотеку
int ledPin = 13; // светодиод
int reciverPin = 11; // пин, к котрому подключен ИК-приемник
IRrecv irrecv(reciverPin);
decode_results results;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // запуск приемника
pinMode(ledPin, OUTPUT);
}
void loop() {
// постоянно считываем данные с приемника
if (irrecv.decode(&results)) {
// выводим в консольку, что получили, число в 16-ричном виде
Serial.println(results.value, HEX);
// проверяем сигналы - и если это те, что нам нужны, то вкл или выкл светодиод
if(results.value == 0x926DC837) digitalWrite(13, HIGH);
if(results.value == 0x926D48B7) digitalWrite(13, LOW);
irrecv.resume(); // готовы принимать следующий сигнал
}
}
Что в этом коде означает строка if (irrecv.decode(&results))?
Я пытался с помощью switch по нажатию кнопок на пульте запускать функции, но в порт после нажатия любой кнопки выводит default. Почему результат проверки условия ложный? То, что нужным кнопкам соответствуют эти коды я точно знаю.
if (irrecv.decode(&results)){
Serial.println(results.value, HEX);
switch (results.value, HEX){
case 0xFFA25D:
Serial.println("Temp");
while(!(irrecv.decode(&results))){
showTemp(mastemp, temp);
};
break;
case 0xFF629D:
Serial.println("Time");
while(!(irrecv.decode(&results))){
showTime(mastime);
};
break;
case 0xFFE21D:
Serial.println("Hum");
while(!(irrecv.decode(&results))){
showHum(mashum);
};
break;
default:
Serial.println("Default");
}
irrecv.resume();
delay(1000);
};
Что в этом коде означает строка if (irrecv.decode(&results))?
irrecv.decode(&results) возвращает указатель на результат декодирования или 0, если ничего не декодировано.
Marshma11ovv, а что означает третья строка во втором скетче?
Почему результат проверки условия ложный?
Потому, что в строке №3 написан бред сивой кобылы. Твоя строка №3 полностью эквивалента такой:
switch (HEX){И что ты точно знаешь? Что константы записанные в case равны константе HEX? Все сразу? Или какая-то одна? Какая?
И что ты точно знаешь? Что константы записанные в case равны константе HEX? Все сразу? Или какая-то одна? Какая?
Я проверял, какие значения каким кнопкам пульта соответствуют, этой командой выводил:
То есть проблема не в том, что значение полученное приёмником с пульта не совпадает со значением в условии
Например, при нажатии кнопки А (0xFFA25D) я хочу выывать функцию showTemp(), пока не будет получено новое значение на датчике
Внимательно почитай про switch и операцию запятая, потом посмотри на эту строчку
switch(results.value, HEX){и подумай.Marshma11ovv, а что означает третья строка во втором скетче?
Сравнивает results.value в hex со значениями в кейсах. Исправьте, если я не прав
То есть проблема не в том, что значение полученное приёмником с пульта не совпадает со значением в условии
нет, проблема именно в этом. Условие записано неверно, ни один код с ним никогда не сопадет.
Сравнивает results.value в hex со значениями в кейсах. Исправьте, если я не прав
не прав
Marshma11ovv, а что означает третья строка во втором скетче?
Сравнивает results.value в hex со значениями в кейсах. Исправьте, если я не прав
тогда это
if(results.value == 0x926DC837) digitalWrite(13, HIGH); if(results.value == 0x926D48B7) digitalWrite(13, LOW);тоже надо так сравнивать
if(results.value, HEX == 0x926DC837) digitalWrite(13, HIGH); if(results.value, HEX == 0x926D48B7) digitalWrite(13, LOW);Исправьте, если я не прав
Вам один человек написал
switch (HEX){Другой человек написал
Внимательно почитай про switch и операцию запятая, потом посмотри на эту строчку
switch(results.value, HEX){и подумай.А Вы так и не прочитали ничего про операцию "запятая", не подумали, и не поняли, почему всё именно так, как написал Ворота.
Вот в этом Вы и не правы, что не делаете, что Вам говорят.
Спасибо всем за помощь, у меня всё заработало, извините, если где-то тупил сильно. Тема закрыта