Libreria per gestione display VFD

Buongiorno a tutti,
chiedo la cortesia di un aiuto a risolvere un problema relativo all'istanziazione di una seriale SW all'interno di una libreria che la usa.

Provo a dettagliare meglio. Ho scritto una libreria che si chiama VFDLIB costituita dai suoi .h e .cpp.
Il display in oggetto ha bisogno di una seriale, per cui ho istanziato una seriale all'interno del codice .cpp della libreria stessa. In prima battuta, giusto epr fare delle prove ho fissato manualmente i due pin TX ed RX, poi ho pensato che questa seriale la userà solo la mia libreria per cui ho provato a parametrizzare nel costruttore i due pin TX ed RX e qui mi sono fermato.
In pratica se nel codice .cpp della VFDLIB inserisco questo costruttore:

VFDLIB::VFDLIB (int pinTX, int pinRX) {
SoftwareSerial mySerial(pinTX,pinRX);
}

il metodo init della libreria VFDLIB che usa mySerial, in questo caso:

void VFDLIB::init (void) {
mySerial.write(0x1B);
mySerial.write(0x40);
}

non conosce l'oggetto mySerial. Questo è il messaggio di errore:

exit status 1
'mySerial' was not declared in this scope

Lo scopo che voglio raggiungere è di chiamare la VFDLIB in questo modo:

VFDLIB myVFD(10,11); dove 10 e 11 sono i pin della softwareserial.

Con molta probabilità c'è una soluzione differente e soprattutto funzionante. Vi chiedo la cortesia di un aiuto.

Grazie a tutti,
Enrico

La software seriale è definita soltanto all'interno del metodo costruttore della classe e quindi la puoi usare solo li.

Devi aggiungere il riferimento alla software serial come proprietà della classe e poi nel costruttore la inizializzi.

In altre parole tra le proprietà private della classe aggiungi

SoftwareSerial *mySerial;

Poi per usarla dovrai usare la notazione per puntatori -> al posto di .

Grazie infinite!!!
Chiarissimo, opero immediatamente.

Enrico

Ora che sono al PC ho modo di scrivere meglio. Prova con un qualcosa del genere (non testato)

#include "Arduino.h"
#include <SoftwareSerial.h>

class VFDLIB{
  private:
    SoftwareSerial * mySerial;

  public:
    VFDLIB (int pinRX, int pinTX) ;

    void init();
    // other prototypes
};



VFDLIB::VFDLIB (int pinRX, int pinTX) {
   mySerial= new SoftwareSerial(pinRX, pinTX);
   mySerial->begin(BAUD_RATE);
}

Ti ringrazio moltissimo per l'aiuto e l'interesse al mio problema che stai dimostrando. Sol oper questo grazie!
Purtroppo però non funziona, compila regolarmente ma non funziona. Tra l'altro mi sono accorto adesso (poichè anche io non avevo avuto modo di provare prima) che anche istanziando la mySerial dentro il .cpp con valori fissi non scrive sulla seriale.

Sembrerebbe che l'unico modo per scrivere sulla seriale è instanziare tutto nel file di progetto principale senza usare la libreria. Vorrei evitare il blobbone però...

Quello che non capisco però è che se lascio la libreria senza l'instanziazione della softwareserial (e la faccio nel file principale) quando compilo il compilatore non mi risolve le chiamate dentro la libreria VFDLIB.ccp alla mySerial dicendomi che non la trova ....

Insomma sembrerebbe (ma sono certo che sono io che sbaglio) che non si riesce ad usare la softwareserial da dentro la libreria.

Enrico

Come non detto, sono io che sono una capra!!!
Ero tanto preso dal problema della libreria che non ho fatto caso che avevo dichiarato int la variabile che contiene la velocità della seriale. Siccome per essere più veloce l'ho portata a 38400 dimenticandomi del fatto che un intero si ferma a 32767...

Chiedo venia.

Grazie ancora per l'ENORME aiuto che mi hai dato! Funziona tutto.

Enrico

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.