Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2594 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Programmation Robot

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Programmation Robot

n°1960384
trip74
Posté le 26-01-2010 à 10:55:39  profilanswer
 

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.
 

mood
Publicité
Posté le 26-01-2010 à 10:55:39  profilanswer
 

n°1960785
breizhbugs
Posté le 27-01-2010 à 10:57:04  profilanswer
 

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
n°1961031
trip74
Posté le 27-01-2010 à 23:06:05  profilanswer
 

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 ;)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Programmation Robot

 

Sujets relatifs
[C#][DirectInput] Programmation d'un joystickProgrammation flash ou équivalent
système manuel de programmation neurologique à refllex par Rdn formelsDéfit@Programmation.forum.Hardware.fr
Programmation VB problèmes de débutantProgrammation Jeu ABALONE
Besoin d'aide pour la programmation d'un menu en htmlDemande d'aide à la programmation
programmation avec Chart FX Lite[programmation robot] problème avec un timer...
Plus de sujets relatifs à : Programmation Robot


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR