deux programmes mysensors sur un arduino

Forum dédie aux capteurs et gateway mysensors.org
Vincy76
Messages : 13
Inscription : 13 janv. 2018, 08:12

Re: deux programmes mysensors sur un arduino

Message par Vincy76 »

Ah oui le language c n'a aucun secret pour toi.
Merci encore.

Envoyé de mon GEM-702L en utilisant Tapatalk
Vincy76
Messages : 13
Inscription : 13 janv. 2018, 08:12

Re: deux programmes mysensors sur un arduino

Message par Vincy76 »

bonjour,
j'ai essayé de faire par moi même une modification au programme en ajoutant un deuxième relais mais voila des que je pilote le premier relais le deuxième ce déclenche aussi et inversement des que je déclenche le deuxième le premier ce déclenche.

voici mon 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_1 2
#define RELAY_PIN_1 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 led
#define CHILD_ID_RELAY_2 3
#define RELAY_PIN_2 5  // 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 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_1; 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);
    }
     for (int sensor=1, pin=RELAY_PIN_2; 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_2, S_BINARY);
  present(CHILD_ID_RELAY_1, 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));
    }
  }
  }
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
bool state = message.getBool();
     digitalWrite(RELAY_PIN_1, state ? RELAY_ON : RELAY_OFF);
     // Store state in eeprom
     saveState(CHILD_ID_RELAY_1, state);

     // Write some debug info
     Serial.print("Incoming change for sensor:");
     Serial.print(message.sensor);
     Serial.print(", New status: ");
     Serial.println(message.getBool());
   } 
     if (message.type == V_LIGHT) {
     // Change relay state
bool state = message.getBool();
     digitalWrite(RELAY_PIN_2, state ? RELAY_ON : RELAY_OFF);
     // Store state in eeprom
     saveState(CHILD_ID_RELAY_2, state);

     // Write some debug info
     Serial.print("Incoming change for sensor:");
     Serial.print(message.sensor);
     Serial.print(", New status: ");
     Serial.println(message.getBool());
   }
}
merci d'avance pour votre aide.
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: deux programmes mysensors sur un arduino

Message par vil1driver »

C'est normal, tu répètes 2 fois le même code.
Tes 2 relais ont la même condition d'activation

Pourquoi ne prends tu pas en compte message.sensor comme dans l'exemple ?

Le journal que je te conseillait de surveiller indique quelque-chose de cohérent ?
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
Vincy76
Messages : 13
Inscription : 13 janv. 2018, 08:12

Re: deux programmes mysensors sur un arduino

Message par Vincy76 »

vil1driver a écrit :C'est normal, tu répètes 2 fois le même code.
Tes 2 relais ont la même condition d'activation

Pourquoi ne prends tu pas en compte message.sensor comme dans l'exemple ?

Le journal que je te conseillait de surveiller indique quelque-chose de cohérent ?
impeccable merci pour ton aide ça marche
Répondre