Loading...
Pages: [1]   Go Down
Author Topic: DfRobot et irremote dysfonctionnement  (Read 178 times)
0 Members and 1 Guest are viewing this topic.
France
Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour à tous,

J'expérimente actuellement une carte DFROBOT ROMEO V2 R3.
J'ai un souci avec la librairie IrRemote.

Dés que j'active cette ligne :

// Capteur infra rouge
  irrecv.enableIRIn();         // Start the receiver

le moteur droit de mon robot ne tourne plus.
par contre, tout le traitement de capture de ma télécommande fonctionne et le robot tourne en rond ...

Ci-joint le code (fonctionnel sans la télécommande)

Code:
// ----------------------------------------------------
// Pilotage DfRobot Version 1.0
// Démarrage Robot avec télécommande Bt Marche / Arret
// Avant sur bouton 2
// Arriere sur Bouton 8
// Gauche bouton 4
// Droite Bouton 6
// Neutral Bouton 5
// ----------------------------------------------------
// include the library code:
#include <IRremote.h>

//Standard PWM DC control
int E1 = 5;     //M1 Speed Control
int E2 = 6;     //M2 Speed Control
int M1 = 4;    //M1 Direction Control
int M2 = 7;    //M1 Direction Control

// Capteur de distance
int duration;                   //Stores duration of pulse in
int distance;                   // Stores distance
int srf05pin = 8;             // Pin for SRF05

// Initialisation port Infrarouge
int valinfradec;
const int Infra = 11;

// initialisation des touches du shield (futur)
const int touche=0;         // Touche du clavier carte

// constant des capteurs de lumière
const int lumdroit=2;
const int lumgauche=3;

// port infra rouge
IRrecv irrecv(Infra);

// Sorties diverses
const int Led = 13;

// Variables diverses
boolean valled=HIGH;
boolean bEnfonction;
int valtouche;
unsigned long RefTimeDistance;
unsigned long RefTimeLumiere;
unsigned long RefTimeClignote;
int valdroit;
int valgauche;
int sav_valdroit;
int sav_valgauche;
int sens;                         // 0 Avant, 1 Arriere
int gauchedroite;            // 0 à gauche, 1 à droite

// décodage données infra rouge
decode_results results;

// -------------------
// Fonction SETUP
// -------------------
void setup(void)
{
  // Initialialisation des ports Moteurs
  int i;
  for(i=4;i<=7;i++)
    pinMode(i, OUTPUT);  
    
  // Monitoring sur port serie
  Serial.begin(19200);
  
  // Capteur infra rouge
  //irrecv.enableIRIn();         // Start the receiver (si actif, plus de moteur droit)
  
  // Initialisation port entrée lumière
  pinMode(lumdroit,INPUT);
  pinMode(lumgauche,INPUT);
  
  // Initialisation valeurs sauvegardes lumière
  sav_valdroit=1023;
  sav_valgauche=1023;
  
  // Initialisation du générateur de nombre aleatoire
  randomSeed(analogRead(0));
  
}

// ------------------
// Boucle principale
// -----------------
void loop(void)
{
  // Traitement capteur de distance (SRF05)
  if (TraiteDistance())
  {
    Bouge();
    return;
  }

  // Traitement capteur de lumiere
  if (millis()-RefTimeLumiere>200)
  {
    if (TraiteLumiere())
    {
      Bouge();
      return;
    }
  }
  
  // Traitement des touches de la carte
  TraiteTouche();
  
   // Traitement entrées télécommande
  TraiteTeleco();
  
  // clignotement de la led temoin
  if (millis()-RefTimeClignote>200 and bEnfonction!=true)
  {
  clignote();
  }
  
  // Mise en mouvement du Robot si pas d'obstacle (distance ou lumière) rencontrés
  Bouge();
}

// ------------------------------------
// Fonction d'avance / recule du Robot
// ------------------------------------
void Bouge()
{
  // on met le robot en mouvement en fonction du sens
  switch (sens)
  {
    case 0:    // Avant
    Avant(150,150);
    break;
    
    case 1:    // Arriere
    Arriere(100,100);
    break;
  }
}

// ---------------------------------------------
// Fonction de traitement du capteur de distance
// Renvoie Vrai si passage en marche arriere
// ---------------------------------------------
boolean TraiteDistance()
{
  
// Mesure de la distance
  pinMode(srf05pin, OUTPUT);
  digitalWrite(srf05pin, LOW);           // Make sure pin is low before sending a short high to trigger ranging
  delayMicroseconds(2);
  digitalWrite(srf05pin, HIGH);          // Send a short 10 microsecond high burst on pin to start ranging
  delayMicroseconds(10);
  digitalWrite(srf05pin, LOW);           // Send pin low again before waiting for pulse back in
  pinMode(srf05pin, INPUT);
  duration = pulseIn(srf05pin, HIGH);    // Reads echo pulse in from SRF05 in micro seconds
  distance = duration/58;                // Dividing this by 58 gives us a distance in cm
 
 if (distance!=0)
 {
  if (distance<20)
  {
    // Si on était en marche avant,
    if (sens==0)
    {
      // Avant de faire marche arriere, on tourne aléatoirement le robot
      gauchedroite=random(0,2);
      switch (gauchedroite)
      {
        case 0:    // à gauche
        Agauche(100,100); delay(100);
        break;
        
        case 1:    // à droite
        Adroite(100,100); delay(100);
        break;
      }
      
      sens=1;                              // Le prochain mouvement est en marche arriere
    }
    return 1;
  }
  else
  {
    sens=0;                              // Le prochain mouvement est en marche avant
    return 0;
  }
 }
}

// ----------------------------------------------
// Fonction de traitement des capteurs de lumiere
//
// ----------------------------------------------
boolean TraiteLumiere()
{
  
  // Référentiel de temps
  RefTimeLumiere=millis();
  
  valdroit=map(analogRead(lumdroit),0, 1023, 0, 5);
  valgauche=map(analogRead(lumgauche),0, 1023, 0, 5);
  
  // monitoring
  Serial.print("Droite ");
  Serial.print(valdroit);
  Serial.print(" Gauche ");
  Serial.println(valgauche);
  
  // Si la lumiere est décroissante sur les 2 capteurs,
  // On recule ...
  if (valdroit<sav_valdroit)
  {
    if (valgauche<sav_valgauche)
    {
      sens=1;
      // On conserve les dernières valeurs
      sav_valdroit=valdroit;
      sav_valgauche=valgauche;
      return 1;
    }
  }
  
  // Sinon, on va vers la lumiere
  if (valdroit<valgauche) Adroite(100,100); delay(5);
  if (valgauche<valdroit) Agauche(100,100); delay(5);
  
  
  // On conserve les dernières valeurs
   sav_valdroit=valdroit;
   sav_valgauche=valgauche;
   sens=0;
   return 0;
}

// --------------
// Fonction Stop
// --------------
void stop(void)                    //Stop
{
  digitalWrite(E1,LOW);  
  digitalWrite(E2,LOW);      
}  

// ---------------------
// Fonction Marche Avant
// ---------------------
void Avant(char a,char b)              //Marche Avant
{
  analogWrite (E1,a);                  //PWM Speed Control
  digitalWrite(M1,HIGH);    
  analogWrite (E2,b);    
  digitalWrite(M2,HIGH);
}  

// ------------------------
// Fonction Marche Arriere
// ------------------------
void Arriere (char a,char b)          //Marche arriere
{
  analogWrite (E1,a);
  digitalWrite(M1,LOW);  
  analogWrite (E2,b);    
  digitalWrite(M2,LOW);
}

// -------------------------
// Fonction Tourne à Gauche
// -------------------------
void Agauche (char a,char b)             //A gauche
{
  analogWrite (E1,a);
  digitalWrite(M1,LOW);    
  analogWrite (E2,b);    
  digitalWrite(M2,HIGH);
}

// -------------------------
// Fonction Tourne à droite
// -------------------------
void Adroite (char a,char b)             //A droite
{
  analogWrite (E1,a);
  digitalWrite(M1,HIGH);    
  analogWrite (E2,b);    
  digitalWrite(M2,LOW);
}

// ---------------------
// Fonction clignotement
// ---------------------
void clignote()
{
  RefTimeClignote=millis();
  valled=!valled;
  digitalWrite(Led,valled);
}

// -----------------------------
// Fonction TraiteTouche (Carte)
// -----------------------------
void TraiteTouche()
{
  valtouche=analogRead(touche);
 // if (valtouche!=1023) Serial.println(valtouche);
  switch (valtouche)
  {
    case 0:    // S1
    break;
    case 143:  // S2
    break;
    case 328:  // S3
    break;
    case 502:  // S4
    break;
    case 740:  // S5
    break;
  }
}

// --------------------------------
// Fonction traitement telecommande
// --------------------------------
void TraiteTeleco()
{
  if (irrecv.decode(&results))
  {
   valinfradec=results.value, DEC;
   Serial.println(valinfradec);
   switch (valinfradec)
   {
     case -23971:            // Arret depart programme
      bEnfonction=!bEnfonction;
      digitalWrite(Led,bEnfonction);
      if (bEnfonction!=true) stop();
      break;
    
     case 6375:              // Touche 2 (Avant)
      if (bEnfonction==true) Avant(255,255);
      break;
    
     case 4335:              // Touche 4 (à Gauche)
      if (bEnfonction==true) Agauche(100,100);
      break;
      
     case 23205:             // Touche 6 (à Droite)
      if (bEnfonction==true) Adroite(100,100);
      break;

     case 16730805:          // Touche 8 (Arrière)
      if (bEnfonction==true) Arriere(255,255);
      break;
   }
  
   // Resume  
   irrecv.resume(); // Receive the next value
  }
}


Moderator edit: [code] [/code] tags added.
« Last Edit: March 23, 2013, 12:40:27 pm by Coding Badly » Logged

Arduino MEGA 2560
DFROBOT ROMEO V2 R3
LCD SCHIELD
PICAXE BOT120

East Anglia (UK)
Offline Offline
Edison Member
*
Karma: 48
Posts: 1411
May all of your blinks be without delay
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

The IrRemote library stops PWM on some pins.  Could that be your problem ?
Logged

France
Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

thank's for response,
can'y change my pins for the motor on my DfROBOT ?
y don't find the way ...
Logged

Arduino MEGA 2560
DFROBOT ROMEO V2 R3
LCD SCHIELD
PICAXE BOT120

Johannesburg UTC+2
Offline Offline
Edison Member
*
Karma: 34
Posts: 1705
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
The IrRemote library stops PWM on some pins.

I know from experience that pin3 loses its PWM-ability...
Logged

IT Crowd:
Roy... "Have you tried turning it off and on again?"
Moss.. "Have you tried forcing an unexpected reboot?"

France
Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

So, y don't use pin 3 in my code ...
Logged

Arduino MEGA 2560
DFROBOT ROMEO V2 R3
LCD SCHIELD
PICAXE BOT120

Pages: [1]   Go Up
Print
 
Jump to: