Tu peux bien évidemment créer des librairies sans utiliser les classes, mais le gros avantages du C++, est justement de pouvoir gérer des classes. Et crois moi, une classe bien faite, c'est que du bonheur à utiliser.
Dans ce que tu veux faire, tu souhaites gérer ton tableau de valeur depuis l'extérieur de ta classe, pourquoi ne pas justement le gérer en interne à ta classe, et de prévoir une fonction qui te retourne le pointeur sur ton tableau? Du coup pour ton constructeur, tu n'as plus que 2 paramètres, nombre de canaux et hystérisis, ton tableau était une propriété de ta classe, tu peux donc le créer avec un malloc de la taille passé en paramètre. la fonction PPMread.read() y aura accés également et pourra le modifier avec les mesures, et tu ajoutes une méthode PPMread.getTable() qui retourne ton pointeur.
Dans le sketch, en variable globale, tu te créé un pointeur de même type que le tableau que tu gères dans la classe, et également une variable de type de ta classe PPMread
Tu créés un nouvelle objet de classe PPMread sur ta variable de même type précédemment créé
Tu appels dans le setup la fonction PPM.getTable() pour récupérer l'adresse du tableau géré dans la classe et la mettre dans le pointeur global que tu auras créé.
Dans le loop, tu appels PPMread.read() qui mettra les valeurs du tableau à jour, et comme ton pointeur globale contient la bonne adresse, tu y auras accés directement dans le loop, sans autre intervention.
Exemple rapide :
PPMread.h
#ifndef PPMREAD_H
#define PPMREAD_H
#include "Arduino.h"
class PPMread
{
public:
PPMread(unsigned int pNbrCanaux = 0, unsigned int pHysteresis = 3);
void read();
unsigned int * getTable();
private:
unsigned int cHysteresis;
unsigned int cNbrCanaux;
unsigned int * cTabValeur;
};
#endif
PPMread.cpp
#include <PPMread.h>
PPMread::PPMread(unsigned int pNbrCanaux, unsigned int pHysteresis)
{
cHysteresis = pHysteresis;
cNbrCanaux = pNbrCanaux;
cTabValeur = (unsigned int*)malloc(sizeof(unsigned int) * pNbrCanaux);
}
void PPMread::read()
{
for(unsigned int idxCanal = 0; idxCanal <= cNbrCanaux; idxCanal ++)
{
cTabValeur[idxCanal] = 0; // A remplacer par le code de lecture
}
}
unsigned int * PPMread::getTable()
{
return cTabValeur;
}
sketch :
#include <PPMread.h>
unsigned int * tabValeurPPMread;
PPMread objPPMread(3,4);
void setup()
{
tabValeurPPMread = objPPMread.getTable();
}
void loop()
{
objPPMread.read();
// tu peux ajouter du code pour lire les données du tableau
}