这里有一些类似的问题,但我无法让它工作/找到解决方案。
我已经习惯了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中的摄像头是空的。我真的不明白这里的课是如何运作的,以及为什么一个空洞不会出现在课堂上。 :/
答案 0 :(得分:0)
答案 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()
{
...
}
}