Re: deux programmes mysensors sur un arduino
Publié : 04 févr. 2018, 14:38
j'ai donc apporté les modifications que tu me propose et donc après téléversement toujours le même problème température ok mais relais toujours pas.
entre temps j'ai rajouter le sleep mode pour le DHT22.
voici le code.
entre temps j'ai rajouter le sleep mode pour le DHT22.
voici le code.
Code : Tout sélectionner
// Enable debug prints to serial monitor
#define MY_DEBUG
// Enable and select radio type attached
#define MY_RADIO_NRF24
//#define MY_RADIO_NRF5_ESB
//#define MY_RADIO_RFM69
//#define MY_RADIO_RFM95
// Enable repeater functionality for this node
#define MY_REPEATER_FEATURE
#include <SPI.h>
#include <MySensors.h>
#include <DHT.h>
//zone declarative pour buzzer
#define CHILD_ID_RELAY 2
#define RELAY_PIN 4 // Arduino Digital I/O pin number for first relay (second on pin+1 etc)
#define NUMBER_OF_RELAYS 1 // Total number of attached relays
#define RELAY_ON 1 // GPIO value to write to turn on attached relay
#define RELAY_OFF 0 // GPIO value to write to turn off attached relay
//zone declarative pour la sonde DHT22
#define CHILD_ID_TEMP 0
#define CHILD_ID_HUM 1
#define SLEEP_NODE true // Mettre à True pour activer la mise en sommeil (Sleep Mode) / True to activate Sleep Mode
unsigned long SLEEP_TIME = 30 * 1000; // Temps de mise en sommeil (en ms) / Sleep time between reads (in milliseconds)
#define DHTPIN 3 // Broche sur laquelle est branché le DHT / what pin we're connected to
#define DHTTYPE DHT22 // DHT 22 (AM2302), DHT11
float lastTemp;
float lastHum;
boolean metric = true;
MyMessage msgHum(CHILD_ID_HUM, V_HUM);
MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
void before()
{
for (int sensor=1, pin=RELAY_PIN; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) {
// Then set relay pins in output mode
pinMode(pin, OUTPUT);
// Set relay to last known state (using eeprom storage)
digitalWrite(pin, loadState(sensor)?RELAY_ON:RELAY_OFF);
}
}
void setup()
{
}
void presentation()
{
// Présenttion du sketch / Send the sketch version information to the gateway and Controller
sendSketchInfo("Sonde Temp/Hum DHT22 + RELAY", "1.0");
// Déclaration des capteurs attachés au noeud
present(CHILD_ID_TEMP, S_TEMP);
present(CHILD_ID_HUM, S_HUM);
present(CHILD_ID_RELAY, S_BINARY);
}
void loop()
{
DHT dht(DHTPIN, DHTTYPE,3); // Creation d'un objet dht dans la loop sinon les valeurs ne sont pas mesurées au réveil
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
if (isnan(temperature)) {
Serial.println("Impossible de lire la temperature sur le DHT");
} else {
if (temperature != lastTemp) {
lastTemp = temperature;
if (!metric) {
temperature = dht.readTemperature(true);
}
Serial.print("T: ");
Serial.print(temperature);
Serial.print(" | H: ");
Serial.println(humidity);
send(msgTemp.set(temperature, 1));
send(msgHum.set(humidity, 1));
} else {
Serial.println("Temperature identique => on force l'envoi");
Serial.print("T: ");
Serial.print(temperature);
Serial.print(" | H: ");
Serial.println(humidity);
send(msgTemp.set(temperature, 1));
send(msgHum.set(humidity, 1));
}
}
if (SLEEP_NODE) {
Serial.println("Sleep");
sleep(SLEEP_TIME);
} else {
delay (SLEEP_TIME);
}
}
void receive(const MyMessage &message) {
// We only expect one type of message from controller. But we better check anyway.
if (message.isAck()) {
Serial.println("This is an ack from gateway");
}
if (message.type == V_LIGHT) {
// Change relay state
state = message.getBool();
digitalWrite(RELAY_PIN, state ? RELAY_ON : RELAY_OFF);
// Store state in eeprom
saveState(CHILD_ID_RELAY, state);
// Write some debug info
Serial.print("Incoming change for sensor:");
Serial.print(message.sensor);
Serial.print(", New status: ");
Serial.println(message.getBool());
}
}