繁体   English   中英

在另一个类中使用SoftwareSerial类的Arduino / C ++

[英]Arduino/c++ using SoftwareSerial class in another class

我正在尝试建立一些类,距离我编写OOP已有很长时间了,而且大部分时间我都忘了一切;)

我正在尝试在从SoftwareSerial中读取的内容中构建类,并在以后进行一些处理。

我编写了以下代码:

    #include <SoftwareSerial.h>

void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:

}

class pH
{
  int Stable;
  unsigned long previousMillis;
  long Gap;
  //SoftwareSerial pHrs(100,100);
  //SoftwareSerial portOne(100, 100);
  //SoftwareSerial pHrs = new SoftwareSerial(90,90);
  SoftwareSerial SerialPort;

  // Constructor - creates a pH
  // and initializes the member variables and state
  public: pH(uint8_t tx, uint8_t rx, long pHgap)
  {
    Gap = pHgap;
    //SerialPort(rx, tx);
  }

};

但是得到这个:

    /home/san/Projekty/pHmetr/rs8/rs8.ino: In constructor 'pH::pH(uint8_t, uint8_t, long int)':
rs8:26: error: no matching function for call to 'SoftwareSerial::SoftwareSerial()'
   {
   ^
/home/san/Projekty/pHmetr/rs8/rs8.ino:26:3: note: candidates are:
In file included from /home/san/Projekty/pHmetr/rs8/rs8.ino:1:0:
/home/san/.local/share/umake/ide/arduino/hardware/arduino/avr/libraries/SoftwareSerial/SoftwareSerial.h:89:3: note: SoftwareSerial::SoftwareSerial(uint8_t, uint8_t, bool)
   SoftwareSerial(uint8_t receivePin, uint8_t transmitPin, bool inverse_logic = false);

   ^
/home/san/.local/share/umake/ide/arduino/hardware/arduino/avr/libraries/SoftwareSerial/SoftwareSerial.h:89:3: note:   candidate expects 3 arguments, 0 provided
/home/san/.local/share/umake/ide/arduino/hardware/arduino/avr/libraries/SoftwareSerial/SoftwareSerial.h:47:7: note: constexpr SoftwareSerial::SoftwareSerial(const SoftwareSerial&)
 class SoftwareSerial : public Stream

       ^
/home/san/.local/share/umake/ide/arduino/hardware/arduino/avr/libraries/SoftwareSerial/SoftwareSerial.h:47:7: note:   candidate expects 1 argument, 0 provided
exit status 1
no matching function for call to 'SoftwareSerial::SoftwareSerial()'

我试图自己寻找解决方案,但不知何故我迷路了...

最好的Regadrs!

您应该通过初始化列表调用SoftwareSerial构造函数。

pH类的构造函数应如下所示:

public: pH(uint8_t tx, uint8_t rx, long pHgap)
  : SerialPort(rx, tx) // this is initializer list
{
  Gap = pHgap;
}
class pH
{
  int Stable;
  unsigned long previousMillis;
  long Gap;
  //SoftwareSerial pHrs(100,100);
  //SoftwareSerial portOne(100, 100);
  //SoftwareSerial pHrs = new SoftwareSerial(90,90);
  SoftwareSerial SerialPort;

  // Constructor - creates a pH
  // and initializes the member variables and state
  public: 
    pH(uint8_t tx, uint8_t rx, long pHgap)
      : SoftwareSerial(/* You should initalize your base class */) // <---
    {
      Gap = pHgap;
      //SerialPort(rx, tx);
    }
};

您应该在构造函数中初始化基类。

这两个建议都是正确的。

public: pH(uint8_t tx, uint8_t rx, long pHgap)
  : SerialPort(rx, tx) // this is initializer list
{
  Gap = pHgap;
}

是我需要的。谢谢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM