gilou Modérateur Modzilla | fpaude a écrit :
Merci, c'est effectivement plus clair.
Après essai, voici les corrections et questions en relation:
A la ligne 37 et 38, j'ai enlevé l'espace avant le L
A la ligne 260, cela ne passe pas tel quel. J'ai donc remplacé les deux Smois par Lmois. C'est accepté dans la compilation. A quoi sert le ! avant le = Lmois ?
J'ai fait un copier-coller. J'ai 423 ligne dans le copier et dans le coller, seulement 386. A priori, toutes les lignes vides ne sont pas prises en compte.
Lors de l'affichage Sérial, tous les caractères accentués sont remplacer par un ? inversé, alors que les textes n'ont pas changés par rapport aux versions précédentes par exemple : T° Baromètre C° devient Tʔ Baromʔtre Cʔ
Pour le moment cela tourne bien, je vais le laissé toute la journée. Je vais au forum des assos pour recruter de jeunes spéléos en devenir!!!
|
Si, les textes ont probablement changé d'encodage suite a mon édition sous emacs (ou a leur passage via un formateur en ligne), ça explique les ? en sortie.
Si ça se trouve, ils ont été tranformés en isolatin
> A la ligne 37 et 38, j'ai enlevé l'espace avant le L
C'est ce foutu formateur en ligne qui l'a mis (j'utilise un formateur, car le forum n'a pas les mêmes idées sur l'indentation que mon emacs) Pour la ligne 260, si si, c'est tout a fait du bon C, != signifie pas égal, différent, c'est le contraire de ==
Bon, j'ai simplifié le code, et en plus j'ai vu que j'avais oublié de taper la ligne qui fait la sauvegarde et qui est essentielle au bon fonctionnement de l'algo
Bon, en te remettant tout dans le bon encodage (manifestement, la console ou tu affiches ton texte est en isolatin-1) ça donne ceci :
Code :
- // Bus
- #include <Wire.h>
- // chip
- #include <Arduino.h>
- // RTC
- #include <PCF85063TP.h>
- // senseur baromètre
- #include <HP20x_dev.h>
- // senseur température et humidité
- #include <DFRobot_SHT3x.h>
- // carte SD
- #include <SD.h>
- //port série
- #include <SPI.h>
- #include <KalmanFilter.h>
- PCD85063TP clock; //define a object of PCD85063TP class
- //DFRobot_SHT3x sht3x(&Wire,/*address=*/0x45,/*RST=*/4);
- DFRobot_SHT3x sht3x;
- unsigned char ret = 0;
- File monFichier;
- /*
- * Variables statiques
- */
- #define PLUVIOMETRE 1 //pin D3, interruption n°1
- #define VALEUR_PLUVIOMETRE 0.2794 //valeur en mm d'eau à chaque bascule d'auget
- #define GIROUETTE A1 //port analogique A1
- #define ANEMOMETRE 0 //pin D2, interruption n°0
- #define PI 3.1415
- #define RAYON 0.07 //rayon en mètre de l'anémomètre en mètre
- unsigned long previousMillis = 0;
- unsigned long previousMillis2 = 0;
- unsigned long delaiAnemometre = 3000L; //3 secondes
- unsigned long delaiProgramme = 60000L; //60 sec
- float vitesseVent(0); //vent moyen cumulé sur 1 min
- float gust(0); //vent max cumulé sur 1 min
- int nbAnemo = 0; //nb d'occurence de mesure Anemo
- int nbGir = 0; //nb d'occurence de mesure Girouette
- float pluvio1min(0); //pluie sur 1 min
- float gir(0); //direction moyenne de la girouette sur 1 min (en degrés)
- /*
- * Variables globales
- */
- volatile unsigned int countPluviometre = 0; //variable pour l'interruption du pluviometre pour compter les impulsions
- volatile unsigned int countAnemometre = 0; //variable pour l'interruption de l'anémomètre pour compter les impulsions
- char direct[] = "";
- String Azimut, Lejour;
- // Tant que tu n'as pas un moyen de faire une mise a jour de la date autre que l'initialisation, c'est ici qu'il faut le faire
- int LAnnee = 2021;
- int Lmois = 8;
- int Ljour = 17;
- int Ljoursemaine = TUE;
- int Lheure = 7;
- int Lminute = 5;
- int Lseconde = 0;
- int compteur = 0;
- int SMois = 0;
- float TempB, TempC, TempF, Humid, PressA, Vent, MoyenB, MoyenC, MoyenF, MoyenH, MoyenP, MoyenV, VentMax(0);
- /*
- * Fonction d'interruption du pluviomètre qui incrémente un compteur à chaque impulsion
- */
- void interruptPluviometre() {
- countPluviometre++;
- }
- /*
- * Fonction d'interruption de l'anémomètre qui incrémente un compteur à chaque impulsion
- */
- void interruptAnemometre() {
- countAnemometre++;
- }
- void setup() {
- Serial.begin(9600); // série de démarrage pour la sortie
- /* Mise sous tension, délai de 150 ms, jusqu'à ce que la tension soit stable */
- delay(150);
-
- /* Reset HP20x_dev */
- HP20x.begin();
- delay(100);
-
- //Initialize the chip
- while (sht3x.begin() != 0) {
- Serial.println("Échec de l'initialisation de la puce, vérifier la connexion du fil" );
- delay(3000);
- Serial.begin(9600);
- clock.begin();
- // toute cette partie la devra figurer dans un code de mise a jour de la clock
- // par donnée de synchronisation externe, si tu en écris un plus tard
- clock.stopClock();
- clock.fillByYMD(LAnnee, Lmois, Ljour);
- clock.fillByHMS(Lheure, Lminute, Lseconde);
- clock.fillDayOfWeek(Ljoursemaine);
- clock.setTime(); // write time to the RTC chip
- clock.startClock();
- SMois = Lmois;
- //clock.setcalibration(1, 32767.2); // Réglage du décalage par fréquence d'horloge
-
- uint8_t ret = clock.calibratBySeconds(0, -0.000041);
- Serial.print("offset value: " );
- Serial.print("0x" );
- Serial.println(ret, HEX);
- }
-
- /**
- * readSerialNumber Lire le numéro de série de la puce.
- * Renvoie le numéro de série à 32 chiffres.
- */
- Serial.print("Numéro de série de la puce : " );
- Serial.println(sht3x.readSerialNumber());
- if (!sht3x.softReset()) {
- Serial.println("Échec de l'initialisation de la puce...." );
- }
-
- Serial.print("Initialisation de la carte SD..." );
- pinMode(10, OUTPUT);
- if (!SD.begin(4)) {
- Serial.println("échec d'initialisation!" );
- return;
- }
-
- monFichier = SD.open("Combe.txt", FILE_WRITE);
- if (monFichier) {
- Serial.print("\nÉcriture dans Combe.txt..." );
- // ligne d'en-têtes
- monFichier.println("Date;Heure;Temp_BaroC;Temp_C;Temp_F;Humidite%;Pression;Vent max m/s;Vent moyen m/s;Azimut vent;Direction vent;Vent dominant;Pluie mm;" );
- Serial.println("" );
- monFichier.close();
- }
-
- Serial.println("initialisation effectuée." );
- Serial.println("------------------Lecture en mode de mesure unique-----------------------" );
-
- pinMode(PLUVIOMETRE, INPUT_PULLUP);
- attachInterrupt(PLUVIOMETRE, interruptPluviometre, RISING);
-
- pinMode(ANEMOMETRE, INPUT_PULLUP);
- attachInterrupt(ANEMOMETRE, interruptAnemometre, RISING);
- }
- /*
- * Fonction qui converti en angle la valeur analogique renvoyée par l'arduino (valeurs fixes)
- * RETURN : angle en degré
- */
- float getGirouetteAngle(int value) {
- float angle = 0;
- if (value > 280 && value < 290) {
- angle = 180;
- Azimut = "Sud";
- } // Sud
- if (value > 240 && value < 250) {
- angle = 202.5;
- Azimut = "SSO";
- } // SSO
- if (value > 628 && value < 636) {
- angle = 225;
- Azimut = "SO";
- } // SO
- if (value > 598 && value < 606) {
- angle = 247.5;
- Azimut = "OSO";
- } // OSO
- if (value > 940 && value < 950) {
- angle = 270;
- Azimut = "Ouest";
- } // Ouest
- if (value > 824 && value < 832) {
- angle = 292.5;
- Azimut = "ONO";
- } // ONO
- if (value > 884 && value < 892) {
- angle = 315;
- Azimut = "NO";
- } // NO
- if (value > 700 && value < 710) {
- angle = 337.5;
- Azimut = "NNO";
- } // NNO
- if (value > 784 && value < 792) {
- angle = 0;
- Azimut = "Nord";
- } // Nord
- if (value > 402 && value < 412) {
- angle = 22.5;
- Azimut = "NNE";
- } // NNE
- if (value > 458 && value < 468) {
- angle = 45;
- Azimut = "NE";
- } // NE
- if (value > 78 && value < 85) {
- angle = 67.5;
- Azimut = "ENE";
- } // ENE
- if (value > 88 && value < 98) {
- angle = 90;
- Azimut = "Est";
- } // Est
- if (value > 60 && value < 70) {
- angle = 112.5;
- Azimut = "ESE";
- } // ESE
- if (value > 180 && value < 190) {
- angle = 135;
- Azimut = "SE";
- } // SE
- if (value > 122 && value < 132) {
- angle = 157.5;
- Azimut = "SSE";
- } // SSE
- return angle;
- }
- void printTime() {
- clock.getTime();
- Lheure = clock.hour;
- Lminute = clock.minute;
- Lseconde = clock.second;
- Ljour = clock.dayOfMonth;
- Lmois = clock.month;
-
- switch (clock.dayOfWeek) {
- case MON:
- Lejour = "Lundi";
- break;
- case TUE:
- Lejour = "Mardi";
- break;
- case WED:
- Lejour = "Mercredi";
- break;
- case THU:
- Lejour = "Jeudi";
- break;
- case FRI:
- Lejour = "Vendredi";
- break;
- case SAT:
- Lejour = "Samedi";
- break;
- case SUN:
- Lejour = "Dimanche";
- break;
- default:
- Lejour = "*Erreur*";
- break;
- }
-
- // Si on était en décembre et qu'on a changé de mois, donc on change d'année
- if ((Smois == 12) && (Lmois == 1)) {
- LAnnee++;
- }
- // et j'avais oublié de taper cette ligne essentielle, la sauvegarde du mois
- // pour détecter quand il a changé au le prochain appel a printTime
- // Smois c'est Sauvegarde du mois (courant).
- Smois = Lmois;
-
- Serial.print("\n " );
- Serial.print(Lheure);
- Serial.print(":" );
- Serial.print(Lminute);
- Serial.print(":" );
- Serial.print(Lseconde);
- Serial.print(" " );
- Serial.print(" " );
- Serial.print(Lejour);
- Serial.print(" " );
- Serial.print(Ljour);
- Serial.print("/" );
- Serial.print(Lmois);
- Serial.print("/" );
- Serial.print(LAnnee);
- }
- void loop() {
- printTime();
- delay(30000);
- compteur++;
-
- Serial.println("\n Données en cours :" );
- // lecture des données
- TempB = HP20x.ReadTemperature() / 100.0;
- TempC = sht3x.getTemperatureC();
- TempF = sht3x.getTemperatureF();
- Humid = sht3x.getHumidityRH();
- PressA = HP20x.ReadPressure() / 100.0;
- vitesseVent = (PI * RAYON * 2 * countAnemometre) / 3 * 3.6; //3 = durée de prise de mesure (3sec) m/s
- if (vitesseVent > VentMax) {
- VentMax = vitesseVent;
- }
- // cumul dans les variables d'accumulation de mesures
- MoyenB += TempB;
- MoyenC += TempC;
- MoyenF += TempF;
- MoyenH += Humid;
- MoyenP += PressA;
- MoyenV += vitesseVent;
-
- Serial.print("\n Compteur : " );
- Serial.print(compteur);
- Serial.print("\n T° Baromètre C° : " );
- Serial.print(TempB);
- Serial.print("\n Température en Celsius : " );
- Serial.print(TempC);
- Serial.print("\n Température en Farhenheit : " );
- Serial.print(TempF);
- Serial.print("\n Humidite Relative(%RH) : " );
- Serial.print(Humid);
- Serial.print("\n Pression actuelle en hPa : " );
- Serial.print(PressA);
- //Récupération des infos de l'anémomètre et girouette toutes les 3 sec
- unsigned long currentMillis = millis(); // read time passed
- if (currentMillis - previousMillis > delaiAnemometre) {
- previousMillis = millis();
- nbAnemo++;
- countAnemometre = 0;
- int gdir = analogRead(GIROUETTE);
- gir = getGirouetteAngle(gdir);
- nbGir++;
- pluvio1min += countPluviometre * VALEUR_PLUVIOMETRE;
- countPluviometre = 0;
- Serial.print("\n Vent actuel en m/s : " );
- Serial.println(vitesseVent);
- Serial.print(" Vitesse vent cumulée : " );
- Serial.println(MoyenV);
- Serial.print(" N bascules du Pluviomètre : " );
- Serial.println(countPluviometre);
- Serial.print(" Direction vent actuel : " );
- Serial.print(gir);
- Serial.print("° " );
- Serial.println(Azimut);
- Serial.print(" Pluviométrie en mm : " );
- Serial.println(pluvio1min);
- }
-
- //Enregistrement cumulé des valeurs
- if (compteur == 30) {
- // Calcul des valeurs moyennes pour les 30 mesures
- MoyenB /= compteur;
- MoyenC /= compteur;
- MoyenF /= compteur;
- MoyenH /= compteur;
- MoyenP /= compteur;
- MoyenV /= compteur;
-
- Serial.print("\n Écriture dans Grande Combe.txt..." );
- Serial.print("\n température moyenne : " );
- Serial.print(MoyenB);
- Serial.print("\n température moyenne C° : " );
- Serial.print(MoyenC);
- Serial.print("\n température moyenne F : " );
- Serial.print(MoyenF);
- Serial.print("\n Humidité moyenne : " );
- Serial.print(MoyenH);
- Serial.print("\n Pression moyenne : " );
- Serial.print(MoyenP);
- Serial.print("\n Vent moyen en m/s : " );
- Serial.print(MoyenV);
- Serial.print("\n Vent Max en m/s : " );
- Serial.print(VentMax);
- Serial.print("\n Pluviométrie en mm : " );
- Serial.println(pluvio1min);
- monFichier = SD.open("Combe.txt", FILE_WRITE); //Maximum 8 caractères avant le .txt
- if (monFichier) {
- String DateNomJour = String(Lejour);
- String DateNumJour = String(Ljour);
- String DateMois = String(Lmois);
- String DateHeure = String(Lheure);
- String DateMinute = String(Lminute);
- String DateSeconde = String(Lseconde);
- String TempBaro = String(MoyenB);
- String TemperatureC = String(MoyenC);
- String TemperatureF = String(MoyenF);
- String Humidite = String(MoyenH);
- String Pression = String(MoyenP);
- String VMoyen = String(MoyenV);
- String VMax = String(VentMax);
- String Pluviometrie = String(pluvio1min);
- String Girouette = String(gir);
- String Combe =
- DateNomJour + " " + DateNumJour + "/" + DateMois + "/" + LAnnee + ";" +
- DateHeure + ":" + DateMinute + ":" + DateSeconde + ";" +
- TempBaro + ";" +
- TemperatureC + ";" +
- TemperatureF + ";" +
- Humidite + ";" +
- Pression + ";" +
- VMax + ";" +
- VMoyen + ";" +
- Azimut + ";" +
- Girouette + ";" +
- " " + ";" +
- Pluviometrie;
- monFichier.println(Combe);
- Serial.println("\n terminée." );
- monFichier.close();
- }
- else {
- Serial.println("erreur d'ouverture du fichier Combe.txt" );
- }
- delay(5000);
- // raz des variables d'accumulation de mesures
- MoyenB = 0;
- MoyenC = 0;
- MoyenF = 0;
- MoyenH = 0;
- MoyenP = 0;
- MoyenV = 0;
- VentMax = 0;
- pluvio1min = 0;
- compteur = 0;
- }
- }
|
En y réfléchissant, c'est probablement le copier-coller depuis le forum qui fait le souk. Copies le dans un fichier texte que tu auras au préalable créé avec l'encodage ANSI dans le bloc-note et ça sera OK, je viens de vérifier.
A+, Message édité par gilou le 04-09-2021 à 12:55:09 ---------------
There's more than what can be linked! -- Iyashikei Anime Forever! -- AngularJS c'est un framework d'engulé! --
|