Avant toute chose merci de (re)prendre connaissance de la charte et de la respecter.
Pour résumer :
- Avant de poser une question, je cherche si la réponse existe
- Je suis poli, courtois et je respecte tout un chacun sur le forum
- Si un post m'agace : je m'en éloigne plutôt que de répondre d'une façon qui pourrait être mal interprétée


Il n'est jamais du luxe que de rappeler des choses simples :
Courtoisie, amabilité, politesse et bonne humeur sont les maîtres mots pour un forum sympathique, bienveillant et accueillant :)

Toute la communauté vous remercie

2 Bp et 2 Relais sur nano

Retrouvez ici des sujets concernant le protocole mySensors et les modules domotiques de type mySensors utilisés avec JEEDOM
/!\ Plugin mySensors non officiel
FullMetal
Timide
Messages : 14
Inscription : 14 juil. 2017, 10:42

2 Bp et 2 Relais sur nano

Message par FullMetal » 11 avr. 2018, 22:39

Bonsoir à tous,

Je souhaiterais cablé 2 BP et 2 relais sur un nano pilotable par jeedom, et autonome si jeedom HS.
Entrée BP1 active ou désactive sortie S1
Entrée BP2 active ou désactive sortie S2

mon soucis est plutôt software, car ceux ci fonctionnent bien sauf que:
- quand une sortie (S1) est active, je dois appuie 2 fois sur BP2 pour activer S2 (et inversement).
- Lorsque je fais une commande par jeedom sur la sortie 1 ou 2, les 2 sortie s'active et se désactive en même temps.

Je suis un peu perdu dans le code, si une âme charitable pourrais me venir en aide (je ne demande pas qu'on me fasse mon sketch, ;) )

voici mon code:

Code : Tout sélectionner

//instance bounce objet
Bounce debouncer1 = Bounce(); 

//deuxieme instance bounce objet
Bounce debouncer2 = Bounce(); 

int oldValueB1=0;
int oldValueB2=0;
bool state;

MyMessage msgR1(CHILD_ID1,V_LIGHT);
MyMessage msgR2(CHILD_ID2,V_LIGHT);

void setup()  
{  
  // Setup the button
  pinMode(BUTTON_PIN1,INPUT);
  pinMode(BUTTON_PIN2,INPUT);
  // Activate internal pull-up
  digitalWrite(BUTTON_PIN1,HIGH);
  digitalWrite(BUTTON_PIN2,HIGH);
  
  // After setting up the button, setup debouncer
  debouncer1.attach(BUTTON_PIN1);
  debouncer1.interval(5);
  debouncer2.attach(BUTTON_PIN2);
  debouncer2.interval(5);

  // Make sure relays are off when starting up
  digitalWrite(RELAY_PIN1, RELAY_OFF);
  // Then set relay pins in output mode
  pinMode(RELAY_PIN1, OUTPUT);   

  digitalWrite(RELAY_PIN2, RELAY_OFF);
  // Then set relay pins in output mode
  pinMode(RELAY_PIN2, OUTPUT); 
      
  // Set relay to last known state (using eeprom storage) 
  state = loadState(CHILD_ID1);
  digitalWrite(RELAY_PIN1, state?RELAY_ON:RELAY_OFF);
  state = loadState(CHILD_ID2);
  digitalWrite(RELAY_PIN2, state?RELAY_ON:RELAY_OFF);
}

void presentation()  {
  // Send the sketch version information to the gateway and Controller
  // version 2 relais et 2 boutons
  sendSketchInfo("Relay & Button", "1.1");

  // Register all sensors to gw (they will be created as child devices)
  present(CHILD_ID1, S_LIGHT);
  present(CHILD_ID2, S_LIGHT);
}

/*
*  Example on how to asynchronously check for new messages from gw
*/
void loop() 
{
  debouncer1.update();
  debouncer2.update();
  
  // Get the update value
  int value1 = debouncer1.read();
  int value2 = debouncer2.read();
  
  if (value1 != oldValueB1 && value1==0) {
    state = state?false:true;
     digitalWrite(RELAY_PIN1, state?RELAY_ON:RELAY_OFF);
     // Store state in eeprom
     saveState(CHILD_ID1, state);
     // Change relay state
    // state = message.getBool();
      send(msgR1.set(state), false); // Send new state and request ack back
  }
  oldValueB1 = value1;
 

  if (value2 != oldValueB2 && value2==0) {
    state = state?false:true;
     digitalWrite(RELAY_PIN2, state?RELAY_ON:RELAY_OFF);
     // Store state in eeprom
     saveState(CHILD_ID2, state);
     // Change relay state
    // state = message.getBool();
      send(msgR2.set(state), false); // Send new state and request ack back
  }
  oldValueB2 = value2;
} 
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_PIN1, state?RELAY_ON:RELAY_OFF);
     // Store state in eeprom
     saveState(CHILD_ID1, 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   
     state = message.getBool();
     digitalWrite(RELAY_PIN2, state?RELAY_ON:RELAY_OFF);
     // Store state in eeprom
     saveState(CHILD_ID2, 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

Avatar de l’utilisateur
MmX
Timide
Messages : 285
Inscription : 03 mars 2015, 23:09
Localisation : Rodez

Re: 2 Bp et 2 Relais sur nano

Message par MmX » 12 avr. 2018, 13:17

Salut,

Alors comme ça à froid je ne vois pas, met toi en debug et rajoute en dans le code si besoin et regarde ce qu'il te dit.
Essaye de simplifié ta boucle aussi ...

Code : Tout sélectionner

{
  debouncer.update();
  // Get the update value
  int value = debouncer.read();
  if (value != oldValue && value==0) {
      send(msg.set(state?false:true), true); // Send new state and request ack back
  }
  oldValue = value;
}

Répondre

Revenir vers « [Plugin Tiers] MySensors »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 2 invités