Calcul vent dominant

Bonjour,

Pour améliorer ma Station Météo sur ESP8266, j'aimerai calculer le vent dominant de la journée. J'ai écris un programme C sur mon MAC qui fonctionne très bien. J'ai donc fait un copier-coller dans l'IDE Arduino (Version 1.8.12) avec une Board WEMOS D1 R1 mais malheureusement plus rien ne fonctionne.
Que puis-je faire?

Guy

dom_vent.c (906 Bytes)

Bonsoir et Bienvenue !

Pour avoir des réponses et éviter que ce message aille à la poubelle, il faut de toute urgence prendre connaissance des Règles du Forum (messages épinglés en tête du forum PRINCIPAL)

  • où poser ses questions ?
  • comment publier du code dans le corps d'un message
  • quelles informations fournir impérativement ?

Demandes au Modérateur (lien report to moderator en bas à gauche) le déplacement du message dans le Fourm général , içi il encombre l'espace réservé aux projets F I N I S comme indiqué dans le nom de ce sous-forum
Par ailleurs en publiant dans ce recoin peu fréquenté tu auras peu de lecteurs.
Quand tout sera au point , reviens dans ce sous-forum pour la publication !!

Topic déplacé

Bonjour

Que puis-je faire?

Il reste :

-à rendre le code visible à tous(tablettes et smartphones) et bien formaté en apprenant à le publier entre les balises appropriées dans le corps du message C'est expliqué dans des fils de discussion en tête du forum comme celui-ci:
https://forum.arduino.cc/index.php?topic=394754.0

-a découvrir l'organisation d'un sketch pour Arduino qui n'est pas tout à fait celle d'un programme C classique,
C'est bien décrit ici
https://zestedesavoir.com/tutoriels/686/arduino-premiers-pas-en-informatique-embarquee/
L'IDE Arduino est livrée avec de nombreux exemples.

En résumé : Apprendre à utiliser le forum et apprendre à écrire un code compilable sous IDE Arduino, le portage du code initial vers Arduino ne posera alors plus de problème insurmontable.

laska18:
J'ai écris un programme C sur mon MAC qui fonctionne très bien.

Bonjour,

Tu es sur qu'il fonctionne très bien?
Il me semble qu'il manque des parenthèses ici

float s = sin_sum / sizeof(tab_angle)/sizeof(float);
float c = cos_sum / sizeof(tab_angle)/sizeof(float);

ce devrait être

float s = sin_sum / (sizeof(tab_ang)/sizeof(float));
float c = cos_sum / (sizeof(tab_ang)/sizeof(float));

Il faudrait passer le nombre d'angles à la fonction pour ne pas avoir à accéder à la variable globale.

Ici aussi c'est la taille de la table globale qui doit être prise en compte (et non la taille du pointeur)

  for(int i=0;i<sizeof(tab_ang)/sizeof(float); i++)

Bonjour,
Désolé pour le non respect des règles du Forum.

En effet le problème vient du calcul du nombre d'éléments dans le tableau. Impossible de trouver ce nombre avec sizeof. J'ai donc écrit un fonction de calcul.

int len(int *tab_angle)
{
        int i = 0;
        while( tab_angle[i] != '\0')
        {
                i++;
        }
        return i;
}

avec la définition du tableau de la forme:

int tab_ang[] = { 355, 5, 15, '\0' };

If faut donc que je fasse attention à la définition du tableau d'angles lors de l'intégration de ce calcul dans le programme de la station météo.

Merci
Guy

'\0' est un caractère, alors bien sûr il sera traduit en nombre 0 et promu vers un entier, mais comme votre type c'est int, autant mettre 0 directement.

cela dit vous auriez peut-être intérêt à utiliser -1 comme marque de fin de tableau au cas où un des angles lu soit 0

Si le tableau est rempli dynamiquement par des mesures, généralement on conserve un indice sur la prochaine case à remplir. Comme on commence les indices à 0, c'est aussi le nombre valable d'éléments du tableau.

et bien sûr attention au débordement du tableau.