Besoin d'aide

Bonjour a tous
J’aurais besoin d’aide pour faire une bibliothèque perso
Je suis en train de faire un multiplexeur a base d’arduino pour mon bateau, il gère les protocoles nmea et seatalk.
Grâce a la contribution de Nick Gammon du forum usa que je remercie ici, j’ais pu avec ses bibliothèques hardwares 9 bits, faire un code qui marche.
Mais j’aimerais en faire une maintenant pour pouvoir plus facilement modifier le choix des phrases seatalk et pourquoi pas en faire profiter d’autres utilisateurs.
Et c’est la que je butes car le cpp c’est pas ma tasse de thé malgré de nombreuse lecture sur la manière de faire une bibliothèque pour arduino, pourriez vous m’aider ?

Le code original qui marche

unsigned char messages_seatalk[256],index = 0;
int cap_st,cap_vrais_st,cap_pilote_st,byte_seatalk;
signed char declinaison_st;
long intervale = 450 ; //a calculer pour avoir un bon affichage,pas mauvais avec 450
unsigned long actuel_millis;
int buffer_st = 255;

void setup()
{
   Serial.begin(4800) ; // liaison série à 4800 bauds avec le PC comme le debit seatalk
   //Serial.flush();
   Serial3.begin(4800) ; // liaison série à   4800 bauds en 9bits avec la version 1.0 et les fichiers changés
   //Serial1.flush();   a voir si bon
   delay(1000);   //temporisation de demmarage
}


void decryptage_st()    //decryptage des données pilote sea talk
{

  int i=0 ;
  actuel_millis = millis();
  while ((millis()-actuel_millis) <intervale);  //toute les 450 miliseconde
  while ((Serial3.available())&&(i< buffer_st)) messages_seatalk[i++]=Serial3.read(); // je remplis le tebleau avec les données serie1 juque a la taille du buffer
   
  switch(messages_seatalk[0])   // quel message seatalk?
   {
      case 0x9C:   // cap compas du pilote?
      cap_st=((unsigned int)((messages_seatalk[1]&0x30)>>4))*90 + (messages_seatalk[2]&0x3F)*2 + (messages_seatalk[1]&0xC0 ? (messages_seatalk[1]&0xC0==0xC0?2:1):0);
      Serial.print("CAP=");Serial.println(cap_st);
      Serial.flush(); //attente fin de transmission donnée
      cap_vrais_st = cap_st + declinaison_st;
        if(cap_vrais_st<0)
	  {
	   cap_vrais_st+=360;
	  }
	else if(cap_vrais_st>=360)
	  {
	   cap_vrais_st-=360;
	  }
      Serial.print("CAP VRAIS=");Serial.println(cap_vrais_st); //calcul du cap vrais
      Serial.flush(); //attente fin de transmission données
      break;

      case 0x84: // cap rentré dans le pilote?
      cap_pilote_st=((unsigned int)((messages_seatalk[1]&0x30)>>4))*90 + (messages_seatalk[2]&0x3F)*2 + (messages_seatalk[1]&0xC0 ? (messages_seatalk[1]&0xC0==0xC0?2:1):0);
      Serial.print("CAP PILOTE=");Serial.println(cap_pilote_st);
      Serial.flush(); //attente fin de transmission données
      break;

      case 0x99:  // declinaison?
      declinaison_st=-(signed char)(messages_seatalk[2]);
      Serial.print("DECLINAISON=");Serial.println(declinaison_st);
      Serial.flush(); //attente fin de transmission données
      break;
      

    }
}


void loop()
{
  decryptage_st();
}

Le fichier header de la biblio que je j’essais de faire

#ifndef DecryptageST_h
#define DecryptageST_h

#include "Arduino.h"

#define CAP_COMPAS_AUTO       0x84
#define CAP_COMPAS            0x9C
#define DECLINAISON           0x99

class DecryptageST
{
  public:

         //variables
        unsigned char messages_seatalk[256];
        int cap_st;
        int cap_vrais_st;
        int cap_pilote_st;
        signed char declinaison_st;
        long intervale; //a calculer pour avoir un bon affichage,pas mauvais avec 450
        unsigned long actuel_millis;
        int buffer_st;
        int i;


        //methodes
        void config_serial();
        int decryptage_st();
};

#endif

Le fichier cpp

#include <Arduino.h>
#include "DecryptageST.h"
#include <HardwareSerial.h>
#include <Print.h>


void DecryptageST::config_serial(void)
{
  Serial.begin(4800) ; // liaison série à 4800 bauds avec le PC comme le debit seatalk
   //Serial.flush();
   Serial3.begin(4800) ; // liaison série à   4800 bauds en 9bits avec la version 1.0 et les fichiers changés
   //Serial1.flush();   a voir si bon
   delay(1000);   //temporisation de demmarage
}

int DecryptageST::decryptage_st(void)
{

          
      int i=0 ;
      actuel_millis = millis();
     
      while ((millis()-actuel_millis) <intervale);  //toute les 450 miliseconde
      while ((Serial3.available())&&(i< buffer_st)) messages_seatalk[i++]=Serial3.read(); // je remplis le tebleau avec les données serie1 juque a la taille du buffer
   
      switch(messages_seatalk[0])   // quel message seatalk?
      {
       case CAP_COMPAS :   // cap compas du pilote?
       cap_st=((unsigned int)((messages_seatalk[1]&0x30)>>4))*90 + (messages_seatalk[2]&0x3F)*2 + (messages_seatalk[1]&0xC0 ? (messages_seatalk[1]&0xC0==0xC0?2:1):0);
       Serial.print("CAP=");Serial.println(cap_st);
       Serial.flush(); //attente fin de transmission donnée
       cap_vrais_st = cap_st + declinaison_st;
        if(cap_vrais_st<0)
	  {
	   cap_vrais_st+=360;
	  }
	else if(cap_vrais_st>=360)
	  {
	   cap_vrais_st-=360;
	  }
       Serial.print("CAP VRAIS=");Serial.println(cap_vrais_st); //calcul du cap vrais
       Serial.flush(); //attente fin de transmission données
       break;

       case CAP_COMPAS_AUTO : // cap rentré dans le pilote?
       cap_pilote_st=((unsigned int)((messages_seatalk[1]&0x30)>>4))*90 + (messages_seatalk[2]&0x3F)*2 + (messages_seatalk[1]&0xC0 ? (messages_seatalk[1]&0xC0==0xC0?2:1):0);
       Serial.print("CAP PILOTE=");Serial.println(cap_pilote_st);
       Serial.flush(); //attente fin de transmission données
       break;

       case DECLINAISON :  // declinaison?
       declinaison_st=-(signed char)(messages_seatalk[2]);
       Serial.print("DECLINAISON=");Serial.println(declinaison_st);
       Serial.flush(); //attente fin de transmission données
       break;

      }
}

le programme ino

#include <DecryptageST.h>

void setup()
{
   DecryptageST.config_serial();
}
void loop()
{
   
  DecryptageST.decryptage_st();
}

Et j’ai ce message d’erreur lors de la compil sur ma version 1.01 de l’ide arduino

decryptage_st.cpp: In function ‘void setup()’:
decryptage_st:4: error: expected unqualified-id before ‘.’ token
decryptage_st.cpp: In function ‘void loop()’:
decryptage_st:9: error: expected unqualified-id before ‘.’ token

Il y a un problème mais ou ?

Bonjour,

Ta class DecryptageST doit être instanciée, c’est à dire que tu dois déclarer une variable du type DecryptageST.

#include <DecryptageST.h>

DecryptageST decryptage;

void setup()
{
   decryptage.config_serial();
}
void loop()
{
   
  decryptage.decryptage_st();
}

Bonsoir

J’ais fait ta manip et j’ais obtenue d’autres, message d’erreur, qui avait l’air de venir de la non reconnaissance de caractère par l’ide, après réflexion je pense que ça vient de l’éditeur de texte que j’utilise pour mes fichier et qui semble incompatible avec l’edteur Arduino, après avoir réenregistrer mon ccp et mon h avec l’ide arduino, ça compile !!! Bien que sur mon shield j’ais pas de réaction, va falloir que je vérifie le code de ma routine de décryptage dans ma nouvelle librairie mais c’est un grand pas en avant grâce a toi.

Un grand merci pour ton aide.