-->
Page 1 of 1

Help with having relay on for 10sec then turn off. see code

PostPosted: Sat May 04, 2019 2:25 pm
by Chrisko
I am trying to have a relay when activated to stay on for 10seconds the turn off.
Here is the code i acquired from the net and others helping. However I still cannot get it to work.

Thanks for the help.

Code: Select all#include <WebSockets.h>
#include <WebSocketsClient.h>
#include <WebSocketsServer.h>

#define WIFI_NAME "Network"
#define WIFI_PASSWORD "4197548d"
#define DEVICE_ID 2
#define DEVICE_NAME "Relay"
#define TOKEN "~420713_YAn4BqH3tv"

#include <RemoteMe.h>
#include <RemoteMeSocketConnector.h>
#include <RemoteMeDirectWebSocketConnector.h>
#include <ESP8266WiFi.h>

#define Relay_1 D1
#define Relay_2 D2
#define Relay_3 D3
#define Relay_4 D4

// Declaring variables
unsigned long currentTime;
unsigned long previousTime = 0;

RemoteMe& remoteMe = RemoteMe::getInstance(TOKEN, DEVICE_ID);

//*************** CODE FOR CONFORTABLE VARIABLE SET *********************
inline void setRelay_1(boolean b) {remoteMe.getVariables()->setBoolean("Relay_1", b); }
inline void setRelay_2(boolean b) {remoteMe.getVariables()->setBoolean("Relay_2", b); }
inline void setRelay_3(boolean b) {remoteMe.getVariables()->setBoolean("Relay_3", b); }
inline void setRelay_4(boolean b) {remoteMe.getVariables()->setBoolean("Relay_4", b); }

//*************** IMPLEMENT FUNCTIONS BELOW *********************

// Do same for other functions
void onRelay_1Change(boolean b) {
    Serial.printf("onRelay_1Change: b: %d\n",b);
    currentTime = millis() >= 10000 ;
    if(b){
    if((currentTime - previousTime) >= 15000){
    digitalWrite(Relay_1, LOW);
}
    else{
    digitalWrite(Relay_1, HIGH);
    previousTime = currentTime;
}
    }
    else{
        digitalWrite(Relay_1, LOW);
    }
}

void onRelay_2Change(boolean b) {
    Serial.printf("onRelay_2Change: b: %d\n",b);
    digitalWrite(Relay_2,b ? HIGH : LOW);
    }

void onRelay_3Change(boolean b) {
    Serial.printf("onRelay_3Change: b: %d\n",b);
    digitalWrite(Relay_3,b ? HIGH : LOW);
}

void onRelay_4Change(boolean b) {
    Serial.printf("onRelay_4Change: b: %d\n",b);
    digitalWrite(Relay_4,b ? HIGH : LOW);
}

void setup() {
    Serial.begin(9600);
    WiFi.begin(WIFI_NAME, WIFI_PASSWORD);
    while (WiFi.status() != WL_CONNECTED) {
    delay(100);
}

remoteMe.getVariables()->observeBoolean("Relay_1" ,onRelay_1Change);
remoteMe.getVariables()->observeBoolean("Relay_2" ,onRelay_2Change);
remoteMe.getVariables()->observeBoolean("Relay_3" ,onRelay_3Change);
remoteMe.getVariables()->observeBoolean("Relay_4" ,onRelay_4Change);
remoteMe.setConnector(new RemoteMeSocketConnector());
remoteMe.setDirectConnector(new RemoteMeDirectWebSocketConnector());
remoteMe.sendRegisterDeviceMessage(DEVICE_NAME);

pinMode(Relay_1, OUTPUT);
pinMode(Relay_2, OUTPUT);
pinMode(Relay_3, OUTPUT);
pinMode(Relay_4, OUTPUT);

digitalWrite(Relay_1, LOW);
digitalWrite(Relay_2, LOW);
digitalWrite(Relay_3, LOW);
digitalWrite(Relay_4, LOW);
}

void loop() {
    remoteMe.loop();
}

Re: Help with having relay on for 10sec then turn off. see c

PostPosted: Wed May 08, 2019 8:42 pm
by kashifmirza
hello i read your code
why you are not using timer
if you use timer your time is accurate 10 seconds