我正在尝试使用Arduino的类对象,但我一直遇到问题。我想要做的就是声明一个类并创建该类的对象。一个例子是什么?
答案 0 :(得分:18)
在Arduino 1.0上,这个编译得很好:
class A
{
public:
int x;
virtual void f() { x=1; }
};
class B : public A
{
public:
int y;
virtual void f() { x=2; }
};
A *a;
B *b;
const int TEST_PIN = 10;
void setup()
{
a=new A();
b=new B();
pinMode(TEST_PIN,OUTPUT);
}
void loop()
{
a->f();
b->f();
digitalWrite(TEST_PIN,(a->x == b->x) ? HIGH : LOW);
}
答案 1 :(得分:13)
有an excellent tutorial on how to create a library for the Arduino platform。一个库基本上是一个类,所以它应该向你展示它是如何完成的。
在Arduino上你可以使用类,但有一些限制:
您还需要为您的课程创建新文件,您不能只在主草图中声明它们。重新编译库时,还需要关闭Arduino IDE。这就是为什么我使用Eclipse作为我的Arduino IDE。
答案 2 :(得分:5)
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1230935955州:
默认情况下,Arduino IDE和 库不使用运算符 new和operator delete。确实如此 支持malloc()和free()。所以 解决方案是实现新的和 为自己删除运算符,使用 这些功能。
代码:
#include <stdlib.h> // for malloc and free void* operator new(size_t size) { return malloc(size); } void operator delete(void* ptr) { free(ptr); }
这就是你创建对象,例如
C* c; // declare variable
c = new C(); // create instance of class C
c->M(); // call method M
delete(c); // free memory
此致 tamberg
答案 3 :(得分:3)
我一会儿创造了这个简单的。我面临的主要挑战是创建一个良好的构建环境 - 一个makefile,可以编译和链接/部署所有内容,而无需使用GUI。对于代码,这里是标题:
class AMLed
{
private:
uint8_t _ledPin;
long _turnOffTime;
public:
AMLed(uint8_t pin);
void setOn();
void setOff();
// Turn the led on for a given amount of time (relies
// on a call to check() in the main loop()).
void setOnForTime(int millis);
void check();
};
这是主要来源
AMLed::AMLed(uint8_t ledPin) : _ledPin(ledPin), _turnOffTime(0)
{
pinMode(_ledPin, OUTPUT);
}
void AMLed::setOn()
{
digitalWrite(_ledPin, HIGH);
}
void AMLed::setOff()
{
digitalWrite(_ledPin, LOW);
}
void AMLed::setOnForTime(int p_millis)
{
_turnOffTime = millis() + p_millis;
setOn();
}
void AMLed::check()
{
if (_turnOffTime != 0 && (millis() > _turnOffTime))
{
_turnOffTime = 0;
setOff();
}
}
这里的格式更加精美:http://amkimian.blogspot.com/2009/07/trivial-led-class.html
要使用,我只需在.pde文件中执行以下操作:
#include "AM_Led.h"
#define TIME_LED 12 // The port for the LED
AMLed test(TIME_LED);
答案 4 :(得分:1)
你能提供一些不起作用的例子吗?您可能知道,Wiring language基于C / C ++,not all of C++ is supported。
是否允许您在Wiring IDE中创建类,我不确定(我的第一个Arduino现在正在邮件中)。我知道如果你编写了一个C ++类,使用AVR-GCC编译它,然后使用AVRDUDE将它加载到你的Arduino上,它就可以了。
答案 5 :(得分:1)
我的Webduino library都基于一个C ++类,它在Arduino以太网屏蔽之上实现了一个Web服务器。我在.h文件中定义了整个类,任何Arduino代码都可以#include。请随意查看代码以了解我是如何做到的...我最后只是将其全部内联定义,因为没有真正的理由使用Arduino IDE单独编译对象。
答案 6 :(得分:0)
在this page上,Arduino草图定义了几个Structs(加上几个方法),然后在setup循环和主循环中调用它们。简单到足以解释,即使是像我这样几乎没有文化的程序员。