mettre deux deux skech ensemble

Un forum dédie à vos questions concernant l'intégration à Domoticz des capteurs et gateway mysensors.org
Répondre
rebel59540
Messages : 50
Enregistré le : 23 févr. 2017, 15:10

mettre deux deux skech ensemble

Message par rebel59540 »

bonjour j'essaye en vin de mettre des relays et des ouvertures de portes
sur le même noeud mon jais mie se code la

/**
* The MySensors Arduino library handles the wireless radio link and protocol
* between your home built sensors/actuators and HA controller of choice.
* The sensors forms a self healing radio network with optional repeaters. Each
* repeater and gateway builds a routing tables in EEPROM which keeps track of the
* network topology allowing messages to be routed to nodes.
*
* Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
* Copyright (C) 2013-2015 Sensnology AB
* Full contributor list: https://github.com/mysensors/Arduino/gr ... ntributors
*
* Documentation: http://www.mysensors.org
* Support Forum: http://forum.mysensors.org
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* version 2 as published by the Free Software Foundation.
*
*******************************
*
* DESCRIPTION
*
* Simple binary switch example
* Connect button or door/window reed switch between
* digitial I/O pin 3 (BUTTON_PIN below) and GND.
* http://www.mysensors.org/build/binary
*/


// Enable debug prints to serial monitor
#define MY_DEBUG

// Enable and select radio type attached
#define MY_RADIO_NRF24
//#define MY_RADIO_RFM69

#include <SPI.h>
#include <MySensors.h>
#include <Bounce2.h>

#define CHILD_ID 3
#define BUTTON_PIN 3 // Arduino Digital I/O pin for button/reed switch
#define RELAY_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
Bounce debouncer = Bounce();
int oldValue=-1;

// Change to V_LIGHT if you use S_LIGHT in presentation below
MyMessage msg(CHILD_ID,V_TRIPPED);

void before()

{
for (int sensor=1, pin=RELAY_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);
}
}

void setup()
{
// Setup the button
pinMode(BUTTON_PIN,INPUT);
// Activate internal pull-up
digitalWrite(BUTTON_PIN,HIGH);

// After setting up the button, setup debouncer
debouncer.attach(BUTTON_PIN);
debouncer.interval(5);


}



void presentation() {
// Register binary input sensor to gw (they will be created as child devices)
// You can use S_DOOR, S_MOTION or S_LIGHT here depending on your usage.
// If S_LIGHT is used, remember to update variable type you send in. See "msg" above.
present(CHILD_ID, S_DOOR);
for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) {
// Register all sensors to gw (they will be created as child devices)
present(sensor, S_BINARY);
}
}


// Check if digital input has changed and send in new value
void loop()
{
debouncer.update();
// Get the update value
int value = debouncer.read();

if (value != oldValue) {
// Send in the new value
send(msg.set(value==HIGH ? 1 : 0));
oldValue = value;
}

void receive(const MyMessage &message) {

// We only expect one type of message from controller. But we better check anyway.
if (message.type==V_LIGHT) {
// Change relay state
digitalWrite(message.sensor-1+RELAY_1, message.getBool()?RELAY_ON:RELAY_OFF);
// Store state in eeprom
saveState(message.sensor, message.getBool());
// Write some debug info
Serial.print("Incoming change for sensor:");
Serial.print(message.sensor);
Serial.print(", New status: ");
Serial.println(message.getBool());
}

}


mais j'ais des erreurs

Arduino : 1.6.5 (Windows 8.1), Carte : "Arduino/Genuino Uno"

essais_ouverture_porte_relay.ino: In function 'void loop()':
essais_ouverture_porte_relay:105: error: a function-definition is not allowed here before '{' token
essais_ouverture_porte_relay:120: error: expected '}' at end of input
a function-definition is not allowed here before '{' token

Ce rapport contiendrait plus d'informations si l'option
"Montrer les informations de sortie pendant la compilation"
était activée dans Fichier > Préférences.

si une âme sympas pourrais m'aider
merci

Stef3376
Messages : 9
Enregistré le : 06 nov. 2016, 19:25

Re: mettre deux deux skech ensemble

Message par Stef3376 »

Salut,
il me semble qu'il te manque une accolade fermante à la fin de ta fonction loop()
chaque ouverture "{" doit avoir sa fermeture "}"
il y a un bouton "code" dans l'éditeur du forum c'est mieux pour voir les indentations

Code : Tout sélectionner

void loop() 
{
  debouncer.update();
  // Get the update value
  int value = debouncer.read();

  if (value != oldValue) {
    // Send in the new value
    send(msg.set(value==HIGH ? 1 : 0));
    oldValue = value;
   }
}

rebel59540
Messages : 50
Enregistré le : 23 févr. 2017, 15:10

Re: mettre deux deux skech ensemble

Message par rebel59540 »

merci pour ton aide il y a plus d'erreur maintenant a voir si sa fonctionne

rebel59540
Messages : 50
Enregistré le : 23 févr. 2017, 15:10

Re: mettre deux deux skech ensemble

Message par rebel59540 »

je te remercie infiniment tout fonctionne nickel je peut mettre mais deux relay pour mon volet et un détecteur d'ouverture
heureusement qu'il y a encore des personnes qui donne de leur temps pour aider

rebel59540
Messages : 50
Enregistré le : 23 févr. 2017, 15:10

Re: mettre deux deux skech ensemble (resolu)

Message par rebel59540 »

je te remercie infiniment tout fonctionne nickel je peut mettre mais deux relay pour mon volet et un détecteur d'ouverture
heureusement qu'il y a encore des personnes qui donne de leur temps pour aider

thom
Messages : 52
Enregistré le : 29 sept. 2015, 03:12
Localisation : Montréal

Re: mettre deux deux skech ensemble

Message par thom »

Bonjour,

dans le même ordre d'idée, j'essaye de mettre un relais un détecteur de mouvement, j'ai assembler les 2 sketchs mais le moniteur IDE m'affiche que des 1... et je suis vraiment nul en terme de code...

Voici le code:

Code : Tout sélectionner

/**
 * The MySensors Arduino library handles the wireless radio link and protocol
 * between your home built sensors/actuators and HA controller of choice.
 * The sensors forms a self healing radio network with optional repeaters. Each
 * repeater and gateway builds a routing tables in EEPROM which keeps track of the
 * network topology allowing messages to be routed to nodes.
 *
 * Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
 * Copyright (C) 2013-2015 Sensnology AB
 * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors
 *
 * Documentation: http://www.mysensors.org
 * Support Forum: http://forum.mysensors.org
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * version 2 as published by the Free Software Foundation.
 *
 *******************************
 *
 * REVISION HISTORY
 * Version 1.0 - Henrik Ekblad
 *
 * DESCRIPTION
 * Motion Sensor example using HC-SR501
 * http://www.mysensors.org/build/motion
 *
 */
 
// Enable debug prints
// #define MY_DEBUG

// Enable and select radio type attached
#define MY_RADIO_NRF24
//#define MY_RADIO_RFM69

#include <MySensors.h>

//unsigned long SLEEP_TIME = 120000; // Sleep time between reports (in milliseconds)
#define DIGITAL_INPUT_SENSOR 2   // The digital input you attached your motion sensor.  (Only 2 and 3 generates interrupt!)
#define CHILD_ID 2   // Id of the sensor child

#define RELAY_1  3  // 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

// Initialize motion message
MyMessage msg(CHILD_ID, V_TRIPPED);

void setup()
{
	pinMode(DIGITAL_INPUT_SENSOR, INPUT);      // sets the motion sensor digital pin as input
 
 for (int sensor=1, pin=RELAY_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);
 }
}

void presentation()
{
	// Send the sketch version information to the gateway and Controller
	sendSketchInfo("Motion Sensor garage", "1.0");

	// Register all sensors to gw (they will be created as child devices)
	present(CHILD_ID, S_MOTION);
  for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) {
    // Register all sensors to gw (they will be created as child devices)
    present(sensor, S_BINARY);
   }
}

void loop()
{
	// Read digital motion value
	bool tripped = digitalRead(DIGITAL_INPUT_SENSOR) == HIGH;

	Serial.println(tripped);
	send(msg.set(tripped?"1":"0"));  // Send tripped value to gw

	// Sleep until interrupt comes in on motion sensor. Send update every two minute.
	//sleep(digitalPinToInterrupt(DIGITAL_INPUT_SENSOR), CHANGE, SLEEP_TIME);
}
void receive(const MyMessage &message)
{
  // We only expect one type of message from controller. But we better check anyway.
  if (message.type==V_STATUS) {
    // Change relay state
    digitalWrite(message.sensor-1+RELAY_1, message.getBool()?RELAY_ON:RELAY_OFF);
    // Store state in eeprom
    saveState(message.sensor, message.getBool());
    // Write some debug info
    Serial.print("Incoming change for sensor:");
    Serial.print(message.sensor);
    Serial.print(", New status: ");
    Serial.println(message.getBool());
  }
}
Raspberry 2B Seafile et NAS
Raspberry 2B MotioneyeOS
Raspberry 3 Domoticz avec Zwave et Mysensors

domdom
Messages : 64
Enregistré le : 20 mai 2016, 10:48
Localisation : Ille-et-Vilaine

Re: mettre deux deux skech ensemble

Message par domdom »

Le debug d'un code de cette façon n'est pas facile.

As-tu regardé avec le moniteur série si la valeur de tripped change ?

Attention, le code d'origine dont tu es parti est prévu pour fonctionner en interruption : la carte est mise en veille et réveillée chaque fois que l'entrée 3 change d'état.

Là, tu as repris le code en supprimant la mise en veille pour pouvoir rester en écoute et recevoir les messages de commande des relais. Ca ne pose pas de problème, mais du coup, ta boucle loop s'exécute en boucle sans tempo et envoie des messages radio en permanence. Je te propose la modification suivante (non testé) :

Code : Tout sélectionner

void loop()
{
   bool tripped;
   static bool oldTripped;		// static => la valeur de la variable est conservée entre chaque exécution de la fonction
 
   tripped = digitalRead(DIGITAL_INPUT_SENSOR);	// lecture de l'entrée

   if (oldTripped != tripped) {						// si l'état de l'entrée a changé
       oldTripped = tripped;							// mémorise le nouvel état	
       Serial.println(tripped);						// affiche sur le liaison série le nouvel état
       send(msg.set(tripped?"1":"0"));  			// envoie le nouvel état sur la liaison radio
   }

}

thom
Messages : 52
Enregistré le : 29 sept. 2015, 03:12
Localisation : Montréal

Re: mettre deux deux skech ensemble

Message par thom »

Merci beaucoup domdom pour le coup de main !

Ça fonctionne parfaitement.

Donc pour ceux qui sont intéressé voici le code en entier:

Code : Tout sélectionner

/**
 * The MySensors Arduino library handles the wireless radio link and protocol
 * between your home built sensors/actuators and HA controller of choice.
 * The sensors forms a self healing radio network with optional repeaters. Each
 * repeater and gateway builds a routing tables in EEPROM which keeps track of the
 * network topology allowing messages to be routed to nodes.
 *
 * Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
 * Copyright (C) 2013-2015 Sensnology AB
 * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors
 *
 * Documentation: http://www.mysensors.org
 * Support Forum: http://forum.mysensors.org
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * version 2 as published by the Free Software Foundation.
 *
 *******************************
 *
 * REVISION HISTORY
 * Version 1.0 - Henrik Ekblad
 *
 * DESCRIPTION
 * Motion Sensor example using HC-SR501
 * http://www.mysensors.org/build/motion
 *
 */
 
// Enable debug prints
#define MY_DEBUG

// Enable and select radio type attached
#define MY_RADIO_NRF24
//#define MY_RADIO_RFM69

#include <MySensors.h>

//unsigned long SLEEP_TIME = 120000; // Sleep time between reports (in milliseconds)
#define DIGITAL_INPUT_SENSOR 2   // The digital input you attached your motion sensor.  (Only 2 and 3 generates interrupt!)
#define CHILD_ID 2   // Id of the sensor child

#define RELAY_1  3  // 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

// Initialize motion message
MyMessage msg(CHILD_ID, V_TRIPPED);

void setup()
{
	pinMode(DIGITAL_INPUT_SENSOR, INPUT);      // sets the motion sensor digital pin as input
 
 for (int sensor=1, pin=RELAY_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);
 }
}

void presentation()
{
	// Send the sketch version information to the gateway and Controller
	sendSketchInfo("Motion Sensor garage", "1.0");

	// Register all sensors to gw (they will be created as child devices)
	present(CHILD_ID, S_MOTION);
  for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) {
    // Register all sensors to gw (they will be created as child devices)
    present(sensor, S_BINARY);
   }
}

void loop()
{
   bool tripped;
   static bool oldTripped;      // static => la valeur de la variable est conservée entre chaque exécution de la fonction
 
   tripped = digitalRead(DIGITAL_INPUT_SENSOR);   // lecture de l'entrée

   if (oldTripped != tripped) {                  // si l'état de l'entrée a changé
       oldTripped = tripped;                     // mémorise le nouvel état   
       Serial.println(tripped);                  // affiche sur le liaison série le nouvel état
       send(msg.set(tripped?"1":"0"));           // envoie le nouvel état sur la liaison radio
   }

}
void receive(const MyMessage &message)
{
  // We only expect one type of message from controller. But we better check anyway.
  if (message.type==V_STATUS) {
    // Change relay state
    digitalWrite(message.sensor-1+RELAY_1, message.getBool()?RELAY_ON:RELAY_OFF);
    // Store state in eeprom
    saveState(message.sensor, message.getBool());
    // Write some debug info
    Serial.print("Incoming change for sensor:");
    Serial.print(message.sensor);
    Serial.print(", New status: ");
    Serial.println(message.getBool());
  }
}

Raspberry 2B Seafile et NAS
Raspberry 2B MotioneyeOS
Raspberry 3 Domoticz avec Zwave et Mysensors

domdom
Messages : 64
Enregistré le : 20 mai 2016, 10:48
Localisation : Ille-et-Vilaine

Re: mettre deux deux skech ensemble

Message par domdom »

Ah ben super, merci pour le retour !

Le debug mysensors/domoticz n'est pas toujours évident... mais on est d'autant plus contents quand ça fonctionne ! ;o)

Répondre