Помогите написать простой код.

SuperTesto
Offline
Зарегистрирован: 10.06.2016

Нужно сделать так, чтобы при первом нажатии на кнопку диод включался, а при повторном нажатии выключался.

#include "IRremote.h"
IRrecv irrecv(2); // указываем вывод, к которому подключен приемник
decode_results results;

#define r 11
#define g 10
#define b 9

void setup() {
  irrecv.enableIRIn(); // запускаем прием
  Serial.begin(9600);
  pinMode(r, OUTPUT);
  pinMode(g, OUTPUT);
  pinMode(b, OUTPUT);
}

void loop() {
  if ( irrecv.decode( &results )) { // если данные пришли
    Serial.println( results.value, HEX );
    
    if (results.value == 0xDAEA83EC || results.value == 0xBF702887 || results.value == 0xB3A56E15 || results.value == 0x8E57DA3D || results.value == 0x324F8E29 || results.value == 0xA1063983 || results.value == 0x802F1877) 
    {
      digitalWrite(r, HIGH);
    }
    
   
    irrecv.resume(); // принимаем следующую команду
  }
}

 

SuperTesto
Offline
Зарегистрирован: 10.06.2016

Много значений results.value потому что пульт по какой-то причине через раз скидывает разные значения.

SuperTesto
Offline
Зарегистрирован: 10.06.2016

Спасибо всем за помощь!!! Очень помогли!!! 

OlegM
Offline
Зарегистрирован: 14.06.2016

для этого нужно сделать флаг переключатель, тип так.

if (
     results.value == 0xDAEA83EC  ||
     results.value == 0xBF702887  || 
     results.value == 0xB3A56E15  || 
     results.value == 0x8E57DA3D  ||
     results.value == 0x324F8E29  ||
     results.value == 0xA1063983  ||
     results.value == 0x802F1877  &&
     flag          == true) 
    {
      flag = false;
      digitalWrite(r, HIGH);
    } else if (
     results.value == 0xDAEA83EC  ||
     results.value == 0xBF702887  || 
     results.value == 0xB3A56E15  || 
     results.value == 0x8E57DA3D  ||
     results.value == 0x324F8E29  ||
     results.value == 0xA1063983  ||
     results.value == 0x802F1877  &&
     flag          == false) 
    {
      flag = true;
      digitalWrite(r, LOW);
    }

 

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

SuperTesto пишет:

Спасибо всем за помощь!!! Очень помогли!!! 

Да не за что, заходите ещё.

SuperTesto
Offline
Зарегистрирован: 10.06.2016

OlegM пишет:

для этого нужно сделать флаг переключатель, тип так.

if (
     results.value == 0xDAEA83EC  ||
     results.value == 0xBF702887  || 
     results.value == 0xB3A56E15  || 
     results.value == 0x8E57DA3D  ||
     results.value == 0x324F8E29  ||
     results.value == 0xA1063983  ||
     results.value == 0x802F1877  &&
     flag          == true) 
    {
      flag = false;
      digitalWrite(r, HIGH);
    } else if (
     results.value == 0xDAEA83EC  ||
     results.value == 0xBF702887  || 
     results.value == 0xB3A56E15  || 
     results.value == 0x8E57DA3D  ||
     results.value == 0x324F8E29  ||
     results.value == 0xA1063983  ||
     results.value == 0x802F1877  &&
     flag          == false) 
    {
      flag = true;
      digitalWrite(r, LOW);
    }

 

Оооо, вот этого я и ждал. Спасибо огромное, только с пультом или с ик датчиком проблемы. Потому что разные значения с одной кнопки постоянно приходят и из-за этого всё работает через раз. Вот скриншот даже сделал.