(boum c pas grave de revoir le croquis, le simplifier ??? )
on oublie (pour un temps) la partie Impulsionnelle, adieu wait delay et "MCO: PRO: RC"
regarde* le programme a ébavurer
il est fonctionnelle a 199%
le seul problème c sur Reset du Node, mon ampoule sur Domoticz ne prend pas la bonne valeur.
Code : Tout sélectionner
/*
* TL_NoImpuls_TS_Boum2.ino
*
* https://forum.mysensors.org/topic/11263/domoticz-mysensors
* https://easydomoticz.com/forum/viewtopic.php?p=85649#p85649
*
* REVISION HISTORY
* (sur une base lointaine par Alco)
* Version 0.0 - Node en RS485 par JeeLet
* Version 2.0 - Modif par Boum et Test sans Impulsion
*
*LA DESCRIPTION
* TL :Commande Impulsionnelle de TeLerupteur d'Eclairage
* TS :Retour d'Etat par un contact auxiliaire du TL.
*
* L'installation Electrique n'est pas modifiee,
* les boutons poussoir de l'habitat Cmd aussi le TL.
*
*
*/
// ------- NON-FUNCTIONAL ---- NON-FUNCTIONAL ----
#define MY_DEBUG
#define MY_NODE_ID 25 /*pour Node ID static*/
/* ----- Module RS485 ----*/
#define MY_RS485
#define MY_RS485_DE_PIN 2
#define MY_RS485_BAUD_RATE 9600
#include <MySensors.h>
#include <Bounce2.h>
#define STATE_CHILD_ID 3 /*Id du capteur (enfant)*/
#define RELAY_PIN 4 // pin Cmd Telerupteur "TL"
#define CONTROL_INPUT_PIN 3 // pin Contact Auxiliaire "TS"
#define RELAY_ON 1
#define RELAY_OFF 0
Bounce debouncer = Bounce(); // initialize debouncer
bool currentState;
MyMessage msg(STATE_CHILD_ID,V_STATUS);
void setup() {
pinMode(CONTROL_INPUT_PIN, INPUT_PULLUP);
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, RELAY_OFF);
debouncer.attach(CONTROL_INPUT_PIN);
debouncer.interval(20);
}
void presentation() {
sendSketchInfo("Cmd TL", "2.0");
present(STATE_CHILD_ID, S_BINARY); // replace S_LIGHT for MySensors 2.0
}
void loop() {
if (debouncer.update()) /*Inform controller if state change from input*/
{
bool newState = !debouncer.read();
Serial.print("Changement état du contact :");
Serial.println(newState);
if (newState != currentState)
{
currentState = newState;
Serial.println("Envoi message à la passerelle");
send(msg.set(newState));
}
}
}
void receive(const MyMessage &message) {
if (message.isEcho()) /*keep message.isAckfor older MySensors version*/
{
Serial.println("Ceci est un accusé de réception de la passerelle");
Serial.println("Cmd TL 1.a");
return;
}
if (message.type==V_STATUS) // V_STATUS pour MyS v2.0, annulé V_LIGHT.
{
Serial.print("Envoi impulsion pour passer vers état: ");
/* partie désactiver pour test
digitalWrite(RELAY_PIN, RELAY_ON);
wait(200); //delai On-Off Impuls
digitalWrite(RELAY_PIN, RELAY_OFF);
*/
// test en On Off simple
digitalWrite(RELAY_PIN, message.getBool()?RELAY_ON:RELAY_OFF);
// Write some debug info
Serial.print("Changement entrant pour le capteur:");
Serial.print(message.sensor);
Serial.print(", New status: ");
Serial.println(message.getBool());
}
}
// ------------ fin Pgm -----------.... alors alors dit moi tout ( j'ai merdillyou ?? )
Ah oui, pour
EDIT: J'ai regardé plus en détail et répondu sur le forum de MySensors. Globablement, il faut éviter d'appeler send() et wait() dans receive().
c bien le Delay (anciennement Wait) qui donne les erreurs ( c normal)
j'ai fait le test
et pour
"....deux macros sont égales à 3, donc ça marche tant que l'ID du nœud et la connexion du contacteur ne changent pas."
Code : Tout sélectionner
#define CHILD_ID 3 /*Id du capteur (enfant)*/
#define BUTTON_PIN 3 // pin Contact Auxiliaire "TS"* "regarde" merci pour le temps passé.