flamalex Posté(e) le 19 novembre 2020 Signaler Partager 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(;;) ; } } Lien vers le commentaire Partager sur d’autres sites More sharing options...
flamalex Posté(e) le 6 novembre 2022 Auteur Signaler Partager 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés