BUG ??!

Bonjour

Voilà un p'ti bug très très bizarre découvert au moment de supprimer mes Serial.print pour débogage....

Si je laisse mes Serial.print les données sont correct

si je les commentes ou supprime.... ça part en live!!
https://zupimages.net/viewer.php?id=20/15/rjhi.png

Quelqu'un à une idée du pourquoi du comment?

Des idées, oui ça m'est arrivé au moins deux fois.

Quelqu'un à une idée du pourquoi du comment?

Pour le comment, pense que si je veux t'aider, il faut que j'imprime les deux images pour pouvoir les comparer, que j’appelle Irma ma voyante qui peut me dire comment traduire "ça part en live"...

Si tu veux de l'aide, formulé de cette façon tu va recevoir à peu près le même message: il faut que toi tu nous aide en:

  1. lisant les messages épinglées " Bien éditer son post pour les nuls" et "Faire un Nouveau Sujet ou le corriger avec les Balises."
  2. en donnant le code sous la forme demandée afin que l'on puisse facilement
  3. peut être en précisant ce qu va et ce qui ne va pas; si je ne sais pas du tout ce que fait un code, je ne peux pas deviner pourquoi il ne fonctionne pas et donc trouver l'erreur.

Désolé Vileroi

Mais impossible d'insérer les images !!?... Du coup j'ai inséré les liens.... ( Les images en pièces jointes sont les mêmes)

Bonjour,

Lire ceci.

De la part d'un utilisateur Linux il est assez lamentable d'utiliser des images pour montrer du code et les affichages console.
CTRL-A & CTRL-C & CTRL-V existent aussi sous Linux :smiling_imp:

Donc si tu sais que je suis sous linux c'est que tu as vu les images :wink: donc le code AVEC le résultat de celui-ci :smiley:

Juste le code seul n'aurait aiguillée personnes....

Le code marche ça se mets juste à buggé quand je commente les Serial.print....

Je dis simplement ça pour les utilisateurs de téléphone portable. Imagine la taille des caractères sur tes images !

Deuxièmement, comment copier coller du code dans un IDE à partir d'une image, pour ceux qui auraient l'amabilité et la générosité d'essayer ?

Juste le code seul n'aurait aiguillée personnes....

Qu'en sais-tu ?

rabillou:
Juste le code seul n'aurait aiguillée personnes....

Justement si.
On voit avec le code que le tableau tab[] est créé sur la pile, donc recréé à chaque entrée dans la loop.
Il devrait être static

static unsigned tab[interval];

C'était pourtant simple de METTRE LE CODE ENTRE BALISES DE CODE comme demandé dans les posts à lire.

hbachetti oki oki :wink:

kamill: Je ne pas déclaré le tableau en dehors de la loop à cause de la variable "interval", de plus je vois pas le rapport avec les Serial.print qui "valide" le code ou pas, où alors va falloir bien m'expliquer.....

const int analogInPin = A0; 
const int led = 13;      

unsigned int interval = 10;
byte derive = 1; 


int sum,i;

unsigned int compteur = 0;
float moy = 0;
float med = 0;

float diff = 0;

void setup() {
  Serial.begin(9600);
  pinMode(led, OUTPUT);  
}


void loop() {
  unsigned int tab[interval];
  unsigned int n = interval;
  
  if( compteur < interval){
    tab[compteur] = analogRead(analogInPin);


    Serial.print (compteur);              ////
    Serial.print (" ");                   // SI JE COMMENTE CES LIGNES LE TABLEAU SE REMPLI DE VALEUR QUI NE CORRESPONDENT PLUS A analogInPin!!!
    Serial.println (tab[compteur]);       ////

    
    compteur++;
    moy = 0;
    
  } else {
    
    sort(tab,n);

    Serial.print("moy ");
    for (int i = 0 ; i < interval ; i++) { 
      moy += tab[i];
    } 
    moy /= interval;
    Serial.print(moy);

    if( interval % 2 == 1){ Serial.print(" I ");
      n= ((n+1)/2) -1;
      med = tab[n];
      Serial.print(n); Serial.print("("); Serial.print(tab[n]); Serial.print(") ");
    } else { Serial.print(" P ");
      n= n/2;
      Serial.print(n); Serial.print("("); Serial.print(tab[n]); Serial.print(") ");
      med = tab[n] ;
      n -= 1;
      Serial.print(n); Serial.print("("); Serial.print(tab[n]); Serial.print(") ");
      med += tab[n];
      med /= 2;
    }
    Serial.print(" med "); Serial.print(med);
    compteur = 0;
    diff = moy-med;
    Serial.print("  Diff "); Serial.println(diff);

   
   if( abs(diff) < derive ) {
      digitalWrite(led, HIGH);
    } else {
      digitalWrite(led, LOW);
    }
 
  }
  delay(500);
}

void swap(int *p,int *q) {
   int t;
   
   t=*p;
   *p=*q;
   *q=t;
}

void sort(int tab[],int n) {
   int i,j,temp;
 
   for(i=0;i<n-1;i++) {
      for(j=0;j<n-i-1;j++) {
         if(tab[j]>tab[j+1])
            swap(&tab[j],&tab[j+1]);
      }
   }
}

Ça y est, je sais ce qu'il faut faire: il suffit d'avoir un écran avec une résolution deux fois plus grande que l'écran de @rabillou pour analyser les images. Ou d'avoir deux écrans. Mon problème c'est que le deuxième a une résolution de 320x240!

BUG ??!

Non merci, j'essaye d'arrêter... 8)

vileroi:
Ça y est, je sais ce qu'il faut faire: il suffit d'avoir un écran avec une résolution deux fois plus grande que l'écran de @rabillou pour analyser les images. Ou d'avoir deux écrans. Mon problème c'est que le deuxième a une résolution de 320x240!

Ce n'est pas cela qui va lui enseigner ce qu'est une variable locale ... :confused:

rabillou:
kamill: Je ne pas déclaré le tableau en dehors de la loop à cause de la variable "interval", de plus je vois pas le rapport avec les Serial.print qui "valide" le code ou pas, où alors va falloir bien m'expliquer.....

Ton tableau est créé dans la pile et un nouveau tableau est créé à chaque instance d'entrée dans la loop() -> possiblement avec des valeurs différentes.
Lorsque tu fais Serial.println (tab[compteur]); tu empiles la valeur dans la pile qui est ensuite dépilée, mais dont la valeur mémoire reste et est possiblement utilisée (coup de bol elle est au bon endroit) dans les calculs suivants ou à la nouvelle définition du tableau.

Le tableau peut être local mais il faut qu'il soit défini en static pour persister à chaque entrée dans la loop. La taille d'un tableau static doit être connue, donc il faut que interval soit défini en const.