Problème avec librairie : "expected identifier before numeric constant"

Bonjour,

Je suis en train de batailler avec mon code depuis un moment car Arduino 1.0.6 utilise une acienne version du langage C et qui n’autorise pas la déclaration immédiate d’objets dans le fichier .h d’une librairie.

Voici mon problème : j’essaye d’initialiser “SoftwareSerial serial_connection(GPS_TX, GPS_RX);” dans mon fichier header de ma librairie, et l’IDE me sort “expected identifier before numeric constant”.

J’ai donc essayé de remplacer les chiffres (13 et 12) par des constantes que je nomme GPS_TX et GPS_RX. Ca ne fonctionne toujours pas. Voici mon code :

#ifndef AM_h

#define AM_h

#if defined(ARDUINO) && ARDUINO >= 100
  #include "Arduino.h"
  #else
  #include "WProgram.h"
#endif

#include <Wire.h>
#include <LSM303.h>
#include <math.h>
#include <TinyGPS++.h>
#include <SoftwareSerial.h>

#define GPS_TX 13;
#define GPS_RX 12;

class AM{
public:
	AM();
	float actual_distance;

	void initialize();
	void assignDistance(float distance);
	float getAltitude();
	float getHeading();
	float getTemperature();
	float getPressure();
	float getSpeed();

	SoftwareSerial serial_connection(GPS_TX, GPS_RX);
	TinyGPSPlus gps;
[...]

Du coup, si je l’initialise dans la classe (le fichier .cpp), je ne pourrai pas utiliser mon objet serial_connection dans toutes les méthodes de ma classe, je ne pourrai l’utiliser que à l’endroit (la méthode) dans laquelle je l’ai appelé pour l’initialiser.

Merci pour votre aide!

Pourquoi utiliser 1.0.6?
(Les classes c'est pas du C mais du C++)

Regardez comment font des librairies qui utilisent un port série (par exemple cette classe pour GPS (--> On passe le port série au constructeur ce qui permet de gérer soit un port série hardware ou un software)

Merci J-M-L ! J'utilise la 1.0.6 car j'avais des soucis avec la 1.8 au niveau de la fonction pulseIn() qui ne fonctionnait qu'en 1.0.6. Je lisais les PPM de mon récepteur avec un pulseIn() (je sais c'est pas joli mais c'est pour une fonction non critique dans mon programme) qui ne fonctionnait que sur la 1.0.6.

Ceci dit, je ne trouve aucun tutoriel qui décrit clairement comment utiliser ma puce GPS Neo 6M de manière simple.

Bonne soirée!

Enlève des ; à la fin des #define

fdufnews, ça ne fonctionne toujours pas :
“expected ‘,’ or ‘…’ before numeric constant” et “expected identifier before numeric constant” à la même ligne.

#define GPS_TX 13
#define GPS_RX 12

class AM{
public:
AM();
float actual_distance;

void initialize();
void assignDistance(float distance);
float getAltitude();
float getHeading();
float getTemperature();
float getPressure();
float getSpeed();

//SoftwareSerial serial_connection(GPS_TX, GPS_RX); //RX=pin 10, TX=pin 11
//TinyGPSPlus gps;

void processDOF10();
SoftwareSerial gpsSerial(GPS_RX, GPS_TX);
TinyGPS gps;
[…]

Bonjour,

Tu ne peux pas déclarer de paramètres dans le constructeur d'une classe incluse dans une classe.

la bonne façon de faire c'est comme indiqué en #1 - et votre librairie sera d'autant plus flexible.

C'est à dire mettre à jour Arduino ?

Non - ça ne fonctionnera pas

Il faut passer le port série instancié au constructeur ce qui donne à l'utilisateur de votre libraire le choix de gérer soit un port série hardware ou un software sur les pins qu'il souhaite, pas forcément des pins arbitraires codées en dur