debug code frequencemètre

Bonjour j'ai crée un code pour acquerir une fréquence à partir d'un arduino et la traduire en km/h, mon problème est surement de la syntaxe c'est là où j'ai le plus de mal, si quelqu'un voit mes erreurs merci de me les indiquer s'il vous plait !

  long mesure_frequence;
  int anemo = 4;
  unsigned long periode = 0;
  unsigned long etat_bas = 0;
  unsigned long etat_haut = 0;
  unsigned long freq = 0;
  
void setup() 
{
  pinMode(anemo, INPUT);
  Serial.begin(9600);
}

void loop() 
{
  unsigned char i;
  unsigned char tempo_minutes=10;
  unsigned long frequence;
  float vitesse_vent[3];
  float vitesse_moyenne;
}
  { for(i=0; i>2; i++) /*boucle for pour récuperer 3 valeur*/
  
    frequence=mesure_frequence;
    vitesse_vent[i]=frequence*1.492; //1Hz = 1,492KMh
  vitesse_moyenne=(vitesse_vent[0]+vitesse_vent[1]+vitesse_vent[2])/3;
  }
  /*envoyer en i2c*/
  {for(i=1; i>tempo_minutes; i++)
  
    delay(60000);
  }  
  long mesure_frequence(void);

  unsigned long periode = 0;
  unsigned long etat_bas = 0;
  unsigned long etat_haut = 0;
  unsigned long freq = 0;
}
  etat_bas = pulseIn(anemo, LOW); //mesure de l'état bas du signal en microsecondes
  if (etat_bas==0)
  {
    etat_haut=0;
  }
  else
  {
    etat_haut = pulseIn(anemo, HIGH);  //mesure de l'état haut du signal en microsecondes
  }
  periode=etat_bas+etat_haut;  //calcul de la période du signal en microsecondes
  if (periode==0)
  {
    freq=0; 
  }
  else
  {
    freq=1000000/periode;  //calcul de la fréquence du signal en secondes
  }
  return;

quel est le problème constaté ?

j'ai ça : exit status 1
expected unqualified-id before '{' token
ça m'arrive très souvent ce genre d'erreur

Bonjour,

Formate correctement ton code (avec CTRL T) et tu verras que la majorité du code est en dehors de la fonction loop()

la structure de ton code est pour le moins... étrange...

Entre deux {} t'as du code, sa s'appelle un "bloc".
T'as un bloc pour ta fonction setup() et un autre pour ta fonction loop(). Si tu regardes de plus près ton code, ton bloc loop() s'arrête seulement 5 lignes plus loin... Ca veut dire que le reste du code dans ton fichier ne sert à rien et ne sera pas du tout utilisé par l'arduino si jamais tu parviens à le compiler...
Dans les boucles for() t'as un souci, tu mets l'accolade avant de commencer plutôt qu'après... C'est ce que tu mets dans le block juste après le for() qui sera exécuté autant de fois que ton for() le demande.

Dans un premier temps je suppose donc qu'il faudrait décaler l'accolade fermante en ligne 22 pour la mettre tout à la fin de ton fichier... Ensuite, si tu veux pouvoir mieux t'y retrouver, essaie de faire ce qu'on appelle de "l'indentation", il s'agit d'aligner toujours les accolades fermantes avec les ouvrantes histoire de mieux y voir, même les "pro" font comme ca, donc autant s'y mettre de suite... ton code "corrigé et indenté" donnerait ceci :

long mesure_frequence;
int anemo = 4;
unsigned long periode = 0;
unsigned long etat_bas = 0;
unsigned long etat_haut = 0;
unsigned long freq = 0;
  
void setup() 
{
    pinMode(anemo, INPUT);
    Serial.begin(9600);
}

void loop() 
{
    unsigned char i;
    unsigned char tempo_minutes=10;
    unsigned long frequence;
    float vitesse_vent[3];
    float vitesse_moyenne;

    for(i=0; i>2; i++) /*boucle for pour récuperer 3 valeur*/
    {
        frequence=mesure_frequence;
        vitesse_vent[i]=frequence*1.492; //1Hz = 1,492KMh
        vitesse_moyenne=(vitesse_vent[0]+vitesse_vent[1]+vitesse_vent[2])/3;
    }

    /*envoyer en i2c*/
    for(i=1; i>tempo_minutes; i++)
    {  
        delay(60000);
    }  
    long mesure_frequence(void);

    unsigned long periode = 0;
    unsigned long etat_bas = 0;
    unsigned long etat_haut = 0;
    unsigned long freq = 0;

    etat_bas = pulseIn(anemo, LOW); //mesure de l'état bas du signal en microsecondes
    if (etat_bas==0)
    {
        etat_haut=0;
    }
    else
    {
        etat_haut = pulseIn(anemo, HIGH);  //mesure de l'état haut du signal en microsecondes
    }

    periode=etat_bas+etat_haut;  //calcul de la période du signal en microsecondes
    if (periode==0)
    {
        freq=0; 
    }
    else
    {
        freq=1000000/periode;  //calcul de la fréquence du signal en secondes
    }
}

par contre je ne te garantis ni que ca compile ni que ca marche... j'illustre juste comment "aligner" (indenter) les accolades/blocs... :wink:

Enfin, si tu veux mieux y comprendre, tu pourrais peut-être essayer d'en apprendre un petit peu en suivant un tuto, je t'assure, t'iras plus vite qu'en posant des questions à chaque fois que ca ne va pas... :wink:

Merci énormément Kamill et Zorro_X, mon code est compilé avec succès et je vais suivre ton conseil afin de mieux m'organiser en prog :smiley: