Pages: [1]   Go Down
Author Topic: Tableau d'objets  (Read 891 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 39
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut,

Je voudrais faire un peu de polymorphisme dans un bout de code arduino. Je sais que ce n'est pas optimum mais j'ai un peu de place et je voudrais garder mes réflexes de Java. Maintenant en C et les pointeurs, c'est une autre histoire ...

Dans l'idéale, je voudrais utiliser un tableau d'une taille variable mais limité, contenant des d'objets que j'appellerai en boucle, chacun faisant son boulot. Le pc communique avec la carte arduino pour lui donner le type et le nombre d'objet à faire bosser.

Je tatonne entre les new, les malloc, les * mais je n'arrive pas à trouver la combinaison qui fonctionne ... quelqu'un peut-il me donner un coup de pouce ?

Code:
class Animal
{
  protected :
  int _num ;
  
  public :
  Animal(){}
  Animal( int num )
  {
    _num = num ;
  }

  virtual void parle(){} ; // methode virtuelle pure a redefinir dans les sous classes
};

class Chien :
public Animal
{
  public :
  
  Chien( int num ):
  Animal( num )
  {
  }
  
  virtual void parle()
  {
    Serial.println("wouarf");
  }
};

class Chat :
public Animal
{
  public :
  
  Chat( int num ):
  Animal( num )
  {
  }
  
  virtual void parle()
  {
    Serial.println("miaou");
  }
};

Animal * betes = new Animal[20] ;
int nbBetes = 0 ;

void setup()
{
  Serial.begin(9600);
    
  betes[nbBetes++] = new Chat(1);
  betes[nbBetes++] = new Chien(2);
}

void loop()
{
  
  for( int i = 0 ; i < nbBetes ; i++ )
  {
    betes[i]->parle();
    Serial.println( millis() );
    delay( 1000 );
  }  
}
Logged

Suisse
Offline Offline
Newbie
*
Karma: 0
Posts: 17
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Intéressant, ça pourrait être une façon de "simuler" du multi-tâche si chaque animal était un "thread" et à lui de savoir s'il passe son tour ou non.. c'est ça ton idée ?

Sinon je peux pas t'aider car j'ai pas encore reçu mon Arduino pour essayer... mais à lire le code je ne vois pas le problème !?!
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 39
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ca permet surtout d'avoir une liste d'objets qui ne font pas du tout la même chose mais que j'appelle de la même façon.

Le truc bizarre c'est qu'on dirait qu'il est impossible en C de créer des objets dans la fonction setup() pour s'en servir dans le loop(). Dès qu'on sort du scope d'une fonction, les objets sont détruits. Y'a pas de listes d'objets globals en C ???  
Logged

Suisse
Offline Offline
Newbie
*
Karma: 0
Posts: 17
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Oui mais t'as quand même une idée pratique derrière la tête non ? Car pour faire du polymorphisme "théorique" Arduino te sert pas à grand chose !?
Logged

Geneva
Offline Offline
Faraday Member
**
Karma: 30
Posts: 3231
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Tu déclares ton tableau avant le setup,

Code:
int animal[4] = {1,3,2,4};

void setup (){
}

Void loop(){
}

De cette façon ton tableau est atteignable par toutes les fonctions, setup, loop ou autres.
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

0
Offline Offline
Newbie
*
Karma: 0
Posts: 39
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bein disons que c'est ce que je fais mais dans le cas de tableau d'objets, ça ne marche pas.
Logged

Pages: [1]   Go Up
Jump to: