Go Down

Topic: gérer deux moteur grâce à un capteur infrarouge (Read 304 times) previous topic - next topic

Z800_Il

Bonjours à tous ,

Je suis actuellement entrain de réaliser un projet consistant a faire a déclencher deux moteurs via une télécommande infrarouge (qui pourrais avoir comme application ouvrir et fermer un store) . Sachant que mes moteurs fonctionnent correctement lorsque je les lancent sans utiliser le capteur IR et que ce dernier renvoi les bonnes valeurs dans mon moniteur . Je ne comprend pas pourquoi lorsque je lance mon programme seul un moteur fonctionne.

ps: j'utilise une carte arduino Mega

Merci de m'apporter votre aide , voici ci-joint monde code.

//CODE

#include <IRremote.h>
const int RECV_PIN = 13;
IRrecv irrecv(RECV_PIN);
decode_results results;


// moteur 1
int enA = 10;
int in1 = 9;
int in2 = 8;
// moteur 2
int enB = 5;
int in3 = 7;
int in4 = 6;

void setup()
{
 
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);

Serial.begin(9600);
delay(500)  ;
irrecv.enableIRIn();
delay(500)  ;
}

void fermer ()
{   
 
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);
  analogWrite(enB, 100);

  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  analogWrite(enA, 100);
 
  }

  void ouvrir(){
   
 
  digitalWrite(in3, LOW);
  digitalWrite(in4, HIGH);
  analogWrite(enB, 100);
 
  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH);
  analogWrite(enA, 100);
   
    }

  void eteindre(){
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
   
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
    }

    void loop()
{
  if(irrecv.decode(&results)) {
      delay(20); 
    Serial.println(results.value, DEC);
   
     if(results.value == 16754775){
         delay(20);       
         ouvrir();
           
      }
     if(results.value == 16769055){
       delay(20);
        fermer();
     }
     if(results.value == 16748655){
      delay(20);     
      eteindre();
     
     }
    delay(20);
    irrecv.resume();     
   }
delay(20);
}

J-M-L

Bonjour et bienvenue

Merci d'éditer le post ci dessus et de mettre le code entre des tags de code et indentez le correctement (ctrl-T dans l'IDE), là ça pique les yeux... (lire bien éditer son post pour les nuls qui est en tête de ce forum et lire pendant que vous y êtes aussi les autres posts épinglés )

Le Timer de la libraire IR Remote sur une MEGA par défaut est Timer2 qui impacte la capacité de gérer le PWM sur les pins 9 et 10 que vous utilisez pour enA et in1 --> Votre analogWrite sur enA ne va pas fonctionner correctement

Changez de pins pour en utiliser d'autres ou dans le fichier boarddefs.h de votre librairie trouvez le bout de code suivant
Code: [Select]
// Define which timer to use
//
// Uncomment the timer you wish to use on your board.
// If you are using another library which uses timer2, you have options to
//   switch IRremote to use a different timer.
//

// Arduino Mega
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
//#define IR_USE_TIMER1   // tx = pin 11
#define IR_USE_TIMER2     // tx = pin 9
//#define IR_USE_TIMER3   // tx = pin 5
//#define IR_USE_TIMER4   // tx = pin 6
//#define IR_USE_TIMER5   // tx = pin 46
et mettez en commentaire la ligne qui dit d'utiliser TIMER2 et enlevez le commentaire sur la ligne qui vous convient pour choisir un Timer qui n'impactera pas en PWM aune pin que vous utilisez.

Pour un Arduino Mega 2560:
timer 0 contrôle le PWM des pins 13, 4
timer 1 contrôle le PWM des pins 12, 11
timer 2 contrôle le PWM des pins 10, 9
timer 3 contrôle le PWM des pins 5, 3, 2
timer 4 contrôle le PWM des pins 8, 7, 6

Je n'ai pas lu le code en détail pour voir s'il est correct, commencez par cela. Le plus simple c'est sans doute de changer de PIN

Je l'ai lu suffisamment cependant pour voir les delay(20); partout qui n'ont pas grand intérêt

 pour être tout à fait correct vous devriez  pour chaque test de valeur que votre nombre est un unsigned long avec la notation ul après Le chiffre
-->      if(results.value == 16754775ul){...
 Et vos if pourraient être séparés par des else ce serait plus efficace
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

Go Up