Problema passaggio metodo cpp

di il
2 risposte

Problema passaggio metodo cpp

Ho un problema con Arduino con il seguente codice in cpp:

File principale: prova.ino

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

SoftwareSerial mySerial(2, 3);
rs_485 rtx_485; //Inizializza la classe

void setup() {
mySerial.begin(9600);
}

void loop() {
rtx_485.rxd(mySerial.read());
}

----------------------------------------------------
file: ll.h

#ifndef __LL_H__
#define __LL_H__

#include <arduino.h>

class rs_485
{
private:

public:
rs_485(); //Costruttore
void rxd(byte rx);
void txd(); //not work
};
#endif
---------------------------------------------
file: ll.cpp

#include "ll.h"

//Costruttore
rs_485::rs_485()
{

}

void rs_485::rxd(byte rx)
{
//...
}

void rs_485::txd()
{
mySerial.write(2); //Not work
}
------------------------------
error:

ll.cpp: In member function 'void rs_485::txd()':
ll.cpp:16: error: 'mySerial' was not declared in this scope

In particolare, devo chiamare il metodo "mySerial.write" dal file ll.cpp, forse dovrei passare la classe myserial alla classe rx_485 ma non so come fare.https://www.iprogrammatori.it/forum-programmazione/posting.php?mode=post&f=24#
Grazie

2 Risposte

  • Re: Problema passaggio metodo cpp

    A quanto ne so non è possibile dividere il codice in più file con Arduino, deve essere tutto contenuto nel .ino

    Edit: Tratta i tuoi file .h/.cpp come fossero una libreria. Prendi ciò che hai scritto, inseriscilo in una cartella, e metti tutto nella directory "libraries". A questo punto dovrebbe andare
    http://www.xploreautomation.com/how-to-crea-la-tua-prima-libreria-per-arduino/
  • Re: Problema passaggio metodo cpp

    Grazie per la risposta,
    ma ho già risolto con le indicazioni di Hackscribble sul forum di arduino:
    
    #include <SoftwareSerial.h>
    
    class rs_485
    {
      private:
        SoftwareSerial& _port;
        
      public:
        rs_485(SoftwareSerial& port): _port(port)
        {
          
        };
        int rxd()
        {
          if (_port.available())
          {
            return _port.read();
          }
          else
          {
            return -1;
          }
        };
        void txd(byte b)
        {
          _port.write(b);
        };
    };
    
    
    SoftwareSerial mySerial(3, 4);
    
    rs_485 myRS485(mySerial);
    
    
    void setup()
    {
    }
    
    void loop()
    {
    }
    
    Grazie ancora
Devi accedere o registrarti per scrivere nel forum
2 risposte