Go Down

Topic: action en boucle grace a une telecommande (Read 824 times) previous topic - next topic

vike229

Mar 07, 2015, 02:59 pm Last Edit: Mar 07, 2015, 03:00 pm by vike229
Salut à tous  :D ,
j'ai pour projet de faire un robot ping-pong, mais il reste un leger probleme au niveau du code

le voici en version test pour etre plus facile a lire
Code: [Select]
#include <IRremote.h>
const int vitesse =3;
const int frein = 9;
const int sens = 12;
const byte IRpin = 10;
IRrecv irrecv(IRpin);
#define valeurIr 0x41bef00f
#define saccade 0x41be807f
decode_results results;


void setup() {
  Serial.begin(9600);
    irrecv.enableIRIn();
  pinMode(vitesse, OUTPUT);
  pinMode(frein, OUTPUT);
  pinMode(sens, OUTPUT);
  /*digitalWrite(sens, LOW);
  digitalWrite(vitesse, LOW);
  digitalWrite(frein, LOW);*/
 
}
  void mode1(){
      digitalWrite(vitesse, HIGH);
  digitalWrite(sens, HIGH);
  delay(1000);
  digitalWrite(vitesse, LOW);
  digitalWrite(frein, HIGH);
  delay(1000);
  digitalWrite(frein, LOW);
  digitalWrite(vitesse, HIGH);
  digitalWrite(sens, LOW);
  delay(1000);
  digitalWrite(vitesse, LOW);
  digitalWrite(frein, HIGH);
  delay(1000);
  digitalWrite(frein, LOW);
  }
  void mode2(){
  digitalWrite(sens, LOW);
    digitalWrite(vitesse, HIGH);
    delay(10000);
    digitalWrite (vitesse, LOW);
  }
 
void loop () {
   if (irrecv.decode(&results)) {  //If IR receiv // Serial.println(results.value, HEX);
    if (results.value == valeurIr){
      mode2();
   
    }
    else if(results.value == saccade){
   
    mode2();
    }
  irrecv.resume();
 
    }
}

 
le probleme est que le mode1 ou 2 ne s'effectue qu'une fois. Il y aurait une technique pour que le mode se fasse en boucle tant qu'on ne lui dit rien ? il faudrait utiliser une boucle tant que mais comment ?
Merci de votre aide

Artouste

Salut à tous  :D ,
j'ai pour projet de faire un robot ping-pong, mais il reste un leger probleme au niveau du code
...
le voici en version test pour etre plus facile a lire
le probleme est que le mode1 ou 2 ne s'effectue qu'une fois. Il y aurait une technique pour que le mode se fasse en boucle tant qu'on ne lui dit rien ? il faudrait utiliser une boucle tant que mais comment ?
Merci de votre aide
bonjour
quel protocole ta telco IR ?

vike229

c'est une télécommande  de recup (ancien poste radio ) mais ça doit etre du rc5 ou rc6
La seule inscription sur le récepteur est L18Y06 mais pas de datasheet sur le net

Artouste

#3
Mar 07, 2015, 05:10 pm Last Edit: Mar 07, 2015, 05:10 pm by Artouste
c'est une télécommande  de recup (ancien poste radio ) mais ça doit etre du rc5 ou rc6
La seule inscription sur le récepteur est L18Y06 mais pas de datasheet sur le net
pour que ce soit clair , tu souhaite faire quoi  exactement ?
-continuer "une action" tant que tu presse une touche de ta telco ?
ou
- continuer une action apres appui sur une touche, tant qu'aucune autre touche de telco n'est reconnue ?

vike229

continuer une action après appui sur une touche, tant qu'aucune autre touche n'est appuyé

Artouste

continuer une action après appui sur une touche, tant qu'aucune autre touche n'est appuyé
Il faut sauvegarder l'etat anterieur et en faire une RAZ seulement si une touche autre est detetectée

un truc comme ça doit repondre au postulat  (compile OK)
Code: [Select]
#include <IRremote.h>
const int vitesse =3;
const int frein = 9;
const int sens = 12;
const byte IRpin = 10;
IRrecv irrecv(IRpin);
#define valeurIr 0x41bef00f
#define saccade 0x41be807f
decode_results results;
int st1=0;

void setup() {
  Serial.begin(9600);
    irrecv.enableIRIn();
  pinMode(vitesse, OUTPUT);
  pinMode(frein, OUTPUT);
  pinMode(sens, OUTPUT);
  /*digitalWrite(sens, LOW);
  digitalWrite(vitesse, LOW);
  digitalWrite(frein, LOW);*/
 
}
  void mode1(){
      digitalWrite(vitesse, HIGH);
  digitalWrite(sens, HIGH);
  delay(1000);
  digitalWrite(vitesse, LOW);
  digitalWrite(frein, HIGH);
  delay(1000);
  digitalWrite(frein, LOW);
  digitalWrite(vitesse, HIGH);
  digitalWrite(sens, LOW);
  delay(1000);
  digitalWrite(vitesse, LOW);
  digitalWrite(frein, HIGH);
  delay(1000);
  digitalWrite(frein, LOW);
  }
  void mode2(){
  digitalWrite(sens, LOW);
    digitalWrite(vitesse, HIGH);
    delay(10000);
    digitalWrite (vitesse, LOW);
  }
 
void loop () {
   if (irrecv.decode(&results)) {  //If IR receiv // Serial.println(results.value, HEX);
   st1=0;
    if (results.value == valeurIr){
    st1=1; 
   
    }
    if(results.value == saccade){
    st1=1;
   
    }
  irrecv.resume();
 
    }
    if (st1==1) mode2();
}



vike229

#6
Mar 07, 2015, 05:57 pm Last Edit: Mar 07, 2015, 05:57 pm by vike229
C'est bon ça marche après quelques modif  que voici

Code: [Select]
#include <IRremote.h>
const int vitesse =3;
const int frein = 9;
const int sens = 12;
const byte IRpin = 10;
IRrecv irrecv(IRpin);
#define valeurIr 0x41bef00f
#define saccade 0x41be807f
decode_results results;
int st1=0;

void setup() {
  Serial.begin(9600);
    irrecv.enableIRIn();
  pinMode(vitesse, OUTPUT);
  pinMode(frein, OUTPUT);
  pinMode(sens, OUTPUT);
  /*digitalWrite(sens, LOW);
  digitalWrite(vitesse, LOW);
  digitalWrite(frein, LOW);*/
 
}
  void mode1(){
      digitalWrite(vitesse, HIGH);
  digitalWrite(sens, HIGH);
  delay(1000);
  digitalWrite(vitesse, LOW);
  digitalWrite(frein, HIGH);
  delay(1000);
  digitalWrite(frein, LOW);
  digitalWrite(vitesse, HIGH);
  digitalWrite(sens, LOW);
  delay(1000);
  digitalWrite(vitesse, LOW);
  digitalWrite(frein, HIGH);
  delay(1000);
  digitalWrite(frein, LOW);
  }
  void mode2(){
  digitalWrite(sens, LOW);
    digitalWrite(vitesse, HIGH);
    delay(10000);
    digitalWrite (vitesse, LOW);
  }
 
void loop () {
   if (irrecv.decode(&results)) {  //If IR receiv // Serial.println(results.value, HEX);
    if (results.value == valeurIr){
    st1=1; 
   
    }
    if(results.value == saccade){
    st1=2;
   
    }
  irrecv.resume();
 
    }
    if (st1==1) mode2();
   if (st1==2) mode1();
}


MERCI  ;D

Go Up