Прошу помощи новичку)

oschpareny
Offline
Зарегистрирован: 17.05.2015

Есть скейч управления с пульта ду. Пульт у меня такой что при удержании любой кнопки меняет код кнопки на код удержания (например одно нажатие - 40BDA857 если продолжать держать кнопку то значение меняется на ffffffff) Как мне сделать так чтобы если держишь кнопку то значение ffffffff заменялся первым кодом.

 

#include <IRremote.h>
 
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
 
unsigned long eventTime=0;
 
int timer = 12;
 
int L4 = 4;
int L5 = 5;
int L6 = 6;
int L7 = 7;
int L8 = 8;
 
int a=0;
int b=0;
int sba=0;
int sbb=0;
int sa = 9;
int sb = 10;
 
void setup(){
irrecv.enableIRIn();
 
pinMode(L4, OUTPUT);
pinMode(L5, OUTPUT);
pinMode(L6, OUTPUT);
pinMode(L7, OUTPUT);
pinMode(L8, OUTPUT);
  
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
   
pinMode(sa, INPUT);
pinMode(sb, INPUT);
   
pinMode(timer, OUTPUT);
void loop() {
   
sba = digitalRead(sa);{
if (sba == HIGH) {a=a+1;}
if (a==1){digitalWrite(2, HIGH);} else {digitalWrite(2, LOW); a=0;}
}
sbb = digitalRead(sb);{
if (sbb == HIGH) {b=b+1;}
if (b==1){digitalWrite(3, HIGH);} else {digitalWrite(3, LOW); b=0;}
}
if (digitalRead(RECV_PIN) == LOW)
 
eventTime=millis(),digitalWrite(timer, HIGH);
 
if(millis()-eventTime>100) digitalWrite(timer, LOW)
   
,digitalWrite(L4, LOW),digitalWrite(L5, LOW),digitalWrite(L6, LOW),digitalWrite(L7, LOW),digitalWrite(L8, LOW);
 
if (irrecv.decode(&results)) {
   
if (results.value == 0x40BD48B7 || results.value == 0x40BD48B7 && (digitalRead(timer) == HIGH) )digitalWrite(L4, HIGH);
if (results.value == 0x40BDC837 || results.value == 0x40BDC837 && (digitalRead(timer) == HIGH) )digitalWrite(L5, HIGH);
if (results.value == 0x40BD08F7 || results.value == 0x40BD08F7 && (digitalRead(timer) == HIGH) )digitalWrite(L6, HIGH);
if (results.value == 0x40BD8877 || results.value == 0x40BD8877 && (digitalRead(timer) == HIGH) )digitalWrite(L7, HIGH);
if (results.value == 0x40BD12ED || results.value == 0x40BD12ED && (digitalRead(timer) == HIGH) )digitalWrite(L8, HIGH);
    
if (results.value == 0x40BD28D7) {a=a+1;}
if (results.value == 0x40BDA857) {b=b+1;}
        
if (a==1){digitalWrite(2, HIGH);} else {digitalWrite(2, LOW); a=0;}
if (b==1){digitalWrite(3, HIGH);} else {digitalWrite(3, LOW); b=0;}
       
    { 
delay(50);
}
 
irrecv.resume();
  }
}
maksim
Offline
Зарегистрирован: 12.02.2012

Вставка программного кода в тему/комментарий

....
if (irrecv.decode(&results)) {

  static uint32_t prevvalue = 0;
  if(results.value == 0xFFFFFFFF) results.value = prevvalue;
  else prevvalue = results.value;
  
  if (results.value == 0x40BD48B7 ||  .....

 

oschpareny
Offline
Зарегистрирован: 17.05.2015

Благодарю.