如何在Arduino中正确创建/使用类

时间:2015-10-01 08:00:21

标签: c++ arduino

这里有一些类似的问题,但我无法让它工作/找到解决方案。

我已经习惯了java,我可以很容易地构建和调用类,但是我无法在arduino中获得任何工作。经过十几次提示后,我就这样构建了它:

#include <Servo.h>

Servo CameraServo1;
Servo CameraServo2;
int CameraServo1Pin = 2;
int CameraServo2Pin = 3;
int CameraAngle;
int CameraAngle2;
char incomingCharacter = 0; // Setting up a character variable

void setup() {
  Serial.begin(9600);
  CameraServo1.attach(CameraServo1Pin);
  CameraServo2.attach(CameraServo2Pin);
  //Initialize camera by setting the servo's to the default 90 degree position.
  init.camera();
}

void loop() {
  // Check if something is being received
  if (Serial.available() > 0)
  {
    // read the incoming character:
    incomingCharacter = Serial.read();
    Serial.println("OK!"); // Send OK back to laptop
    switch (incomingCharacter)
    {
      case 'w': // Case block
        ServoControl.forward();
        break;
      case 's': // Case block
        ServoControl.reverse();
        break;
    }
  }
}

class init
{
  public:
    camera();
};

init::camera()
{
  ServoControl.CameraAngle = 90;
  ServoControl.CameraAngle2 = 90;
  CameraServo1.write(90);
  CameraServo2.write(90);
}

class ServoControl
{
    public forward();
    public reverse();
};

ServoControl::reverse()
{
  CameraAngle = CameraAngle - 5;
  CameraAngle2 = CameraAngle2 - 5;
  CameraServo1.write(CameraAngle);
  CameraServo2.write(CameraAngle2);
}

ServoControl::forward()
{
  CameraAngle = CameraAngle + 5;
  CameraAngle2 = CameraAngle2 + 5;
  CameraServo1.write(CameraAngle);
  CameraServo2.write(CameraAngle2);
}

但我不能让它从类中调用该函数(例如来自类init的void camera),而不会给我一个错误,即init中的摄像头是空的。我真的不明白这里的课是如何运作的,以及为什么一个空洞不会出现在课堂上。 :/

2 个答案:

答案 0 :(得分:0)

检查语法。

这是一个关于如何在Arduino中编写类的简短教程:

https://www.arduino.cc/en/Hacking/LibraryTutorial

答案 1 :(得分:0)

C ++在某些方面与Java非常相似,就像你必须正确声明函数(成员或非成员),包括返回类型(你不能为{做什么) {1}}功能)。

在其他方面,C ++与Java非常不同,就像您不必为每个成员指定访问/可见性(就像在init::camera类中那样)。

此外,C ++和Java类都是抽象描述,而不是实际的对象实例,如果要在类中使用非静态成员函数,则需要首先创建该类的实例

如果您想了解有关C ++的更多信息,可能需要查看The Definitive C++ Book Guide and List

正如zstewart在评论中指出的那样,在C ++中你根本不需要课程。函数可以在全局范围内独立,在这种情况下,看起来根本不需要这些类。如果仍然想使用某种范围,那么使用ServoControl可能是一个更好的主意。例如

namespace

这可以被称为

namespace init
{
    void camera()
    {
        ...
    }
}