Ciao a tutti ho un problema.
Arduino Yun+ n° 2 sensori dht11 + 1 ds12b20 che dovrebbero registrare su thingspeak i valori.
Il mio problema è questo:
- quando uso tutti e tre i sensori sulla seriale stampano i valori ma non registrano su thinspeak nessun valore
- quando uso solo in° 2 dht11 questi sulla seriale stampano i valori e registrano su thinspeak i valori
- quando uso solo ds12b20 questo sulla seriale stampa i valori e registra su thinspeak i valori
sembra che il
float temperature = getTemp();
generi l' anomalia.
Nel void loop richiamo tempint() ogni minuto
if ( currMin != lastMin ) {
lastMin = currMin;
tempint();
}
tempint() acquisisce tutti i valori
void tempint() {
float h = dht.readHumidity(); // attribuisco alla variabile h l'umidita'
ThingSpeak.setField(1,h);
float t = dht.readTemperature(); // attribuisco alla variabile t la temperatura
ThingSpeak.setField(2,t);
float he = dhte.readHumidity(); // attribuisco alla variabile h l'umidita'
ThingSpeak.setField(4,he);
float te = dhte.readTemperature(); // attribuisco alla variabile t la temperatura
ThingSpeak.setField(3,te);
float temperature = getTemp();
ThingSpeak.setField(5,temperature);
ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
DEBUG_PRINT(" TEMP ACQUA ");
DEBUG_PRINTLN(temperature);
////
//// controllo l'avvenuta comunicazione, ed avvio la scrittuta dei dati sulla seriale, ed in caso negativo scrito che è fallita
if (isnan(te) || isnan(he)) {
DEBUG_PRINT(" sensore esterno fallito ");
} else {
DEBUG_PRINT("-> temp est ");
DEBUG_PRINT(te);
DEBUG_PRINT(" umidita est ");
DEBUG_PRINTLN(he);
}
// controllo l'avvenuta comunicazione, ed avvio la scrittuta dei dati sulla seriale, ed in caso negativo scrito che è fallita
if (isnan(t) || isnan(h)) {
DEBUG_PRINT(" sensore interno fallito ");
} else {
DEBUG_PRINT("-> temp int ");
DEBUG_PRINT(t);
DEBUG_PRINT(" umidita int ");
DEBUG_PRINTLN(h);
}
}
/**********************************************************************************/
float getTemp(){
//returns the temperature from one DS18B20 in DEG Celsius
byte data[12];
byte addr[8];
if ( !ds.search(addr)) {
//no more sensors on chain, reset search
ds.reset_search();
// return -1000;
return 10;
}
if ( OneWire::crc8( addr, 7) != addr[7]) {
Serial.println("CRC is not valid!");
// return -1000;
return 10;
}
if ( addr[0] != 0x10 && addr[0] != 0x28) {
Serial.print("Device is not recognized");
// return -1000;
return 10;
}
ds.reset();
ds.select(addr);
ds.write(0x44,1); // start conversion, with parasite power on at the end
delay(750);
byte present = ds.reset();
ds.select(addr);
ds.write(0xBE); // Read Scratchpad
for (int i = 0; i < 9; i++) { // we need 9 bytes
data[i] = ds.read();
}
ds.reset_search();
byte MSB = data[1];
byte LSB = data[0];
float tempRead = ((MSB << 8) | LSB); //using two's compliment
float TemperatureSum = tempRead / 16;
return TemperatureSum;
}
Come posso risolvere?....
Grazie!