Pages: [1]   Go Down
Author Topic: Comment marche un tableau?  (Read 1349 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 22
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

Ceci est une question purement de programmation.
Dans mon projet de code, j'ai à de multiple reprise besoin de savoir combien de temps s'est écoulé entre 2 passages au même endroit dans la boucle.
J'ai donc créé une fonction qui avait pour objectif de me retourner 2 valeurs de sortie en fonction de 2 valeurs d'entrée.
Pour moi qui suis débutant en programmation rien ne m'aurait choqué dans la phrase précédente. Mais ce qu'il faut savoir, c'est qu'une fonction ne peut retourner qu'une seule valeur (en l'état actuel de mes connaissances).
On m'a alors parler de tableaux.
Soit...
Le programme que je trouve ici et là n'éclairent pas spécialement ma lanterne. Il y a aussi des histoire de typedef...
Pour tout vous dire je suis un peu paumé.
Si vous avez un lien vers un site expliquant clairement les histoires de tableaux, typedef,... je suis preneur
Pour info voici mon code:
Code:
unsigned long Tzob = 0;
unsigned long Tloopzob = 0;

void setup(){
  Serial.begin(9600);
}

void FTloop(unsigned long Told,unsigned long Tloop)
{
unsigned long Tactuel = micros();
Tloop = Tactuel - Told;
Told = Tactuel;

  //Serial.print("Tloop");
  //Serial.println(Tloop);
  //Serial.print("Told");
  //Serial.println(Told);
}

void loop(){
 
  FTloop(Tzob,Tloopzob);
  Serial.print("Tloop");
  Serial.println(Tloopzob);
  Serial.print("Told");
  Serial.println(Tzob);
  
  delay(1000);
  
  // Bon alors ce qu'il se passe c'est que Tzob et Tloopzob sont en permanence égaux à 0. A priori,ils devraient évoluer dans le temps. Je pense que c'est parceque ma fonction FTloopzob ne revoie pas les valeur de Tloopzob et Tzob dans la boucle pricipale (c'est sur c'est ça), mais je ne sais pas comment faire.
}

PS: désolé pour la vulgarité des variables..

Merci
Logged

Central Europe
Offline Offline
Edison Member
*
Karma: 7
Posts: 1220
Use the Source, Luke.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ah, tu as du boulot devant toi, et les explications ne vont pas être simple.

Tu as bien compris qu'une fonction ne peut rendre qu'une valeur - en dépendance de la langue cette valeur ne peut être un type simple (en cas du C) ou un type complexe (C++). Et trés vite nos allons devoir passer aux réfrences et les pointers, ce que vas te confondre complètement. C'est la partie de C et C++ la plus compliquée. Rajoute à ça le problème actuel ou tu passes des paramètres par valeur et pas par référence, donc toutes modifications à l'intérieur de tas fonction ne vont pas effectuer les variables à l' extérieur. Si tu changes ça, très vite tu te retrouves au sujet des pointers.

Si le but est que de résoudre le problème actuel, je te conseille de rendre directement la durée comme valeur unique. C'est le plus simple. Sinon, va voir dans ton bouquin préféré de C et C++ les chapitres sur le références et pointers.

Une version possible:
Code:
unsigned long  FTloop()
{
static unsigned long Told;
unsigned long Tactuel = micros();
Tloop = Tactuel - Told;
Told = Tactuel;
return Tloop;
}
...
  Serial.print("Tloop");
  Serial.println(FTloop());
...
« Last Edit: December 02, 2010, 09:05:41 am by Korman » Logged

Montréal
Offline Offline
Newbie
*
Karma: 0
Posts: 48
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut,

Les "typedef" permettent de définir des nouveaux types de variables.  Par exemple, si tu pourrais définir un type "entier" de la façon suivante:

typedef int entier ;

tu pourras ensuite définir tes variables de type "int" de la façon suivante:

entier valeur ;  

ce qui sera équivalent à:

int valeur ;

Les tableaux permettent de de "regrouper" des variables de même types. Par exemple, supposons que je veux faire un programme qui calcule la moyenne de 10 notes. chacune des notes pourraient être mises dans des variables indépendantes:

int n1,n2,n3,n4,n5,n6,n7,n8,n9,n10 ;

Mais ça va devenir rapidement le bordel.

En tableau, ça va donner ça:

int notes[10] ; // tableau de 10 entier.

On pourra ensuite accèder un élement du tableau en précisant l'index de l'élement, l'index du premier élement étant 0. Par exemple pour faire le cumulatif des notes,  ça ressemblerait à ca:

Code:
 int index,cumul ;
  int notes[10] ;

  cumul = 0 ;
  for (index=0 ; index < 10 ; index++)
    {
       cumul = cumul + notes[index] ;
    }
  

Si c'est pas assez clair, dis-le, je détaillerai.
Logged

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

Finalement

J'ai fait le code suivant:

Code:
unsigned long Tzob = 0;
unsigned long Tloopzob = 0;

void setup(){
  Serial.begin(9600);
}

void FTloop(unsigned long *Told,unsigned long *Tloop)
{
unsigned long Tactuel = micros();
*Tloop = Tactuel - *Told;
*Told = Tactuel;

  //Serial.print("Tloop");
  //Serial.println(Tloop);
  //Serial.print("Told");
  //Serial.println(Told);
}

void loop(){
 
  FTloop(&Tzob,&Tloopzob);
  Serial.print("Tloop");
  Serial.println(Tloopzob);
  Serial.print("Told");
  Serial.println(Tzob);
 
}

avec des pointers

Ca a l'air de marcher.
Prevenez moi si je me goure..
Logged

Central Europe
Offline Offline
Edison Member
*
Karma: 7
Posts: 1220
Use the Source, Luke.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Prevenez moi si je me goure..

C'est bon.

Korman
« Last Edit: December 02, 2010, 10:47:49 am by Korman » Logged

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

Va avoir cette page :

Apprenez à programmer en C !

C'est un tuto sur le site du zéro  smiley-wink
« Last Edit: December 02, 2010, 12:59:24 pm by jfs » 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

Pages: [1]   Go Up
Jump to: