Код реагирует на любой сигнал ИК пульта. Как исправить?

Тема в разделе "Arduino & Shields", создана пользователем De_XXX_ter38, 8 дек 2019.

  1. De_XXX_ter38

    De_XXX_ter38 Нуб

    Здравствуйте, создаю свой проект, основой которого является ИК приёмник.

    Собственно, мною был написан код, благодаря которому сервомотор при определённой зажатой кнопке на пульте, начинал поворачиваться.
    То-есть:
    Зажимаю кнопку - сервомотор вращается;
    Отпускаю - перестаёт вращаться.
    НО! При дальнейших тестах я обнаружил, что мотор вращается по нажатию на любую кнопку на пульте.
    Кое-что убирал, кое-что менял местами, но всё равно результат один - реакция на любую кнопку.

    Прошу помощи. Что не так? Заранее спасибо

    Код (C++):
    #include "IRremote.h"
    #include "Servo.h"

    IRrecv irrecv(2); // указываем вывод, к которому подключен приемник
    decode_results results;
    Servo servo;

    int a = 0;
    int dir = 10;

    void setup() {
      Serial.begin(9600); // выставляем скорость COM порта
      irrecv.enableIRIn(); // запускаем прием
      servo.attach(9);
      servo.write(10);
    }

    void loop() {
      if ( irrecv.decode( &results )) { // если данные пришли
       
        Serial.println( results.value, HEX ); // печатаем данные
        Serial.println(dir);
        if (results.value == 0xFE807F){
          a = 1;
        irrecv.resume();
        }
          if (a = 1){
          servo.write(dir);
          dir += 5;
          }
        irrecv.resume(); // принимаем следующую команду
      }else{
        a = 0;
      }
    if (dir > 90){
      dir = 90;
    }
    }
     
  2. Asper Daffy

    Asper Daffy Иксперд

    Вот это
    означает вовсе не то, на что ты рассчитываешь. Гугли "операции сравнения в С++"
     
    Andrey12, DetSimen и Daniil нравится это.
  3. Airbus

    Airbus Радиохулиган Модератор

    if(а==1); a if(a=1); всегда истина потому как присвоение 1 переменной а.
     
    De_XXX_ter38 и issaom нравится это.