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 ?