Utiliser les classes avec L'Arduino

j'essaie d'utiliser des objets de classe avec L'class="blnk">Arduino, mais j'ai toujours des problèmes. Tout ce que je veux c'est déclarer une classe et créer un objet de cette classe. Ce serait un exemple?

27
demandé sur Peter Mortensen 2009-11-15 02:36:40

7 réponses

Sur un Arduino 1.0, cette compile parfaitement:

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);
}
16
répondu Warren MacEvoy 2012-10-06 15:14:15

Il y a un excellent tutoriel sur la façon de créer une bibliothèque pour la plateforme Arduino. Une bibliothèque est essentiellement une classe, donc il devrait vous montrer comment tout est fait.

sur Arduino vous pouvez utiliser des classes, mais il y a quelques restrictions:

  • Pas de nouvelles et de supprimer des mots clés
  • Pas d'exceptions
  • Pas de libstdc++, donc pas de fonctions standard, les modèles ou les classes

Vous devez également créer de nouveaux fichiers pour votre les cours, vous ne pouvez pas les déclarer dans votre sketch principal. Vous devrez également fermer L'IDE Arduino lors de la recompilation d'une bibliothèque. C'est pourquoi J'utilise Eclipse comme IDE Arduino.

12
répondu Johan 2014-12-12 08:44:44

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1230935955 états:

par défaut, L'IDE Arduino et les bibliothèques n'utilisent pas l'opérateur nouvelle et l'opérateur delete. Il n' soutien de la fonction malloc() et free(). De sorte que le la solution consiste à mettre en œuvre des supprimer des opérateurs pour vous-même, à utiliser ces fonctions.

Code:

#include <stdlib.h> // for malloc and free
void* operator new(size_t size) { return malloc(size); } 
void operator delete(void* ptr) { free(ptr); }

vous allez créer des objets, par exemple,

C* c; // declare variable
c = new C(); // create instance of class C
c->M(); // call method M
delete(c); // free memory

ce qui Concerne, tamberg

5
répondu tamberg 2013-11-13 20:06:42

j'en ai créé un simple il y a quelques temps. Le principal défi que j'ai eu était de créer un bon environnement de construction - un makefile qui compilerait et lierait/déploierait tout sans avoir à utiliser l'interface graphique. Pour le code, voici l'en-tête:

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();
};

et voici la source principale

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();
    }
}

C'est plus joliment formaté ici: http://amkimian.blogspot.com/2009/07/trivial-led-class.html

Pour l'utilisation, je n'ai tout simplement quelque chose de ce genre .pde fichier:

#include "AM_Led.h"

#define TIME_LED    12   // The port for the LED

AMLed test(TIME_LED);
3
répondu Alan Moore 2012-05-28 08:43:59

Mon Webduino bibliothèque est basé sur une Classe C++ qui implémente un serveur web sur le bouclier Arduino Ethernet. J'ai défini toute la classe en a.h fichier que n'importe quel code Arduino peut #inclure. N'hésitez pas à regarder le code pour voir comment je le fais... J'ai fini par tout Définir en ligne parce qu'il n'y a aucune raison de compiler séparément des objets avec L'IDE Arduino.

1
répondu Ben Combee 2009-11-18 02:24:13

pouvez-vous donner un exemple de ce qui n'a pas fonctionné? Comme vous le savez probablement, le langage de câblage est basé sur C / C++, cependant,en C++ est pris en charge.

si vous êtes autorisé à créer des classes dans L'IDE de câblage, Je ne suis pas sûr (mon premier Arduino est dans le courrier en ce moment). Je sais que si vous avez écrit Une Classe C++, compilé en utilisant AVR-GCC, puis chargé sur votre Arduino en utilisant AVRDUDE, il pourrait fonctionner.

1
répondu John Paulett 2012-05-27 22:33:56

cette page, le croquis D'Arduino définit quelques structures (plus quelques méthodes) qui sont ensuite appelées dans la boucle de setup et la boucle principale. Assez Simple à interpréter, même pour un programmeur à peine instruit comme moi.

0
répondu ropable 2009-12-07 03:43:08