Go Down

Topic: [RESOLU] Créer ma première librairie... (PPMread) (Read 1 time) previous topic - next topic

fdufnews

Quote
à votre avis quel est la meilleure façon de faire, sachant que cette fonction ne demande rien en entrée et qu'elle doit retourner 6 valeurs

La fonction pourrait retourner un pointeur mais c'est généralement mal compris par l'utilisateur lambda et source de problèmes.
Le plus simple serait de passer en argument un pointeur sur un tableau déclaré par la fonction appelante.

UniseV

La fonction pourrait retourner un pointeur mais c'est généralement mal compris par l'utilisateur lambda et source de problèmes.

Ca obligerait en plus à développer dans le main code un "truc" pour lire la mémoire et saucissonner le contenu dans des variables...

Le plus simple serait de passer en argument un pointeur sur un tableau déclaré par la fonction appelante.


La fonction read, écrirait directement à l'emplacement mémoire indiqué, et mettrait à jour les variable du main code sans les connaitre, c'est l'idée ?
Dis-moi si j'ai bien compris, ça s'utiliserait comme ça :
Code: [Select]
unsigned int cha[6];
unsigned int* rxPoint=&cha[0];

void setup() {
}
void loop() {
  ppm.read(rxPoint)
}


??
EN: Libraries are my Gurus, they make me believe anything they want !
FR: Les librairies sont mes gourous, elles me font croire ce qu'elles veulent !

UniseV

#12
Feb 26, 2013, 11:18 pm Last Edit: Feb 27, 2013, 11:41 pm by UniseV Reason: 1
Ça fonctionne, et j'en suis le premier étonné.

J'ai finalement fait évolué la fonction ppm.read() pour qu'elle renvoi une valeur 0, 1 ou 2 :

0 = Pas de nouvelles trame capturée depuis le dernier appel de la fonction
1 = Des nouvelles valeurs ont été mise à jour en mémoire
2 = Le signal radio est perdu, les donnée en mémoire sont figées

Un example d'utilisation :

Code: [Select]
#include <PPMread.h>          // On inclue la librairie

// Données du Rx
unsigned int cha[6];           // Les valeurs des canaux

PPMread ppm(&cha[0]);          // On lance l'instance, en fournissant le pointeur

void setup()
{
 Serial.begin(115200);        // On prepare la sortie série
 ppm.begin();                // On démarre la lecture PPM en arrière-plan
}

void loop()
{
 if (0 < ppm.read()){   // Si des nouvelles valeurs ou FAILSAFE
   if (1 < ppm.read()){   // Si FAILSAFE
     Serial.println("FAILSAFE");

   }
   else {               // Si des nouvelles valeurs, la variable est DEJA A JOUR
   for (int i=0; i < 6; i++){ // Imprimer les valeurs des canaux sur le port série
       Serial.print(cha[i]);
       Serial.print(";");
     }
     Serial.println(";");

   }
 }
}


Il me reste à nettoyer le code & imaginer un truc cloisonné au niveau des interruptions... merci à tous, j'avance à pas de géants grâce à ce forum.
EN: Libraries are my Gurus, they make me believe anything they want !
FR: Les librairies sont mes gourous, elles me font croire ce qu'elles veulent !

Go Up