La fonction millis() n'aime pas les tableaux ?

Bonjour :)

Etant débutant sur Arduino, je m'aventure petit à petit dans les méandres du développement. Je me heurte à une situation que je ne peux expliquer, et j'ai besoin de vos lumières :

Mon code (que j'ai préalablement épuré au max) est censé afficher le nombre de milliseconde depuis le démarrage du programme. Le problème est qu'il part complètement en cacahuète si je rajoute une variable tableau de type float. Si mon tableau était de type int, pas de problème, mais moi j'ai besoin d'un tableau de float ! >:( De plus je ne vois aucun rapport ou lien quelconque entre ma fonction millis() et ma variable tableau...

float tab[] = {};
int i = 0;
void setup() {
  Serial.begin(9600);
}
void loop() {
  Serial.println(millis());
  delay(1000);
  tab[i]=0;
}

Quelqu'un aurait un semblant d'explication ?

Merci

pourquoi float, le résultat sera invariablement xxxxx[u].00[/u]

Le code est simplifié. A la base c'est un truc du genre :

tab[i] = analogRead(1) * 5;
tab[i] = tab[i] / 1024;
tab[i] = ((tab[i] * 1000) - 500) / 10;
i++;

et ça

float tab[100] ;
int i = 0;
void setup() {
  Serial.begin(57600);
}
void loop() {
  
  delay(1000);
  i++;
  tab[i]=(millis()*5);
  tab[i] = tab[i] / 1024;
  tab[i] = ((tab[i] * 1000) - 500) / 10;
  Serial.print(i);Serial.print(" = ");Serial.println(tab[i]);
}

b

slidy: Quelqu'un aurait un semblant d'explication ?

Bonsoir en tous cas pas moi à ce stade :grin: mais par curiosité j'ai testé avec le float ça me renvoi du millis à 0 apres delay avec un int ça me renvoi du millis() pas coherent avec le delay

|500x277

|500x337

Quelques remarques:

  • float tab = {};
    Ce tableau n’a pas de dimension. Donc pas d’espace réservé. Donc il écrase la variable située derrière.
  • tab = analogRead(1) * 5;
  • analogRead est définie comme retournant un entier long. 5 est une constante entière. Le résultat sera un entier.*
    Utiliser :tab = analogRead(1) * 5.0;[/li]
    [/list]

fdufnews: Quelques remarques:

  • float tab[] = {}; Ce tableau n'a pas de dimension. Donc pas d'espace réservé. Donc il écrase la variable située derrière.

bonsoir fdfnews avec un peu d'allocation , tout rentre effectivement dans l'ordre

float tab[] = {0,0,0,0,0};
ou
int tab[] = {0,0,0,0,0};

Merci fdufnews pour la réponse ! Effectivement un problème d'allocation :) Bonne soirée !