Go Down

Topic: Libreria con chiamata alla classe String (Read 479 times) previous topic - next topic

cyberhs

All'interno dello header di una mia libreria, ho dichiarato String il valore di ritorno di una funzione, ma il compilatore mi dice che non riconosce il "tipo".

Probabilmente devo fare una qualche dichiarazione, poiché è una classe esterna, ma non so come fare.
Code: [Select]

public:
void Begin(char PinRx, char PinTx, unsigned int Baud);
void Play(unsigned int Track);
             void Stop();
             void Pause();
char Vol();
void Vol(char Volume);
void VolUp();
void VolDown();
String Response();            //  error: 'String' does not name a type


leo72

Tempo fa ho avuto un problema simile anche io.
In pratica non riconosceva un analogRead messo nel costruttore di una classe. Sul forum internazionale mi hanno spiegato che ciò dipende da come è strutturata l'IDE e su come l'IDE "assembla" il sorgente finale da passare al parser. Fino ad un certo punto del codice i metodi di Arduino sono esterni alle classi.

Prova a fare così. Prova a spostare la dichiarazione in un metodo init che aggiungi alla libreria. Se la String lì viene vista è lo stesso problema che ebbi a suo tempo.

cyberhs

Grazie Leo, ora ci provo e ti so dire.

cyberhs

#3
Oct 19, 2012, 06:54 pm Last Edit: Oct 19, 2012, 07:26 pm by cyberhs Reason: 1
La soluzione era semplice: avevo omesso di inserire nell'Header #include "Arduino.h" in cui sono definiti tutti i tipi utilizzati da Arduino.

Ora, però, è emerso un altro problema: nel file CPP nella Begin creo una istanza della SoftwareSerial nominandola SerialAux.
Code: [Select]

void FT862M::Begin(byte PinRx, byte PinTx, unsigned int Baud) {
SoftwareSerial SerialAux(PinRx, PinTx); // crea porta seriale ausiliaria
SerialAux.begin(Baud); // inizializza porta seriale ausiliaria
};

Purtroppo, nel codice dove cerco di utilizzarla, il compilatore dice:  error: 'SerialAux' was not declared in this scope

E' evidente che potrei dichiararla ed inizializzarla nella main di Arduino, ma mi chiedo se non esista un'altra soluzione.

cyberhs

Correzione.

Ho creato ed istanziato la classe SoftwareSerial creando l'oggetto SerialAux all'interno del mio sketch.

All'interno di una mia libreria, uso un paio di funzioni di SerialAux: la print() e la write().

Il compilatore mi dice error: 'SerialAux' was not declared in this scope

E' evidente che all'interno della mia libreria devo fare riferimento all'oggetto creato esternamente, ma non so come fare.

Qualcuno sa come usare extern o quello che è necessario?

Go Up