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 »

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.

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());
   } 
}
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: deux programmes mysensors sur un arduino

Message par vil1driver »

Dormir et être à l'écoute d'éventuelles demandes d'activation de relais n'est pas vraiment compatible

N'oublie pas de t'aider des messages de debug de la console (en haut à droite)
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 :Dormir et être à l'écoute d'éventuelles demandes d'activation de relais n'est pas vraiment compatible

N'oublie pas de t'aider des messages de debug de la console (en haut à droite)

oui c'est pas faux j'ai pas réfléchi en rajoutant cette fonction :roll: .
je l'ai supprimé.

mais j'ai un message d'erreur qui apparait.

Code : Tout sélectionner

Arduino : 1.8.5 (Windows 10), Carte : "Arduino Nano, ATmega328"

C:\Users\admin\Desktop\station_salon_temp_et_buzzer\station_salon_temp_et_buzzer.ino: In function 'void receive(const MyMessage&)':

station_salon_temp_et_buzzer:103: error: 'state' was not declared in this scope

      state = message.getBool();

      ^

exit status 1
'state' was not declared in this scope
hbachetti

Re: deux programmes mysensors sur un arduino

Message par hbachetti »

En C toute variable doit être déclarée en lui donnant un type :
Soit tu la déclare en global au début du fichier, soit tu la déclares en local, au début de ta fonction receive, ou alors au moment ou tu en as besoin, comme ceci :
bool state = message.getBool();
@+
Vincy76
Messages : 13
Inscription : 13 janv. 2018, 08:12

Re: deux programmes mysensors sur un arduino

Message par Vincy76 »

Ah d accord. Mais du coup pk j ai ce message d erreur ? Il y a un truc qui m échappe.

Envoyé de mon GEM-702L en utilisant Tapatalk
hbachetti

Re: deux programmes mysensors sur un arduino

Message par hbachetti »

Je te l'ai expliqué.
En C toute variable doit être déclarée en lui donnant un type avant de l'utiliser. On est pas en langage BASIC.

En PYTHON tu n'aurais pas ce problème. Malheureusement pour programmer en python il te faudrait au moins une RASPBERRY PI.

Dans la dernière version de ton code, la variable n'était pas déclarée non plus.
J'ai vérifié, elle provoque la même erreur à la compilation.

A ta place je commencerais à étudier le C avec un tuto, sinon tu ne pourras jamais aller bien loin.

https://openclassrooms.com/courses/prog ... ec-arduino

@+ et courage
Vincy76
Messages : 13
Inscription : 13 janv. 2018, 08:12

Re: deux programmes mysensors sur un arduino

Message par Vincy76 »

hbachetti a écrit :Je te l'ai expliqué.
En C toute variable doit être déclarée en lui donnant un type avant de l'utiliser. On est pas en langage BASIC.

En PYTHON tu n'aurais pas ce problème. Malheureusement pour programmer en python il te faudrait au moins une RASPBERRY PI.

Dans la dernière version de ton code, la variable n'était pas déclarée non plus.
J'ai vérifié, elle provoque la même erreur à la compilation.

A ta place je commencerais à étudier le C avec un tuto, sinon tu ne pourras jamais aller bien loin.

https://openclassrooms.com/courses/prog ... ec-arduino

@+ et courage
merci pour le lien.
je vais commencer a étudier cela. c'est pas si facile que ça :D
serait il possible de me dépatouille ?
hbachetti

Re: deux programmes mysensors sur un arduino

Message par hbachetti »

Je t'ai déjà donné la solution :
au lieu d'écrire :

Code : Tout sélectionner

state = message.getBool();
écris simplement :

Code : Tout sélectionner

bool state = message.getBool();
Ça compile, c'est sûr.
Vincy76
Messages : 13
Inscription : 13 janv. 2018, 08:12

Re: deux programmes mysensors sur un arduino

Message par Vincy76 »

je te remercie énormément ça marche!! il es vrai il faut que j'apprenne car un truc qui te parait super simple pour moi c’était le flou. alors j'ai déjà suivi ton conseil je lit le tuto que tu ma donner.
petite question cela fait combien de temps que tu pratique le langage C?
hbachetti

Re: deux programmes mysensors sur un arduino

Message par hbachetti »

Je suis développeur logiciel embarqué depuis 1987, donc 30 ans.
Bien heureux d'avoir pu te venir en aide. Bonne continuation.
@+
Répondre