flamalex Posté(e) le 19 novembre 2020 Signaler Posté(e) le 19 novembre 2020 Bonjour, sur Arduino, je mesure la vitesse du vent avec un anémomètre "pulse" vitesse appelée "vitesseVent" je cherche à envoyer cette vitesse dans une variable globale de la HC2 "testvent" voici un code, qui n'est pas fonctionnel, avec ce code j'envoie une valeur "fixe et prédéfinie" à la hc2 mais ce n'est pas ce que je cherche. pourriez vous m'aider par avance merci voici le code complet: #define ANEMOMETRE 1 //pin D3, interruption n°1 volatile unsigned int countAnemometre = 0; unsigned long previousMillis= 0; unsigned long previousMillis2= 0; unsigned long delaiAnemometre = 3000L; //3 secondes unsigned long delaiProgramme = 60000L; //60 sec float gust(0); //vent max cumulé sur 1 min float wind(0); //vent moyen cumulé sur 1 min int nbAnemo = 0; //nb d'occurence de mesure Anemo float vitesseVent(0); //vent moyen cumulé sur 1 min #include <Ethernet.h> #include <SPI.h> byte mac[] = { 0x90, 0xA2, 0xDA, 0x0E, 0xA5, 0x7E }; //physical mac address 90:A2:DA:0E:A5:7E byte ip[] = { 192, 168, 1, 175 }; // ip in lan byte gateway[] = { 192, 168, 1, 1 }; // internet access via router byte subnet[] = { 255, 255, 255, 0 }; //subnet mask IPAddress server(192,168,1,24); //HC2 FIBARO EthernetClient client; void setup() { Ethernet.begin(mac, ip); Serial.begin(9600); delay(1000); attachInterrupt(ANEMOMETRE,interruptAnemometre,RISING) ; pinMode(3, INPUT); } /* * Fonction d'interruption de l'anémomètre qui incrémente un compteur à chaque impulsion */ void interruptAnemometre(){ countAnemometre++; } void loop(){ int BP = digitalRead(3); // Lecture du capteur unsigned long currentMillis = millis(); // read time passed //Récupération des infos de l'anémomètre toutes les 3 sec //Enregistrement cumulé des valeurs if (currentMillis - previousMillis > delaiAnemometre){ previousMillis = millis(); // vitesseVent = (PI * RAYON * 2 * countAnemometre)/3*3.6; //3 = durée de prise de mesure (3sec) vitesseVent = (0.83 * countAnemometre)/3*3.6; //3 = durée de prise de mesure (3sec) if(vitesseVent>gust) gust = vitesseVent; wind += vitesseVent; nbAnemo++; countAnemometre = 0; Serial.print("Vent:"); Serial.println(vitesseVent); } //Toutes les minutes, compilation des valeurs et envoi au serveur if (currentMillis - previousMillis2 > delaiProgramme){ previousMillis2 = millis(); float avgwind = wind / nbAnemo; Serial.print("Wind AVG : "); Serial.println(avgwind); Serial.print("Gust : "); Serial.println(gust); //RAZ des compteurs qui ont servi a calculé les valeurs moyennes sur 1 min wind = 0; gust = 0; nbAnemo = 0; } if (client.available()) { char c = client.read(); Serial.print(c); } delay(1000); Serial.println("connecting..."); String PostData = "{\r\n\"value\":\"0\"\r\n}"; //JSON data to send if (client.connect(server,80)) { Serial.println("connected"); client.print("PUT /api/globalVariables/testvent"); //Fibaro Global Variable client.println(" HTTP/1.1"); client.println("Host: 192.168.1.24"); client.println("Authorization: Basic xxxxxxxxxxxxxx"); //need to insert base 64 user:password client.print("Content-Length: "); client.println(PostData.length()); client.println(); client.println(PostData); } else { Serial.println("Connection Failed."); } if (!client.connected()) { Serial.println(); Serial.println("disconnecting."); client.stop(); for(;;) ; } }
flamalex Posté(e) le 6 novembre 2022 Auteur Signaler Posté(e) le 6 novembre 2022 (modifié) Je me réponds à moi mm ca peut aider #include <Ethernet.h> #include <SPI.h> #define ANEMOMETRE 1 //pin D3, interruption n°1 volatile unsigned int countAnemometre = 0; unsigned long previousMillis = 0; unsigned long previousMillis2 = 0; unsigned long delaiAnemometre = 3000L; //3 secondes unsigned long delaiProgramme = 60000L; //60 sec float gust(0); //vent max cumulé sur 1 min / variable fibaro ventMax float wind(0); //vent moyen cumulé sur 1 min / variable fibaro ventMoyen int nbAnemo = 0; //nb d'occurence de mesure Anemo float vitesseVent(0); //vent actuel byte mac[] = { 0x90, 0xA2, 0xDA, 0x0E, 0xA5, 0x7E }; //physical mac address 90:A2:DA:0E:A5:7E byte ip[] = { 192, 168, 1, 175 }; // ip in lan byte gateway[] = { 192, 168, 1, 1 }; // internet access via router byte subnet[] = { 255, 255, 255, 0 }; //subnet mask IPAddress server(192, 168, 1, 24); //HC2 FIBARO EthernetClient client; void setup() { Ethernet.begin(mac, ip); Serial.begin(9600); delay(3000); attachInterrupt(ANEMOMETRE, interruptAnemometre, RISING) ; pinMode(3, INPUT); } /* * Fonction d'interruption de l'anémomètre qui incrémente un compteur à chaque impulsion */ void interruptAnemometre() { countAnemometre++; } void lectureAnemometre () { //Récupération des infos de l'anémomètre toutes les 3 sec //Enregistrement cumulé des valeurs if (millis() - previousMillis > delaiAnemometre) { previousMillis = millis(); // vitesseVent = (PI * RAYON * 2 * countAnemometre)/3*3.6; //3 = durée de prise de mesure (3sec) vitesseVent = (0.83 * countAnemometre) / 3 * 3.6; //3 = durée de prise de mesure (3sec) if (vitesseVent > gust) gust = vitesseVent; wind += vitesseVent; nbAnemo++; countAnemometre = 0; Serial.print("Vent:"); Serial.println(vitesseVent); String PostData = "{\r\n\"value\":\"" + String(vitesseVent) + "\"\r\n}"; //JSON data to send if (client.connect(server, 80)) { Serial.println("connected"); client.print("PUT /api/globalVariables/vitesseVent"); //Fibaro Global Variable client.println(" HTTP/1.1"); client.println("Host: 192.168.1.24"); client.println("Authorization: Basic xxxxxxxxxxxx"); //need to insert base 64 user:password client.print("Content-Length: "); client.println(PostData.length()); client.println(); client.println(PostData); Serial.println(); Serial.println("disconnecting."); delay(500); // par précaution, pour laisser le temps au client de recevoir tout client.stop(); } else Serial.println("Connection Failed."); } } void compilAnemometre () { //Toutes les minutes, compilation des valeurs et envoi au serveur if (millis() - previousMillis2 > delaiProgramme) { previousMillis2 = millis(); float avgwind = wind / nbAnemo; Serial.print("Wind AVG : "); Serial.println(avgwind); Serial.print("Gust : "); Serial.println(gust); String PostData = "{\r\n\"value\":\"" + String(avgwind) + "\"\r\n}"; //JSON data to send if (client.connect(server, 80)) { Serial.println("connected"); client.print("PUT /api/globalVariables/ventMoyen"); //Fibaro Global Variable client.println(" HTTP/1.1"); client.println("Host: 192.168.1.24"); client.println("Authorization: Basic xxxxxxxxxxxxxxxxxx"); //need to insert base 64 user:password client.print("Content-Length: "); client.println(PostData.length()); client.println(); client.println(PostData); PostData = "{\r\n\"value\":\"" + String(gust) + "\"\r\n}"; //JSON data to send client.print("PUT /api/globalVariables/ventMax"); //Fibaro Global Variable client.println(" HTTP/1.1"); client.println("Host: 192.168.1.24"); client.println("Authorization: Basic xxxxxxxxxxxx"); //need to insert base 64 user:password client.print("Content-Length: "); client.println(PostData.length()); client.println(); client.println(PostData); Serial.println(); Serial.println("disconnecting."); delay(500); // par précaution, pour laisser le temps au client de recevoir tout client.stop(); } else Serial.println("Connection Failed."); //RAZ des compteurs qui ont servi a calculé les valeurs moyennes sur 1 min wind = 0; gust = 0; nbAnemo = 0; } } void loop() { // int BP = digitalRead(3); // Ne sert à rien dans ce code lectureAnemometre (); // lecture anémomètre toutes les 3 secondes compilAnemometre (); // moyennage et envoi au bout d'une minute } Modifié le 9 novembre 2022 par flamalex
Messages recommandés