Что означает строка в коде

Marshma11ovv
Offline
Зарегистрирован: 23.03.2018


#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);
  };

 

 

 

gal
Offline
Зарегистрирован: 08.06.2018
  if (irrecv.decode(&results)) // have we received an IR signal?

 

andryn
Offline
Зарегистрирован: 08.06.2018

Marshma11ovv пишет:

Что в этом коде означает строка if (irrecv.decode(&results))? 

irrecv.decode(&results) возвращает указатель на результат декодирования или 0, если ничего не декодировано.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Marshma11ovv, а что означает третья строка во втором скетче?

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Marshma11ovv пишет:

Почему результат проверки условия ложный?

Потому, что в строке №3 написан бред сивой кобылы. Твоя строка №3 полностью эквивалента такой:

switch (HEX){

И что ты точно знаешь? Что константы записанные в case равны константе HEX? Все сразу? Или какая-то одна? Какая?

 

Marshma11ovv
Offline
Зарегистрирован: 23.03.2018

Ворота пишет:

И что ты точно знаешь? Что константы записанные в case равны константе HEX? Все сразу? Или какая-то одна? Какая?

Я проверял, какие значения каким кнопкам пульта соответствуют, этой командой выводил:

Serial.println(results.value, HEX);

То есть проблема не в том, что значение полученное приёмником с пульта не совпадает со значением в условии

 

Например, при нажатии кнопки А (0xFFA25D) я хочу выывать функцию showTemp(), пока не будет получено новое значение на датчике

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Внимательно почитай про switch и операцию запятая, потом посмотри на эту строчку

  switch (results.value, HEX){

и подумай. 

Marshma11ovv
Offline
Зарегистрирован: 23.03.2018

andriano пишет:

Marshma11ovv, а что означает третья строка во втором скетче?

Сравнивает results.value в hex со значениями в кейсах. Исправьте, если я не прав

b707
Offline
Зарегистрирован: 26.05.2017

Marshma11ovv пишет:

То есть проблема не в том, что значение полученное приёмником с пульта не совпадает со значением в условии

нет, проблема именно в этом. Условие записано неверно, ни один код с ним никогда не сопадет.

b707
Offline
Зарегистрирован: 26.05.2017

Marshma11ovv пишет:

Сравнивает results.value в hex со значениями в кейсах. Исправьте, если я не прав

не прав

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Marshma11ovv пишет:

andriano пишет:

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);

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Marshma11ovv пишет:

Исправьте, если я не прав

Вам один человек написал

Ворота пишет:
Твоя строка №3 полностью эквивалента такой:

switch (HEX){

Другой человек написал

DetSimen пишет:

Внимательно почитай про switch и операцию запятая, потом посмотри на эту строчку

  switch (results.value, HEX){

и подумай. 

А Вы так и не прочитали ничего про операцию "запятая", не подумали, и не поняли, почему всё именно так, как написал Ворота.

Вот в этом Вы и не правы, что не делаете, что Вам говорят.

Marshma11ovv
Offline
Зарегистрирован: 23.03.2018

Спасибо всем за помощь, у меня всё заработало, извините, если где-то тупил сильно. Тема закрыта