Go Down

Topic: Problème en boucle (Read 1 time) previous topic - next topic

voodou

Le fired= false je l'avai testé sans mais même sans ça ne fonctionnait pas. Pourtant le code est simple et c'est là que je comprends pas pourquoi ça bloque une fois qu'un tir est émis, plus de réception possible.

voodou

#6
Feb 18, 2011, 07:57 pm Last Edit: Feb 18, 2011, 08:16 pm by voodou Reason: 1
Fonction réception seule:

Code: [Select]
#include <IRremote.h>
//Partie réception
int RECV_PIN = 11;
int LEDHIT = 8;


IRrecv irrecv(RECV_PIN);
decode_results results;
IRsend irsend;

void setup(){

Serial.begin(9600);
//Réception
  pinMode(LEDHIT, OUTPUT);
 irrecv.enableIRIn(); // Start the receiver
}

void loop() {

//Réception
 if (irrecv.decode(&results)) {
   //Serial.println(results.value, HEX);
   irrecv.resume(); // Receive the next value
   unsigned long codeValue;
   codeValue = results.value;
   if (codeValue == 33441975){
    digitalWrite (LEDHIT, HIGH);
    delay (3000);
    digitalWrite (LEDHIT, LOW);
     }
  }
}


Fonction émission:
Code: [Select]
/*
* IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv
* An IR detector/demodulator must be connected to the input RECV_PIN.
* Version 0.1 July, 2009
* Copyright 2009 Ken Shirriff
* http://arcfn.com
*/
// Problémé Ir emiussion se met sur le pin 9... va comprendre... fin ca marche


#include <IRremote.h>

int RECV_PIN = 11;
int BOUTTON = 2;
int LEDE = 9;
int TRIGGER = 4;
int buttonState = 0;

IRrecv irrecv(RECV_PIN); //pin 3 emetteur
IRsend irsend;

decode_results results;

void setup() {
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
pinMode(LEDE, OUTPUT);
pinMode(BOUTTON, OUTPUT);
pinMode (TRIGGER, INPUT);
}

void loop() {
  buttonState = digitalRead(TRIGGER);
    if (buttonState == HIGH) {  
    digitalWrite(BOUTTON, HIGH);
    irsend.sendNEC(0x00FF30CF, 32);
    delay (1000);
    digitalWrite(BOUTTON, LOW);
    delay(100);
 }    
}


Il doit y avoir quelques lignes de trop mais ça fonctionne indépendamment, je viens de refaire le test à l'instant.

Les deux en un et toujours le même problème.
Code: [Select]
#include <IRremote.h>
//Partie réception
int RECV_PIN = 11;
int LEDHIT = 8;
int BOUTTON = 2;
int LEDE = 9;
int TRIGGER = 4;
int buttonState = 0;

IRrecv irrecv(RECV_PIN);
decode_results results;
IRsend irsend;

void setup(){

Serial.begin(9600);
//Réception
  pinMode(LEDHIT, OUTPUT);
 irrecv.enableIRIn(); // Start the receiver
 pinMode(LEDE, OUTPUT);
pinMode(BOUTTON, OUTPUT);
pinMode (TRIGGER, INPUT);
}

void loop() {

//Réception
 if (irrecv.decode(&results)) {
   //Serial.println(results.value, HEX);
   irrecv.resume(); // Receive the next value
   unsigned long codeValue;
   codeValue = results.value;
   if (codeValue == 33441975){
    digitalWrite (LEDHIT, HIGH);
    delay (3000);
    digitalWrite (LEDHIT, LOW);
     }
  }
 
//Tir
buttonState = digitalRead(TRIGGER);
    if (buttonState == HIGH) {  
    digitalWrite(BOUTTON, HIGH);
    irsend.sendNEC(0x00FF30CF, 32);
    delay (1000);
    digitalWrite(BOUTTON, LOW);
    delay(100);
 }

}






Uploaded with ImageShack.us

Gromain59

Salut,

Pour déboguer, n'hésites pas à placer des mouchards (Serial.print) un peu partout dans ton code pour vérifier où ça passe et où ça ne passe pas.
Peut-être ne sort-il pas de l'appel de routine irrecv.decode() par exemple ?

Gromain
"pour résoudre un gros problème, il est souvent plus facile de le diviser en petits problèmes élémentaires..."

projet domotique xPLDuino
IRC: freenode #xplduino

voodou

Bonne idée, je vais tenter le coup.

voodou

J'ai trouvé la solution, en fait à la fin de la fonction tir, il suffit de réactiver la fonction réception avec cette simple ligne:

irrecv.enableIRIn();

Voilà. Merci pour votre aide en tout cas. Bon courage à tous!

Go Up