#include #define RED 9 // on définie les port pour les led #define GREEN 6 #define BLUE 10 LiquidCrystal ecran(12,11,5,4,3,2); // on définie les port de connection pour la librérie char tabth[15]; char tabIp[15]; int i = 0, a = 0; int data, temp; String valeur; void setup() { Serial.begin(115200); // on déffinie la vitesse du bus série avec la raspberry PI ecran.begin(16,2); // la taille de écran 16 colonnes et 2 lignes ecran.clear(); // pour éviter les problèmes on éfface écran ecran.print("attente data"); pinMode(RED, OUTPUT); pinMode(GREEN, OUTPUT); pinMode(BLUE, OUTPUT); } void loop() { if(Serial.available() == 0){} // tanque on re soit rien on fait rien else{ if(Serial.read() == 94){ // test si le méssage commance par ^ while(i <= 32){ // enregistrement des massages du lien série dans des tableau /*/////////// début du tableau tabth pour la ligne 1 ////////////////////////////*/ if(i >= 0 && i < 2){ // à exécuter q'une foit tabth[i]= 84; // on ajoute le T i++; // on passe à la casse suivante tabth[i]= 58; // on ajoute le : } if(i>= 2 && i <= 6){ // on récupère la valeur de température delay(100); data = Serial.read(); char msg = (char) data; // convertion les data en ascii pour retrouver les nombres et des lètres tabth[i] = msg; } if(i > 6 && i < 8){ // on àjoute 2 espace if(Serial.read() != 47){ // test pour le séparateur ecran.print("Err transmission"); delay(5000); } tabth[i] = 32; i++; // on passe à la casse suivante tabth[i] =32; } if(i >= 9 && i < 11){ // à exécuter q'une foit tabth[i]= 72; // on ajoute le H i++; // on passe à la casse suivante tabth[i]= 58; // on ajoute le : } if(i >= 11 && i <= 15){ // on récupère la valeur de higrométrie data = Serial.read(); char msg = (char) data; // convertion les data en ascii pour retrouver les nombres et des lètres tabth[i] = msg; } /*/////////// Fin du tableau tabth pour la ligne 1 ////////////////////////////*/ /*/////////// Début du tableau IP pour la ligne 2 ////////////////////////////*/ if(i == 16){ if(Serial.read() != 47){ //test pour le séparateur IP ecran.print("Err transmission"); delay(5000); } } if( i >= 17 && i <= 32){ data = Serial.read(); char ip = (char) data; // converti les data en ascii pour retrouver les nombres et des lèttres if(48 >= ip <= 57){ // test si la chaine est terminée on remplace par des espaces tabIp[i-17] = ip; // on envoie la valeur de Ip dans le tableau } else{ tabIp[i-17] = ' '; } } i++; } // elle ferme le while ligne 20 while(i > 31 && a > 0){ // permet d'effacer les valeurs en trop si le protocole n'est pas respecter if(data = Serial.read() == 0){ a = 1; } } /*/////////// fin du tableau IP pour la ligne 2 ////////////////////////////*/ ecran.clear(); // on éfface écran ecran.setCursor(0,0); // on écrie sur la ligne 1 de écran delay(100); ecran.print(tabth); // on affiche les valeurs de la température et hygrometrie ecran.setCursor(0,1); // on écrie sur la ligne 2 de écran delay(100); ecran.print(tabIp); // on affiche l'adresse IP delay(500); i = 0; // on réinitialiser i pour la prochaine réseption des données a = 0; // on réinitialiser a pour la prochaine réseption des données /////////////// led //////////////////////////////////////////////////////////////////////////////////// valeur=String(tabth[2]); // transformation des valeurs température dans un int (en chiffre) valeur+=String(tabth[3]); temp=valeur.toInt(); if (temp > 28){ // plus grand que 28 on met du rouge analogWrite(RED, 255); analogWrite(GREEN, 0); analogWrite(BLUE, 0); } if (25 < temp && temp <= 28){ // entre 25 et 28 on met du orange analogWrite(RED, 255); analogWrite(GREEN, 50-(17*(temp-26))); // voir explication analogWrite(BLUE, 0); } if (23 <= temp && temp <= 25){ // entre 23 et 25 on varie de vert à jaune analogWrite(RED, 200+(27*(temp-23))); // de 23 à 25 on augmente la couleur rouge de 200 à 255 analogWrite(GREEN, 60*(26-temp)); // de 23 à 25 on diminue la couleur vert de 180 à 60 analogWrite(BLUE, 0); } if (20 <= temp && temp < 23){ // de 20 à 22 on varie de bleu lagon à vert analogWrite(RED, 0); analogWrite(GREEN, 255); analogWrite(BLUE, 90-(45*(temp-20))); // } if (temp < 20){ // plus petit que 20 couleur bleu analogWrite(RED, 0); analogWrite(GREEN, 0); analogWrite(BLUE, 255); } ///////////////////// led FIN ///////////////////////////////////////////////////////////////////////////// } // fin du if de début de ligne } } // fin du loop /* * en ascii / => 47 | ^ => 94 * la pi envoie les valeurs température/Higrométrie/IP * exemple : 21,54/55,14/192.168.0.100 * on sépare avec le /. * les valeurs tempsérature et d'higrométrie on 5 caractères avec la virgule. * on créée 2 tableau de 16 caractères puis température et higrométrie dans un tableau * et l'adresse IP dans le dernier */