/* DHT22-4.ino : Lecture des donn�es � partir du capteur DHT22, Affichage des donn�es lues Transcodage pour la transmission D�codage apr�s la r�ception Affichage des donn�es reconstitu�es Sketchs de base issus de https://github.com/panStamp/panstamp/wiki et de panstamp - Daniel Berenger : BasicRadio, BasicBeacon, DHT22... Modifications - adaptations pour les tests : Philippe Redoutey, janvier 2015 Raccordement du DHT22 : Connectez la pin 1 du capteur (gauche vu de face) au +5V. NOTE: si vous utilisez une carte qui fonctionne en 3,3v panstamp, arduino Due... pour les niveaux logiques, connectez la pin 1 au 3,3v au lieu du 5v. Connectez pin 2 du capteur a la DHTPIN d�finie. Connectez la pin 4 (droite vu de face) � la masse (GND). Connectez une r�sistance de 10 a 27Kohms entre les pin 2 (data) et l (alimentation du capteur). Essai de ranscidage � partir de http://www.varesano.net/blog/fabio/sending-float-variables-over-serial-without-loss-precision-arduino-and-processing */ // permet d'envoyer les informations vers le moniteur s�rie #include "HardwareSerial.h" // Bibliotheque pour le DHT #include "DHT.h" // Definition des N� de pin utilis�es // NB : il s'agit du raccordement existant sur la carte Battery Board int Sensor_ENA = 15; // alimentation du capteur #define DHTPIN 16 // connexion pour les datas #define LED 4 // pour les test, pour v�rifier le passage dans les boucles float hum2; float temp2; // Lignes � activer ou d�sactiver en fonction du capteur utilis� //#define DHTTYPE DHT11 // DHT 11 #define DHTTYPE DHT22 // DHT 22 (AM2302) //#define DHTTYPE DHT21 // DHT 21 (AM2301) // Initialisation du capteur; attention, valable pour un Arduino "normal" � 16MHz DHT dht(DHTPIN, DHTTYPE); // NOTE: For working with a faster chip, like an Arduino Due or Teensy, you // might need to increase the threshold for cycle counts considered a 1 or 0. // You can do this by passing a 3rd parameter for this threshold. It's a bit // of fiddling to find the right value, but in general the faster the CPU the // higher the value. The default for a 16mhz AVR is a value of 6. For an // Arduino Due that runs at 84mhz a value of 30 works. // Example to initialize DHT sensor for Arduino Due: //DHT dht(DHTPIN, DHTTYPE, 30); void setup() { Serial.begin(9600); Serial.println("DHTxx test!"); pinMode(Sensor_ENA, OUTPUT); digitalWrite(Sensor_ENA, HIGH); pinMode(LED, OUTPUT); dht.begin(); } void loop() { // Attention, il faut attendre quelques secondes entre 2 mesures. // ! Il s'agit d'un capteur tr�s lent // La lecture des donn�es prend envion 250 millisecondes delay(5000); digitalWrite(LED, HIGH); // pour les tests // Lecture hygrom�trie en % float hum1 = dht.readHumidity(); // Lecture temperature en degr�s Celsius float temp1 = dht.readTemperature(); // Lecture temperature en degr�s Fahrenheit // float f = dht.readTemperature(true); digitalWrite(LED, LOW); // pour les tests // V�rification de la bonne lecture des donn�es // sinon, sortie directe pour relecture imm�diate if (isnan(hum1) || isnan(temp1)) { Serial.println("Failed to read from DHT sensor!"); return; } // Affichagege sur le moniteur s�rie pour les tests Serial.println("mesures directes et envoy�es"); Serial.print("Humidite: "); Serial.print(hum1); Serial.print(" %\t"); // \t = tabulation Serial.print("Temperature: "); Serial.print(temp1); Serial.print(" �C\t"); Serial.println(); // Essai de codage - decodage byte * BufOutHum = (byte *) &hum1; byte OctetOut1 = BufOutHum[0]; byte OctetOut2 = BufOutHum[1]; byte OctetOut3 = BufOutHum[2]; byte OctetOut4 = BufOutHum[3]; // ----------------------------------------- // --- Transmissionission � cet endroit --- // ----------------------------------------- byte OctetIn1 = OctetOut1; byte OctetIn2 = OctetOut2; byte OctetIn3 = OctetOut3; byte OctetIn4 = OctetOut4; /* int intbit = 0; intbit = (OctetIn4 << 24) | ((OctetIn3 & 0xff) << 16) | ((OctetIn2 & 0xff) << 8) | (OctetIn1 & 0xff); float hum2 = float.intBitsToFloat(intbit); */ float hum2 = (OctetIn4 & 0xff << 24) | ((OctetIn3 & 0xff) << 16) | ((OctetIn2 & 0xff) << 8) | (OctetIn1 & 0xff); Serial.println("Mesures re�ues"); Serial.print("Humidite: "); Serial.print(hum2); Serial.print(" %\t"); // \t = tabulation Serial.print("Temperature: "); Serial.print(temp2 ); Serial.print(" �C\t"); Serial.println(); /* union { ����char bytes[4]; ����float val; } bfconvert; // float bobsuruncle = 7.314239; char output[4]; bfconvert.val = h; output[0] = byte[0]; output[1] = byte[1]; output[2] = byte[2]; output[3] = byte[3]; // en pratique les output sont �mis et les input sont re�us � l'autre "bout" union { ����char bytes[4]; ����float val; } bfconvert; � // float whosuruncle; char input[4]; input[0] = output[0]; input[1] = output[1]; input[2] = output[2]; input[3] = output[3]; h2 = bfconvert.val */ } // fin du void loop