Sari la conținut
ELFORUM - Forumul electronistilor

Telecomanda IR cu arduino LED-uri


gabitzu2006

Postări Recomandate

multumesc mult pentru ajutor!

noapte buna!

 

LE: am schimbat pinul digital (acum am conectat relay6 la pinul 13) si merge f bine. Ramane sa imi dau seama cum imi dau seama ca un buton a fost depresat  :)  prima directie e sa caut protocolul NEC.

 

#include <IRremote.h>
int RECV_PIN = 2; // the pin where you connect the output pin of sensor
int relay1 = 4;
int relay2 = 5;
int relay3 = 6;
int relay4 = 7;
int relay5 = 8;
int relay6 = 13;
int relayPins[] = {relay1, relay2, relay3, relay4, relay5, relay6};  //array with all the relays' pins
int relayStates[] = {0,0,0,0,0,0}; //the initial state of relays
int i=0;  //relay index for the arrays

#define code1 16753245    // code received from button no. 1
#define code2 16736925    // code received from button no. 2
#define code3 16769565    // code received from button no. 3
#define code4 16720605    // code received from button no. 4
#define code5 16712445    // code pt 5
#define code6 16718055    // cod pt up
#define code7 16730805    // cod pt down
#define code8 16726215    // cod pt on/off

IRrecv irrecv(RECV_PIN);
decode_results results;

void setup() {
  Serial.begin(115200);
  irrecv.enableIRIn(); // Start the receiver  
  for(int i = 0; i < 5; i++){
     pinMode(relayPins[i], OUTPUT);
  }
}


void loop() {
  static int idx = -1; //index iesire

  if (irrecv.decode(&results)) {
    unsigned int value = results.value;
    switch(value) {
       case code1: 
              idx = 0; //prima iesire, 
              relayStates[idx] ^= 1; //inverseaza starea
           break;
       case code2: 
              idx = 1; 
              relayStates[idx] ^= 1; 
           break;
       case code3: 
              idx = 2; 
              relayStates[idx] ^= 1; 
           break;
       case code4: 
              idx = 3; 
              relayStates[idx] ^= 1; 
           break;
       case code5: 
              idx = 4; 
              relayStates[idx] ^= 1; 
           break;
       case code6: //up 
              idx++; // selecteaza urmatoarea iesire
              idx %=5; //daca e 5, ia-o de la capat
              relayStates[idx] = 1; //fa iesirea 1
           break;
       case code7: //down
              idx--; //selecteaza iesirea precedenta
              if(idx < 0){ //daca e negativa, iao pe cea mai mare
                idx=4;
              }
              relayStates[idx] = 1; //fa iesirea 1
           break;
       case code8:
        relayStates[5] ^= 1;
        digitalWrite(relay6, relayStates[5]);
       break;
       //default : idx = -1;
    }


    for(int i = 0; i < 5; i++){ // modifica iesirea in functie de testele anterioare.
      if(i == idx){
        digitalWrite(relayPins[i], relayStates[i]);
      } else {
        digitalWrite(relayPins[i], LOW);
      }
    }

    irrecv.resume(); // Receive the next value
  } //if (irrecv.decode(&results))

} //loop()

 

Editat de gabitzu2006
update
Link spre comentariu
  • Răspunsuri 58
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

A command is transmitted only once, even when the key on the remote control remains pressed. Every 110ms a repeat code is transmitted for as long as the key remains down. This repeat code is simply a 9ms AGC pulse followed by a 2.25ms space and a 560µs burst.

NEC Sequence

cred ca de aici trebuie plecat. daca poate ajuta cineva, ca sa nu reinventam apa calda, i-as fi recunoscator.

 

 

se pare ca nu e asa de bine sa folosesc pinul 13, pentru ca la orice restart sau pornire, acesta va clipi. ar trebui sa modific codul bootloaderului ca sa nu mai clipeasca la pornire. totusi nu inteleg de ce folosind orice alt pin digital pt ledul 6, acesta lumineaza foarte slab.

 

pentru problema cu detectarea momentului cand butonul este depresat, cred ca ar trebui verificat periodic ca exista acel mesaj de repeat, cel cu codul 429... cand acel mesaj nu mai apare o perioada de timp, sa zicem 110ms, se dezactiveaza respectivul pin digital. nu stiu cum sa transpun asta in cod, insa.

 

 

am rezolvat problema cu pinul pentru led6(de fapt, e relay6). Pinul respectiv nu fusese declarat ca output. acum am mutat pe pin 12 si l-am declarat ca iesire si functioneaza fara probleme. Mai lucrez la partea cu sfarsitul apasarii de buton...

atasez noul sketch:

#include <IRremote.h>
int RECV_PIN = 2; // the pin where you connect the output pin of sensor
int relay1 = 4;
int relay2 = 5;
int relay3 = 6;
int relay4 = 7;
int relay5 = 8;
int relay6 = 12;
int relayPins[] = {relay1, relay2, relay3, relay4, relay5, relay6};  //array with all the relays' pins
int relayStates[] = {0,0,0,0,0,0}; //the initial state of relays
int i=0;  //relay index for the arrays

#define code1 16753245    // code received from button no. 1
#define code2 16736925    // code received from button no. 2
#define code3 16769565    // code received from button no. 3
#define code4 16720605    // code received from button no. 4
#define code5 16712445    // code pt 5
#define code6 16718055    // cod pt up
#define code7 16730805    // cod pt down
#define code8 16726215    // cod pt on/off

IRrecv irrecv(RECV_PIN);
decode_results results;

void setup() {
  Serial.begin(115200);
  irrecv.enableIRIn(); // Start the receiver  
  for(int i = 0; i < 5; i++){
     pinMode(relayPins[i], OUTPUT);
     pinMode(12, OUTPUT);
  }
}


void loop() {
  static int idx = -1; //index iesire

  if (irrecv.decode(&results)) {
    unsigned int value = results.value;
    switch(value) {
       case code1: 
              idx = 0; //prima iesire, 
              relayStates[idx] ^= 1; //inverseaza starea
           break;
       case code2: 
              idx = 1; 
              relayStates[idx] ^= 1; 
           break;
       case code3: 
              idx = 2; 
              relayStates[idx] ^= 1; 
           break;
       case code4: 
              idx = 3; 
              relayStates[idx] ^= 1; 
           break;
       case code5: 
              idx = 4; 
              relayStates[idx] ^= 1; 
           break;
       case code6: //up 
              idx++; // selecteaza urmatoarea iesire
              idx %=5; //daca e 5, ia-o de la capat
              relayStates[idx] = 1; //fa iesirea 1
           break;
       case code7: //down
              idx--; //selecteaza iesirea precedenta
              if(idx < 0){ //daca e negativa, iao pe cea mai mare
                idx=4;
              }
              relayStates[idx] = 1; //fa iesirea 1
           break;
       case code8:
        relayStates[5] ^= 1;
        digitalWrite(relay6, relayStates[5]);
       break;
       //default : idx = -1;
    }


    for(int i = 0; i < 5; i++){ // modifica iesirea in functie de testele anterioare.
      if(i == idx){
        digitalWrite(relayPins[i], relayStates[i]);
      } else {
        digitalWrite(relayPins[i], LOW);
      }
    }

    irrecv.resume(); // Receive the next value
  } //if (irrecv.decode(&results))

} //loop()

LLLE

am gasit ceva aici pt detectarea depresarii butonului, dar habar nu am cum sa adaptez la sketchul meu. pun link aici, poate cineva isi da seama ce si cum:  https://forum.arduino.cc/index.php?topic=612249.0

Editat de gabitzu2006
update
Link spre comentariu

Ai mai jos un cod care s-ar putea sa detecteze tasta (ne)apasata. Inlocuieste code9 cu unul valid. Codul de pornire e unul mai vechi, unele din tastele tale nu mai merg.

 #include <IRremote.h>

#define NR_TOTAL_IESIRI 5
#define NR_IESIRI_UP_DOWN 4
int RECV_PIN = 2; // the pin where you connect the output pin of sensor
int relay1 = 4;
int relay2 = 5;
int relay3 = 6;
int relay4 = 7;
int relay9 = 9;  //releu acticat cat butonul 9 e apasat
int idxRel9 = 4;
int relayPins[] = {relay1, relay2, relay3, relay4, relay9};  //array with all the relays' pins
int relayStates[] = {0,0,0,0,0}; //the initial state of relays
int i=0;  //relay index for the arrays

int iRepeatCounter = 0;

#define code1 16753245    // code received from button no. 1
#define code2 16736925    // code received from button no. 2
#define code3 16769565    // code received from button no. 3
#define code4 16720605    // code received from button no. 4
#define code5 16718055    // cod pt up
#define code6 16730805    // cod pt down
#define code9 99999999    // cod noua


IRrecv irrecv(RECV_PIN);
decode_results results;

bool bRecRepeat = false;

void setup() {
  Serial.begin(115200);
  irrecv.enableIRIn(); // Start the receiver  
  for(int i = 0; i < NR_TOTAL_IESIRI; i++){
     pinMode(relayPins[i], OUTPUT);
  }
}


void loop() {
  static int idx = -1; //index iesire

  if (irrecv.decode(&results)) {
    unsigned int value = results.value;

    iRepeatCounter = millis();          
    switch(value) {
       case code1: 
              idx = 0; //prima iesire, 
              relayStates[idx] ^= 1; //inverseaza starea
              relayStates[idxRel9] = LOW;
              bRecRepeat = false;
           break;
       case code2: 
              idx = 1; 
              relayStates[idx] ^= 1; 
              relayStates[idxRel9] = LOW;
              bRecRepeat = false;
           break;
       case code3: 
              idx = 2; 
              relayStates[idx] ^= 1; 
              relayStates[idxRel9] = LOW;
              bRecRepeat = false;
           break;
       case code4: 
              idx = 3; 
              relayStates[idx] ^= 1; 
              relayStates[idxRel9] = LOW;
              bRecRepeat = false;
           break;
       case code5: //up 
              idx++; // selecteaza urmatoarea iesire
              idx %= NR_IESIRI_UP_DOWN; //daca e 4, ia-o de la capat
              relayStates[idx] = 1; //fa iesirea 1
              relayStates[idxRel9] = LOW;
              bRecRepeat = false;
           break;
       case code6: //down
              idx--; //selecteaza iesirea precedenta
              if(idx < 0){ //daca e negativa, ia-o pe cea mai mare
                idx = NR_IESIRI_UP_DOWN - 1;
              }
              relayStates[idx] = 1; //fa iesirea 1
              relayStates[idxRel9] = LOW;
              bRecRepeat = false;
           break;
       case code9: 
              relayStates[idxRel9] = HIGH;
           break;
       case REPEAT : 
              bRecRepeat = true;
           break;
//       default : idx = -1;
    } //switch
    irrecv.resume(); // Receive the next value
  } //if (irrecv.decode(&results))


  for(int i = 0; i < NR_IESIRI_UP_DOWN; i++){ // modifica iesirea in functie de testele anterioare.
    if(i == idx){
      digitalWrite(relayPins[i], relayStates[i]);
    } else {
      digitalWrite(relayPins[i], LOW);
    }
  } //for

  if(relayStates[idxRel9] && bRecRepeat){
    digitalWrite(relayPins[idxRel9], HIGH);
  } else {
    digitalWrite(relayPins[idxRel9], LOW);
  }
    

  if((millis() - iRepeatCounter) > 120){ //mai mult de 120 ms de la ultimul cod receptionat => repeat 
    bRecRepeat = 0;
  }

 

Editat de Liviu M
Link spre comentariu

salutare! acum am reusit sa testez si....

1. in prima faza, cu codul de mai sus, led-ul palpaie la intensitate f mica, cat e apasat butonul stanga si se stinge dupa ce depresez butonul. la fel face si cand apas dreapta (cred ca sesizeaza doar cand se opreste acel cod de repeat).

2. am declarat si pinul 9 ca output. Acum ledul lumineaza normal, nu mai palpaie cat e actionat butonul stanga, insa face la fel si pentru dreapta, desi, ca mai sus, nu am introdus in sketch codul pentru dreapta. Dupa cateva actionari, ledul iarasi palpaie cu intensitate redusa si nu-si mai revine pana nu dau reset. pun codul meu mai jos:

#include <IRremote.h>

#define NR_TOTAL_IESIRI 5
#define NR_IESIRI_UP_DOWN 4
int RECV_PIN = 2; // the pin where you connect the output pin of sensor
int relay1 = 4;
int relay2 = 5;
int relay3 = 6;
int relay4 = 7;
int relay9 = 9;  //releu acticat cat butonul 9 e apasat
int idxRel9 = 4;
int relayPins[] = {relay1, relay2, relay3, relay4, relay9};  //array with all the relays' pins
int relayStates[] = {0,0,0,0,0}; //the initial state of relays
int i=0;  //relay index for the arrays

int iRepeatCounter = 0;

#define code1 16753245    // code received from button no. 1
#define code2 16736925    // code received from button no. 2
#define code3 16769565    // code received from button no. 3
#define code4 16720605    // code received from button no. 4
#define code5 16718055    // cod pt up
#define code6 16730805    // cod pt down
#define code9 16716015    // cod noua


IRrecv irrecv(RECV_PIN);
decode_results results;

bool bRecRepeat = false;

void setup() {
  Serial.begin(115200);
  irrecv.enableIRIn(); // Start the receiver  
  for(int i = 0; i < NR_TOTAL_IESIRI; i++){
     pinMode(relayPins[i], OUTPUT);
     pinMode (9, OUTPUT);
       }
}


void loop() {
  static int idx = -1; //index iesire

  if (irrecv.decode(&results)) {
    unsigned int value = results.value;

    iRepeatCounter = millis();          
    switch(value) {
       case code1: 
              idx = 0; //prima iesire, 
              relayStates[idx] ^= 1; //inverseaza starea
              relayStates[idxRel9] = LOW;
              bRecRepeat = false;
           break;
       case code2: 
              idx = 1; 
              relayStates[idx] ^= 1; 
              relayStates[idxRel9] = LOW;
              bRecRepeat = false;
           break;
       case code3: 
              idx = 2; 
              relayStates[idx] ^= 1; 
              relayStates[idxRel9] = LOW;
              bRecRepeat = false;
           break;
       case code4: 
              idx = 3; 
              relayStates[idx] ^= 1; 
              relayStates[idxRel9] = LOW;
              bRecRepeat = false;
           break;
       case code5: //up 
              idx++; // selecteaza urmatoarea iesire
              idx %= NR_IESIRI_UP_DOWN; //daca e 4, ia-o de la capat
              relayStates[idx] = 1; //fa iesirea 1
              relayStates[idxRel9] = LOW;
              bRecRepeat = false;
           break;
       case code6: //down
              idx--; //selecteaza iesirea precedenta
              if(idx < 0){ //daca e negativa, ia-o pe cea mai mare
                idx = NR_IESIRI_UP_DOWN - 1;
              }
              relayStates[idx] = 1; //fa iesirea 1
              relayStates[idxRel9] = LOW;
              bRecRepeat = false;
           break;
       case code9: 
              relayStates[idxRel9] = HIGH;
           break;
       case REPEAT : 
              bRecRepeat = true;
           break;
//       default : idx = -1;
    } //switch
    irrecv.resume(); // Receive the next value
  } //if (irrecv.decode(&results))


  for(int i = 0; i < NR_IESIRI_UP_DOWN; i++){ // modifica iesirea in functie de testele anterioare.
    if(i == idx){
      digitalWrite(relayPins[i], relayStates[i]);
    } else {
      digitalWrite(relayPins[i], LOW);
    }
  } //for

  if(relayStates[idxRel9] && bRecRepeat){
    digitalWrite(relayPins[idxRel9], HIGH);
  } else {
    digitalWrite(relayPins[idxRel9], LOW);
  }
    

  if((millis() - iRepeatCounter) > 120){ //mai mult de 120 ms de la ultimul cod receptionat => repeat 
    bRecRepeat = 0;
}
}  

LE: de fapt, la pct 2, ledul incepe sa faca figuri dupa ce apas tasta 1, sau 2, sau 3...daca rulez printre cele 4 leduri, cand apas stanga sau dreapta, ledul lumineaza normal.

Editat de gabitzu2006
update
Link spre comentariu

Din ce povestesti, pare sa mearga aproape cum speram. Ce ma deranjeaza e ca nu se initializeaza ultimul pin cum trebuie. Restul e doar "fine tuning".

Mai ai chef sa mai incerci o data?

 

#include <IRremote.h>

#define NR_TOTAL_IESIRI 5
#define NR_IESIRI_UP_DOWN 4
int RECV_PIN = 2; // the pin where you connect the output pin of sensor
int relay1 = 4;
int relay2 = 5;
int relay3 = 6;
int relay4 = 7;
int relay9 = 9;  //releu acticat cat butonul 9 e apasat
int idxRel9 = 4;
int relayPins[] = {relay1, relay2, relay3, relay4, relay9};  //array with all the relays' pins
int relayStates[] = {0,0,0,0,0}; //the initial state of relays

int iRepeatCounter = 0;

#define code1 16753245    // code received from button no. 1
#define code2 16736925    // code received from button no. 2
#define code3 16769565    // code received from button no. 3
#define code4 16720605    // code received from button no. 4
#define code5 16718055    // cod pt up
#define code6 16730805    // cod pt down
#define code9 16716015    // cod noua


IRrecv irrecv(RECV_PIN);
decode_results results;

bool bRecRepeat = false;

void setup() {
  Serial.begin(115200);
  irrecv.enableIRIn(); // Start the receiver  
  for(uint8_t i = 0; i < NR_TOTAL_IESIRI; ++i){
     pinMode(relayPins[i], OUTPUT);
//     pinMode (9, OUTPUT);
     digitalWrite(relayPins[i], LOW);
     
  }

  delay(5);
}


void loop() {
  static int idx = -1; //index iesire

  if (irrecv.decode(&results)) {
    unsigned int value = results.value;

    iRepeatCounter = millis();          
    switch(value) {
       case code1: 
              idx = 0; //prima iesire, 
              relayStates[idx] ^= 1; //inverseaza starea
              bRecRepeat = false;
           break;
       case code2: 
              idx = 1; 
              relayStates[idx] ^= 1; 
              bRecRepeat = false;
           break;
       case code3: 
              idx = 2; 
              relayStates[idx] ^= 1; 
              bRecRepeat = false;
           break;
       case code4: 
              idx = 3; 
              relayStates[idx] ^= 1; 
              bRecRepeat = false;
           break;
       case code5: //up 
              idx++; // selecteaza urmatoarea iesire
              idx %= NR_IESIRI_UP_DOWN; //daca e 4, ia-o de la capat
              relayStates[idx] = 1; //fa iesirea 1
              bRecRepeat = false;
           break;
       case code6: //down
              idx--; //selecteaza iesirea precedenta
              if(idx < 0){ //daca e negativa, ia-o pe cea mai mare
                idx = NR_IESIRI_UP_DOWN - 1;
              }
              relayStates[idx] = 1; //fa iesirea 1
              relayStates[idxRel9] = LOW;
              bRecRepeat = false;
           break;
       case code9: 
              relayStates[idxRel9] = HIGH;
              bRecRepeat = true;
           break;
       case REPEAT : 
              bRecRepeat = true;
           break;
       default : 
              bRecRepeat = false;
    } //switch

    for(int i = 0; i < NR_TOTAL_IESIRI; ++i){ // modifica iesirea in functie de testele anterioare.
      if(i == idx){
        digitalWrite(relayPins[i], relayStates[i]);
      } else {
        digitalWrite(relayPins[i], LOW);
      }
    } //for
    
    irrecv.resume(); // Receive the next value
  } //if (irrecv.decode(&results))

  if(relayStates[idxRel9] && bRecRepeat){
    digitalWrite(relayPins[idxRel9], HIGH);
  } else {
    digitalWrite(relayPins[idxRel9], LOW);
  }
    

  if((millis() - iRepeatCounter) > 120){ //mai mult de 120 ms de la ultimul cod receptionat => repeat 
    bRecRepeat = 0;
  }
}  

 

Link spre comentariu

uitasem sa mentionez ca la sketchul de dinainte, ledul 9 se aprindea cat tineam apasat orice buton, nu doar stanga sau dreapta. la fel si acum, cu diferenta ca acum nu este aproape stins ca inainte, doar ca o data cu rularea prin celelalate 4 leduri, treptat, de la o cursa la alta, intensitea luminii ledului 9 scade iar efectul de palpaire se accentueaza. Cred ca am facut vreo 20 de curse prin cele 4 leduri, iar ledul 9 inca nu s-a stins (ma refer la intensitatea luminoasa). Estimez totusi ca se va stinge dupa mai multe rulari.

Link spre comentariu

vreau sa folosesc acest sa-i zicem proiect, pentru controlul unui amplificator de putere: am zis sa pun 5 relee pentru a comuta intre sursele de semnal, iar cele 2 leduri stanga dreapta vor fi comenzile pentru o punte H, pentru a controla un motor pentru potentiometrul de volum.

asa cum e in stadiul actual, nu ma deranjeaza ca led-ul 9 isi pierde terptat din intensitate, intrucat nu voi rula ca nebunul prin sursele de semnal. Insa faptul ca se aprinde la orice apasare de buton, e o problema.

Stiu ca au mai fost proiecte de telecomanda pentru amplif, cel mai cunoscut fiind proiectul lui danzup, insa fisierele s-au pierdut de-a lungul timpului. Cred ca varianta cu arduino este mai accesibila pentru mai multi electronisti, mai ales pt cei mai putini priceputi in ale programarii, ca mine.

Link spre comentariu

Mai incercam o data?

 

#include <IRremote.h>

#define NR_TOTAL_IESIRI 5
#define NR_IESIRI_UP_DOWN 4
int RECV_PIN = 2; // the pin where you connect the output pin of sensor
int relay1 = 4;
int relay2 = 5;
int relay3 = 6;
int relay4 = 7;
int relay9 = 9;  //releu acticat cat butonul 9 e apasat
int idxRel9 = 4;
int relayPins[] = {relay1, relay2, relay3, relay4, relay9};  //array with all the relays' pins
int relayStates[] = {0,0,0,0,0}; //the initial state of relays

int iRepeatCounter = 0;

#define code1 16753245    // code received from button no. 1
#define code2 16736925    // code received from button no. 2
#define code3 16769565    // code received from button no. 3
#define code4 16720605    // code received from button no. 4
#define code5 16718055    // cod pt up
#define code6 16730805    // cod pt down
#define code9 16716015    // cod noua


IRrecv irrecv(RECV_PIN);
decode_results results;

bool bRecRepeat = false;

void setup() {
  Serial.begin(115200);
  irrecv.enableIRIn(); // Start the receiver  
  for(uint8_t i = 0; i < NR_TOTAL_IESIRI; ++i){
     pinMode(relayPins[i], OUTPUT);
//     pinMode (9, OUTPUT);
     digitalWrite(relayPins[i], LOW);
     
  }

  delay(5);
}


void loop() {
  static int idx = -1; //index iesire

  if (irrecv.decode(&results)) {
    unsigned int value = results.value;

    iRepeatCounter = millis();          
    switch(value) {
       case code1: 
              idx = 0; //prima iesire, 
              relayStates[idx] ^= 1; //inverseaza starea
              bRecRepeat = false;
           break;
       case code2: 
              idx = 1; 
              relayStates[idx] ^= 1; 
              bRecRepeat = false;
           break;
       case code3: 
              idx = 2; 
              relayStates[idx] ^= 1; 
              bRecRepeat = false;
           break;
       case code4: 
              idx = 3; 
              relayStates[idx] ^= 1; 
              bRecRepeat = false;
           break;
       case code5: //up 
              idx++; // selecteaza urmatoarea iesire
              idx %= NR_IESIRI_UP_DOWN; //daca e 4, ia-o de la capat
              relayStates[idx] = 1; //fa iesirea 1
              bRecRepeat = false;
           break;
       case code6: //down
              idx--; //selecteaza iesirea precedenta
              if(idx < 0){ //daca e negativa, ia-o pe cea mai mare
                idx = NR_IESIRI_UP_DOWN - 1;
              }
              relayStates[idx] = 1; //fa iesirea 1
              bRecRepeat = false;
           break;
       case code9: 
              idx = idxRel9;
              relayStates[idx] = HIGH;
              bRecRepeat = true;
           break;
       case REPEAT : 
              bRecRepeat = true;
           break;
       default : 
              bRecRepeat = false;
    } //switch

    for(int i = 0; i < NR_IESIRI_UP_DOWN; ++i){ // modifica iesirea in functie de testele anterioare.
      if(i == idx){
        digitalWrite(relayPins[i], relayStates[i]);
      } else {
        digitalWrite(relayPins[i], LOW);
      }
    } //for
    
    irrecv.resume(); // Receive the next value
  } //if (irrecv.decode(&results))

  if(relayStates[idxRel9] && bRecRepeat){
    digitalWrite(relayPins[idxRel9], HIGH);
  } else {
    digitalWrite(relayPins[idxRel9], LOW);
    relayStates[idxRel9] = LOW;
  }
    
  if((millis() - iRepeatCounter) > 120){ //mai mult de 120 ms de la ultimul cod receptionat => repeat 
    bRecRepeat = 0;
  }
}  

 

Link spre comentariu

acum....la inceput merge binisor: ledul 9 se aprinde cand apas buton stanga si doar stanga. in schimb, daca aprind unul din celelalte leduri, ori apasand direct butonul coresp ledului, ori prin up/down, daca apas buton stanga, imi stinge ledul aprins anterior. dupa cateva ”sicane” din astea, se stinge si led9 si nu mai vrea sa se aprinda.

Link spre comentariu

Da, asa se intampla cand schimb in mai multe locuri fara teste intermediare.

Incearca sa inlocuiesti case-ul pentru codul 9 din

 

       case code9: 
              idx = idxRel9;
              relayStates[idx] = HIGH;
              bRecRepeat = true;

 

In

       case code9: 
              relayStates[idxRel9] = HIGH;
              bRecRepeat = true;
Link spre comentariu

oarecum la fel...adica la inceput merge cum ar trebui, insa dupa cateva rulari prin celalalte leduri, led9 se stinge (de fapt palpaie dar la intensitate f redusa, abia vizibila). Ma gandesc, poate ar trebui acest led9 tratat diferit, fara sa fie in vreo bucla cu celelalte, sau sa share-uiasca parametri cat mai putini cu celelalte. In paralel eu mai caut proiecte de control motor cu arduino si IR, dar pana acum nu am gasit ceva care sa comande motorul intr-un sens doar atat timp cat butonul corespunzator este apasat.

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări