le but lorsque j'arrive à 20 cm le relais doit se déclenché le code fonctionne mais pas tout le temps

sur domoticz le relais change bien etat la distance est bonne mais physiquement le relais change pas toujours état

Code : Tout sélectionner
// Enable debug prints to serial monitor
#define MY_DEBUG
// Enable and select radio type attached
#define MY_RADIO_RF24
// Enabled repeater feature for this node
#define MY_REPEATER_FEATURE
#include <MySensors.h>
///////////////////////////////////////////////////////////////////////
//RELAIS
///////////////////////////////////////////////////////////////////////
#include <NewPing.h>
#include <Bounce2.h>
#define RELAY_PIN 4 // Arduino Digital I/O pin number for relay
#define BUTTON_PIN 3 // Arduino Digital I/O pin number for button
#define CHILD_ID 1 // Id of the sensor child
#define RELAY_ON 1
#define RELAY_OFF 0
Bounce debouncer = Bounce();
int oldValue=0;
bool state;
MyMessage msg1(CHILD_ID,V_LIGHT);
///////////////////////////////////////////////////////////////////////
//DISTANCE
///////////////////////////////////////////////////////////////////////
#include <NewPing.h>
#define CHILD_ID 1
#define TRIGGER_PIN 6 // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN 5 // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 300 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.
unsigned long SLEEP_TIME = 5000; // Sleep time between reads (in milliseconds)
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.
MyMessage msg2(CHILD_ID, V_DISTANCE);
int lastDist;
bool metric = true;
void setup()
{
///////////////////////////////////////////////////////////////////////
//RELAIS
///////////////////////////////////////////////////////////////////////
// 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);
// Make sure relays are off when starting up
digitalWrite(RELAY_PIN, RELAY_OFF);
// Then set relay pins in output mode
pinMode(RELAY_PIN, OUTPUT);
// Set relay to last known state (using eeprom storage)
state = loadState(CHILD_ID);
digitalWrite(RELAY_PIN, state?RELAY_ON:RELAY_OFF);
///////////////////////////////////////////////////////////////////////
//DISTANCE
///////////////////////////////////////////////////////////////////////
{
metric = getControllerConfig().isMetric;
}
}
void presentation() {
// Send the sketch version information to the gateway and Controller
sendSketchInfo("Relay & Button & Distance Sensor", "1.0");
// Register all sensors to gw (they will be created as child devices)
present(CHILD_ID, S_LIGHT);
present(CHILD_ID, S_DISTANCE);
}
void loop()
{
int dist = metric?sonar.ping_cm():sonar.ping_in();
Serial.print("Ping: ");
Serial.print(dist); // Convert ping time to distance in cm and print result (0 = outside set distance range)
Serial.println(metric?" cm":" in");
if (dist != lastDist) {
send(msg2.set(dist));
lastDist = dist;
}
sleep(SLEEP_TIME);
{
int dist = metric?sonar.ping_cm():sonar.ping_in();
Serial.print("Ping: ");
Serial.print(dist); // Convert ping time to distance in cm and print result (0 = outside set distance range)
Serial.println(metric?" cm":" in");
if (dist != lastDist) {
send(msg1.set(dist));
lastDist = dist;
}
sleep(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_LIGHT) {
// Change relay state
digitalWrite(message.sensor-1+RELAY_PIN, 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());
}
}