Programmation Robot

Programmation Robot - C - Programmation

Marsh Posté le 26-01-2010 à 10:55:39    

Bonjour à tous, je suis actuellement sur le projet d'un robot suiveur de ligne et détecteur d'obstacle, nous programmons un PIC 18F2550 avec le logiciel PIC C COMPILER. Le robot comporte 2 moteurs branchés en inverses.
 
Mon problème c'est que je n'arrive pas à faire tourné les moteurs, Il faut 4,5V a ses bornes pour qu'ils puissent avancé, cependant j'obtiens 4,8 au + et 0.8 au - je comprend pas pourquoi... Je suis débutant en programmation de C donc je suis preneur de tous conseils.
 
Je commande les moteurs sur le port A : A0 jusque A3 en analogique
 
Voila mon programme :
void main()
{
   init();
   output_low (Mgm);
   output_low (Mdp);
   while(1==1)
   {
   moteur();
   //detect();
   }
}
 
//*****************************************************************************
void init()
 
{  
   setup_adc_ports(AN0_TO_AN3|VSS_VDD);
   setup_adc(ADC_OFF);
 
 
   port_b_pullups (TRUE); // initialisation portB
   output_bit (Almm, 1);
   output_bit (Gndm, 0);
   // initilisation interruption externe
  // ext_int_edge( l_to_h ); //Interruption déclenchée sur un front montant
  // enable_interrupts( INT_EXT1 ); // Autorisation d'interruption par RB1
 //  enable_interrupts( GLOBAL );  //Autorisation d'interruption global
}
//*****************************************************************************
//void detect()
//{
//output_high (CmdAlimGP2);
//}
//*****************************************************************************
void moteur()
{
   if (LM == 1)
   {
      if ((LD == 0)&&(LG == 0))
      output_high((Mdm)&&( Mgp));
       
      if ((LD == 1)&&(LG == 0))
      output_high(Mgp);
      output_low(Mdm);
   
      if ((LD == 0)&&(LG == 1))
      output_high(Mdm);
      output_low(Mgp);
   }
   if (LM == 0)
   {
      if ((LD == 0)&&(LG == 0))
      output_high((Mdm)&&( Mgp));
       
      if ((LD == 1)&&(LG == 0))
      output_high(Mgp);
      output_low(Mdm);
   
      if ((LD == 0)&&(LG == 1))
      output_high(Mdm);
      output_low(Mgp);
   }
}
 
Si vous avez des suggestions sa sera avec plaisir ! Merci d'avance.
 

Reply

Marsh Posté le 26-01-2010 à 10:55:39   

Reply

Marsh Posté le 27-01-2010 à 10:57:04    

Plop,
Je remarque d'après les espaces / retour a la lignes que tu as au niveau de tes if que tu as peut etre pas mis d'accolades:

Code :
  1. void main()
  2. {
  3.    init();
  4.    output_low (Mgm);
  5.    output_low (Mdp);
  6.    while(1==1) /// tu fais comment pour l'arreter ton moteur?
  7.    {
  8.    moteur();
  9.    //detect();
  10.    }
  11. }
  12. void init()
  13. {
  14.    setup_adc_ports(AN0_TO_AN3|VSS_VDD);
  15.    setup_adc(ADC_OFF);
  16.    port_b_pullups (TRUE); // initialisation portB
  17.    output_bit (Almm, 1);
  18.    output_bit (Gndm, 0);
  19.    // initilisation interruption externe
  20.   // ext_int_edge( l_to_h ); //Interruption déclenchée sur un front montant
  21.   // enable_interrupts( INT_EXT1 ); // Autorisation d'interruption par RB1
  22. //  enable_interrupts( GLOBAL );  //Autorisation d'interruption global
  23. }
  24. //void detect()
  25. //{
  26. //output_high (CmdAlimGP2);
  27. //}
  28. void moteur()
  29. {
  30.    if (LM == 1)
  31.    {
  32.       if ((LD == 0)&&(LG == 0))
  33.             output_high((Mdm)&&( Mgp));
  34.      
  35.       if ((LD == 1)&&(LG == 0))
  36.       {
  37.           output_high(Mgp);
  38.           output_low(Mdm);
  39.       }
  40.       if ((LD == 0)&&(LG == 1))
  41.       {
  42.            output_high(Mdm);
  43.            output_low(Mgp);
  44.        }
  45.    }
  46.    if (LM == 0)
  47.    {
  48.       if ((LD == 0)&&(LG == 0))
  49.      {
  50.         output_high((Mdm)&&( Mgp));
  51.      }
  52.      
  53.       if ((LD == 1)&&(LG == 0))
  54.       {
  55.            output_high(Mgp);
  56.            output_low(Mdm);
  57.       }
  58.  
  59.       if ((LD == 0)&&(LG == 1))
  60.       {
  61.              output_high(Mdm);
  62.              output_low(Mgp);
  63.        }
  64.    }
  65. }


Message édité par breizhbugs le 27-01-2010 à 10:57:49
Reply

Marsh Posté le 27-01-2010 à 23:06:05    

En fait il s'arrête lorsqu'il détecte un obstacle mais c'est un autre sous programme que j'ai pas affiché puisqu'il ne présentait pas d'intérêt.
 
En fait le problème ne vient pas de mon programme.. C'est juste qu'il faut une carte d'interface que mon prof n'a pas.. donc je ne pourrais jamais tester mon programme..
 
Désolé et merci de ta réponse ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed