Go Down

Topic: Tableau d'objets (Read 933 times) previous topic - next topic

Franxoois

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: [Select]

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


Vovov

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 !?!

Franxoois

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 ???  

Vovov

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 !?

Jean-François

Tu déclares ton tableau avant le setup,

Code: [Select]
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.
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

Franxoois

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

Go Up