Debugger générateur de signal PPM

Bonjour,

Je suis ultra débutant en Arduino puisque je ne m’intéresse à la chose que depuis hier, mais déjà je trouve ça génial. Comme 1er projet pédagogique, j’essaye de me faire un générateur de signal PPM à partir des potentiomètres d’un vieux joystick.

La carte Arduino et son environnement est si bien foutu que j’ai presque réussi à boucler mon projet sans compétences en électroniques et en une seule soirée de travail, cablage des potars inclus… Je dit bien presque, car si l’emetteur de ma télécommande comprend bien le signal PPM que je génère, qu’il l’envoie par les ondes au recepteur qui arrive à son tour à le démoduler, sur 6 voix, 5 fonctionnent sans problème, mais la voie numéro 1 ne fonctionne qu’a moitié… En effet, le servo fait des aller-retour en permanence avec tout de même une réaction lorsque je bouge le potar correspondant à la voie 1.

N’étant pas du tout électronicien, je n’ai pas d’oscilloscope et n’ai aucun moyen de voir la gueule du signal que je génère. J’ai essayé de nombreuses modifs dans le code (modifier les durée d’impulsion, mettre une durée de trame variable, inverser les hauts et les bas…) et j’ai toujours le même problème et ai comme seule outil pour le debuggage une diode…

Aussi j’aurais 2 question :

  • est-il possible de debugger le code arduino, genre en simulant sur le PC l’execution du code sur la carte ?
  • tant qu’a faire, dans ce code :
const int PPMout = 2;   //définition de la broche 2 de la carte en tant que variable
const int DureePPM = 22500;
const int nb_voies = 6;
const int INTER = 300;
const unsigned long SEQ_START = 20500;

boolean cmp;
int i;
int tmp;
unsigned long compteur;
int duree_totale;



int minval[nb_voies];
int maxval[nb_voies];
int valeur[nb_voies];

void setup()
{
   cmp = false;
   pinMode(PPMout, OUTPUT); 
   compteur = micros();
   //pinMode(led, OUTPUT); 

   duree_totale = DureePPM;

   digitalWrite(PPMout, HIGH); 

   for(i=0;i<nb_voies;i++)
   {
     minval[i] = 6000; // toujours inferieur a 6V
     maxval[i] = 0; // jamais inferieur a 0v
     valeur[i] = 1300;
   }
   i = false;
}



void loop()   
{
  
  if(micros() - compteur < SEQ_START || !cmp)
  {
    
    for(i=0;i<nb_voies;i++)
    {
        tmp = analogRead(i);
        
        if(minval[i] > tmp)
          minval[i] = tmp;
          
        if(maxval[i] < tmp)
          maxval[i] = tmp;
       
        if(maxval[i] - minval[i] != 0 && maxval > 0)
           valeur[i] = 700 + (int)((((float)tmp - (float)minval[i]) / ((float)maxval[i] - (float)minval[i])) * 900);

    }
  }
  else
  {     
       compteur = micros();    
       digitalWrite(PPMout, LOW);     
       delayMicroseconds(INTER);
       for(i=0;i<nb_voies;i++)
       {
         digitalWrite(PPMout, HIGH);    
         delayMicroseconds(valeur[i]);
         digitalWrite(PPMout, LOW);    
         delayMicroseconds(INTER);
       }
       digitalWrite(PPMout, HIGH); 
       
  }
   cmp = !cmp;
}

Voyez vous quelque chose susceptible - aussi bien au niveau du code que de la trame PPM générée - qui soit susceptible d’induire ces va et vien sur le servo de la voie N°1 ?

Je m’excuse par avance pour ce code un peu dégueu, c’est ma dernière version en date, et à force d’essayer des trucs, il devient vraiment moche.

En vous remerciant par avance

Problème résolu, le probleme ne vient pas de mon code qui marche très bien, mais du fait que la voix 1 est sur un bouton du joystick, et que je ne sais par quelle magie, la résistance de ce bouton oscille de façon très régulière... Il doit y avoir de l'electronique caché dans le manche du joystick.

Puisque ça maarche, je laisse le code source à toute fin utile...