Pages: [1]   Go Down
Author Topic: Libreria con chiamata alla classe String  (Read 367 times)
0 Members and 1 Guest are viewing this topic.
Selvazzano Dentro - Padova
Offline Offline
God Member
*****
Karma: 28
Posts: 931
"Chi sa fa, chi non sa insegna"
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21624
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged


Selvazzano Dentro - Padova
Offline Offline
God Member
*****
Karma: 28
Posts: 931
"Chi sa fa, chi non sa insegna"
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie Leo, ora ci provo e ti so dire.
Logged

Selvazzano Dentro - Padova
Offline Offline
God Member
*****
Karma: 28
Posts: 931
"Chi sa fa, chi non sa insegna"
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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.
« Last Edit: October 19, 2012, 12:26:38 pm by cyberhs » Logged

Selvazzano Dentro - Padova
Offline Offline
God Member
*****
Karma: 28
Posts: 931
"Chi sa fa, chi non sa insegna"
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

Pages: [1]   Go Up
Jump to: