[Решено] Не могу назначить переменной значение с пульа ду.

Тема в разделе "Arduino & Shields", создана пользователем olegoriy, 18 сен 2015.

  1. olegoriy

    olegoriy Гик

    Добрый вечер.
    Нужна помощь.
    Задача такова: При удержании кнопки на плате и нажатии кнопки на пульте ду - код кнопки записывается в переменную для последущего использования.
    Вот с этим и проблема.
    Кусок кода:
    Код (C++):
    if (irrecv.decode(&results)&& digitalRead(Knopka1) == 0) {
        code1 = results.value;
        Serial.println(results.value);
        Serial.println(code1);
        digitalWrite(Rele1,HIGH);
        delay(200);
        digitalWrite(Rele1,LOW);
        delay(200);
        Serial.println(code1);
        digitalWrite(Rele1,HIGH);
        delay(200);
        digitalWrite(Rele1,LOW);
        delay(200);
        digitalWrite(Rele1,HIGH);
        delay(200);
        digitalWrite(Rele1,LOW);
        delay(200);
        irrecv.resume();
      }
    При нажатии выше упомянутых кнопок монитор порта выдает:
    33441975
    -1
    -1
    Или:
    33441975
    -16321
    -16321
    То есть results.value выводит правильно, а code1 присваивает какую ту ерунду.
    Буду рад любой помощи!!
     
  2. Unixon

    Unixon Оракул Модератор

    Где и как объявлены переменные results и code1 ?
     
  3. olegoriy

    olegoriy Гик

    вот весь код
    Код (C++):
    int ik = 2;
    int Rele1 = 3;
    int Rele2 = 4;
    int Rele3 = 5;
    int Knopka1 = 9;
    int Knopka2 = 10;
    int Knopka3 = 11;
    int on1 = 0;
    int on2 = 0;
    int on3 = 0;
    int code1 = 1;
    int code2 = 1;
    int code3 = 1;
    #include <IRremote.h>
    IRrecv irrecv(ik);
    decode_results results;
    unsigned long last = millis();

    void setup() {
      pinMode(Rele1,OUTPUT);
      pinMode(Rele2,OUTPUT);
      pinMode(Rele3,OUTPUT);
      pinMode(Knopka1,INPUT_PULLUP);
      pinMode(Knopka2,INPUT_PULLUP);
      pinMode(Knopka3,INPUT_PULLUP);
      irrecv.enableIRIn();
      Serial.begin(9600);
     



    }

    void loop() {
      if (irrecv.decode(&results)) {
       
       if (results.value == code1) {
          on1 = !on1;
          digitalWrite(Rele1, on1 ? HIGH : LOW);
          }
       if (results.value == code2) {
          on2 = !on2;
          digitalWrite(Rele2, on2 ? HIGH : LOW);
         }
       if (results.value == code3) {
          on3 = !on3;
          digitalWrite(Rele3, on3 ? HIGH : LOW);
          }
        irrecv.resume();    
       
      }
     
      if (irrecv.decode(&results)&& digitalRead(Knopka1) == 0) {
        code1 = results.value;
        Serial.println(results.value);
        Serial.println(code1);
        digitalWrite(Rele1,HIGH);
        delay(200);
        digitalWrite(Rele1,LOW);
        delay(200);
        Serial.println(code1);
        digitalWrite(Rele1,HIGH);
        delay(200);
        digitalWrite(Rele1,LOW);
        delay(200);
        digitalWrite(Rele1,HIGH);
        delay(200);
        digitalWrite(Rele1,LOW);
        delay(200);
        irrecv.resume();
      }
     
  4. Unixon

    Unixon Оракул Модератор

    results.value это unsigned long, а вы присваиваете к int, вот и прет всякий мусор.
     
    olegoriy нравится это.
  5. olegoriy

    olegoriy Гик

    Спасибо разобрался.))