Merci pour le projet
Bonjour Monsieur
Je m’appelle ahmed de l'Algérie j’ai entrain de mesurer la température avec capteur humidité DHT22 avec une carte arduino uno j’ai un programme que fonctionne bien le problème je veux stocker les données dans un fichier text ou bien fichier Excel je n’ai pas eu de le faire car je suis débutant dans ce domaine si possible que je vous envoie le programme et vous mettez les instructions qui sont manquées pour stocker les données dans le PC
Merci
#include <stdio.h>
#include <util/delay_basic.h>
const int sensorReadTimeoutMillis = 1000;
const int serialBaudRate = 9600;
const int sensorReadIntervalMs = 5000;
int millisSinceLastRead = 0;
int sensorPin = 2;
volatile long lastTransitionMicros = 0;
volatile int signalLineChanges;
int timings[88];
char errorMsgBuf[256];
boolean errorFlag = false;
boolean readSensor(int * temperature_decidegrees_c, int * rel_humidity_decipercent) {
initState();
attachInterrupt(sensorPin - 2, sensorLineChange, CHANGE);
if (!requestSensorRead()) {
flagError();
} else {
const long startMillis = millis();
do {
delay(100);
} while ( signalLineChanges < 86 && ( (millis() - startMillis) < sensorReadTimeoutMillis));
detachInterrupt(sensorPin - 2);
if (signalLineChanges != 86) {
sprintf(errorMsgBuf, "*** MISSED INTERRUPTS ***: Expected 86 line changes, saw %i", signalLineChanges);
flagError();
} else {
analyseTimings(temperature_decidegrees_c, rel_humidity_decipercent);
}
}
return !errorFlag;
}
void sensorLineChange() {
const long pulseMicros = micros() - lastTransitionMicros;
lastTransitionMicros = micros();
timings[signalLineChanges] = pulseMicros;
signalLineChanges++;
}
void initState() {
detachInterrupt(sensorPin - 2);
for (int i = 0; i < 86; i++) { timings = 0; }
- errorFlag = false;*
- lastTransitionMicros = micros();*
- signalLineChanges = 0;*
}
void debugPrintTimings() {
- for (int i = 0; i < 86; i++) {*
- if (i%10==0) { Serial.print("\n\t"); }*
- char buf[24];*
_ sprintf(buf, i%2==0 ? "H[%02i]: %-3i " : "L[%02i]: %-3i ", i, timings*);_
_ Serial.print(buf);_
_ } // XXX DEBUG*_
* Serial.print("\n");*
}
void analyseTimings(int * temperature_decidegrees_c, int * rel_humidity_decipercent) {
* int timingsIdx = 5;*
* int humid16 = readnbits(&timingsIdx, 16);*
* if (errorFlag) {*
* Serial.println("Failed to capture humidity data");*
* return;*
* }*
* int temp16 = readnbits(&timingsIdx, 16);*
* if (errorFlag) {*
* Serial.println("Failed to capture temperature data");*
* return;*
* }*
* int checksum8 = readnbits(&timingsIdx, 8);*
* if (errorFlag) {*
* Serial.println("Failed to capture checksum");*
* return;*
* }*
* byte cs = (byte)(humid16>>8) + (byte)(humid16&0xFF) + (byte)(temp16>>8) + (byte)(temp16&0xFF);*
* if (cs != checksum8) {*
* sprintf(errorMsgBuf, "Checksum mismatch, bad sensor read");*
* flagError();*
* }*
* if ( temp16 & (1<<15) ) {*
* temp16 = -(temp16 & (~(1<<15)));*
* }*
* if (!errorFlag) {*
temperature_decidegrees_c = temp16;
rel_humidity_decipercent = humid16;
_ }_
}
int readnbits(int * timingsIdx, int nbits) {
_ const int * t = timings + timingsIdx;
const int * tStop = t + nbits2;
* int result = 0;*
* char buf[12];*
* while (t != tStop) {*
checkPreBitLowPulse( (t++), (timingsIdx)++ );
result = shiftNextBit( result, (t++), (timingsIdx)++ );_
_ }_
_ return result;_
}
int shiftNextBit(int oldValue, int pulseMicros, int timingIndex) {
* if (pulseMicros > 10 && pulseMicros < 40) {*
* return (oldValue<<1) | 0;*
* } else if (pulseMicros > 60 && pulseMicros < 85) {*
* return (oldValue<<1) | 1;*
* } else {*
* sprintf(errorMsgBuf, "Bad bit pulse length: %i us at timing idx %i", pulseMicros, timingIndex);*
* flagError();*
* return 0xFFFFFFFF;*
* }*
}
void checkPreBitLowPulse(int pulseMicros, int timingIndex) {
* if (pulseMicros <= 35 || pulseMicros >= 75) {*
* sprintf(errorMsgBuf, "Low pulse before bit transmit (%i us) outside 45-70us tolerance at timing idx %i", pulseMicros, timingIndex);*
* flagError();*
* }*
}
boolean requestSensorRead() {
* if (digitalRead(sensorPin) != HIGH) {*
* sprintf(errorMsgBuf, "Line not HIGH at entry to requestSensorRead()");*
* flagError();*
* return false;*
* }*
* digitalWrite(sensorPin, LOW);*
* pinMode(sensorPin, OUTPUT);*
* delayMicroseconds(7000);*
* digitalWrite(sensorPin, HIGH);*
* delayMicroseconds(30);*
* pinMode(sensorPin, INPUT);*
* int pulseLength = pulseIn(sensorPin, LOW, 200);*
* if (pulseLength == 0) {*
* sprintf(errorMsgBuf, "Sensor read failed: Sensor never pulled line LOW after initial request");*
* flagError();*
* return false;*
* }*
* delayMicroseconds(5);*
* pulseLength = pulseIn(sensorPin, HIGH, 200);*
* if (pulseLength == 0) {*
* sprintf(errorMsgBuf, "Sensor read failed: Sensor didn't go back HIGH after LOW response to read request");*
* flagError();*
* return false;*
* }*
* return true;*
}
void flagError() {
* pinMode(sensorPin, INPUT);*
* digitalWrite(sensorPin, HIGH);*
* errorFlag = true;*
* Serial.println(errorMsgBuf);*
}
void setup() {
* pinMode(sensorPin, INPUT);*
* digitalWrite(sensorPin, HIGH);*
* delay(5000);*
* Serial.begin(serialBaudRate);*
* Serial.println("Sensor initialized, Ready for first reading");*
}
void loop() {
* Serial.println("Reading sensor...");*
* int temperature;*
* int humidity;*
* boolean success = readSensor(&temperature, &humidity);*
* if (success) {*
* char buf[128];*
* sprintf(buf, "Reading: %i.%i degrees C at %i.%i relative humidity", temperature/10, abs(temperature%10), humidity/10, humidity%10);*
* Serial.println(buf);*
* }*
* delay(sensorReadIntervalMs);*
}