Я пытаюсь использовать объекты класса с Arduino, но у меня все время возникают проблемы. Все, что я хочу сделать, это объявить класс и создать объект этого класса. Какой пример?
Использование классов с Arduino
Ответ 1
В 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);
}
Ответ 2
Существует отличный учебник о том, как создать библиотеку для платформы Arduino. Библиотека - это в основном класс, поэтому он должен показать вам, как все это делается.
В Arduino вы можете использовать классы, но есть несколько ограничений:
- Нет новых и удалить ключевые слова
- Без исключений
- Нет libstdС++, поэтому нет стандартных функций, шаблонов или классов
Вам также нужно создавать новые файлы для своих классов, вы не можете просто объявить их в своем основном эскизе. Вам также нужно будет закрыть Arduino IDE при перекомпиляции библиотеки. Вот почему я использую Eclipse в качестве моей среды разработки Arduino.
Ответ 3
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1230935955:
По умолчанию, IDE Arduino и библиотеки не используют оператора новый и оператор удалить. Оно делает поддержка 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
Ответ 4
Я создал этот простой экземпляр. Основная задача, которую я поставил перед собой, - создать хорошую среду сборки - make файл, который будет компилировать и связывать/развертывать все, не используя графический интерфейс. Для кода здесь находится заголовок:
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);
Ответ 5
Можете ли вы привести пример того, что не сработало? Как вы, вероятно, знаете, Язык проводки основан на C/С++, однако поддерживается не все С++.
Если вам разрешено создавать классы в проводной среде IDE, я не уверен (мой первый Arduino находится по почте прямо сейчас). Я знаю, что если вы написали класс С++, скомпилировали его с помощью AVR-GCC, затем загрузили его на Arduino, используя AVRDUDE, это сработает.
Ответ 6
My Библиотека Webduino основана на классе С++, который реализует веб-сервер поверх экрана Arduino Ethernet. Я определил весь класс в файле .h, который любой код Arduino может содержать #include. Не стесняйтесь смотреть на код, чтобы увидеть, как я это делаю... Я закончил тем, что просто определил все это в строке, потому что нет реальной причины отдельно компилировать объекты с помощью Arduino IDE.
Ответ 7
В эта страница, эскиз Arduino определяет пару Structs (плюс несколько методов), которые затем вызывают в цикле настройки и основной цикл. Достаточно просто для интерпретации, даже для малограмотного программиста, подобного мне.