#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
#define interruptAntenna 1 // pin 3
#define pinAlimentazione 4 //powerpin
#define pinScambioMarcia 5 //pin to change way of motor
#define pinFotocellule 6 // sensors pin when someone pass in front of gate
#define pinPulsante 7
int keycode = 5393;
boolean ultimaMarcia = false; // assumiamo FALSE = chiudi (CLOSE GATE) - TRUE = apri - (OPEN GATE)
boolean muovi = false; // muovi=move
unsigned long T;
int deltaT = 5000; // tempo di marcia del cancello/serranda per apertura/chiusura (da scegliersi in base alle proprie situazioni) - time necessary to open or close gate
void setup()
{
pinMode(pinAlimentazione, OUTPUT);
pinMode(pinScambioMarcia, OUTPUT);
pinMode(pinFotocellule, INPUT);
pinMode(pinPulsante, INPUT);
mySwitch.enableReceive(interruptAntenna);
}
void loop()
{
// se stiamo eseguendo la marcia "chiudi"
// e viene rilevato un ostacolo dalle fotocellule fermo tutto
// if some person cross the sensors stop everything
if ( digitalRead(pinAlimentazione) == HIGH && ultimaMarcia && digitalRead(pinFotocellule) == LOW ) muovi = false;
// se ho ricevuto un segnale dal telecomando o dal pulsante
//if i receive a signal from remote control , in our case from EasyIOT ESP8266 Node :)
if ( segnale() || digitalRead(pinPulsante) == HIGH )
{
// e il cancello/serranda è in movimento fermo tutto
//if gate is moving stop everything
if ( digitalRead(pinAlimentazione) == HIGH )
{
digitalWrite(pinAlimentazione, LOW);
muovi = false;
ultimaMarcia = ! ultimaMarcia;
}
// altrimenti setto il verso di marcia opposto al precedente.
// or i set inverse direction of gate
else
{
if ( ultimaMarcia ) digitalWrite(pinScambioMarcia, LOW); // chiudi
else digitalWrite(pinScambioMarcia, HIGH); // apri
muovi = true;
T = millis();
}
}
// faccio partire la marcia finché non scade il tempo di marcia prestabilito
// oppure qualcuno o qualcosa bloccano la marcia
//let start gate open and stop after time defined....
if ( muovi && (millis() - T) < deltaT ) digitalWrite(pinAlimentazione, HIGH);
else
{
digitalWrite(pinAlimentazione, LOW);
muovi = false;
ultimaMarcia = ! ultimaMarcia;
}
}
// funzione per ricevere il segnale dal telecomando
//function to receive signal from RF - must be replaced with ESP....
boolean segnale()
{
if ( mySwitch.available() )
{
if ( mySwitch.getReceivedValue() == keycode ) return true;
else return false;
mySwitch.resetAvailable();
}
else return false;
}
Please Log in or Create an account to join the conversation.
cdj wrote: Hi, the idea is to make a gate opener with the follow sketch replacing RCSwitch with ESP IOT drivers (and obviously to integrate in EasyIOT)..Do u want to kill me ?
P.S. Sorry for italian, i try to translate comments...
#include <RCSwitch.h> RCSwitch mySwitch = RCSwitch(); #define interruptAntenna 1 // pin 3 #define pinAlimentazione 4 //powerpin #define pinScambioMarcia 5 //pin to change way of motor #define pinFotocellule 6 // sensors pin when someone pass in front of gate #define pinPulsante 7 int keycode = 5393; boolean ultimaMarcia = false; // assumiamo FALSE = chiudi (CLOSE GATE) - TRUE = apri - (OPEN GATE) boolean muovi = false; // muovi=move unsigned long T; int deltaT = 5000; // tempo di marcia del cancello/serranda per apertura/chiusura (da scegliersi in base alle proprie situazioni) - time necessary to open or close gate void setup() { pinMode(pinAlimentazione, OUTPUT); pinMode(pinScambioMarcia, OUTPUT); pinMode(pinFotocellule, INPUT); pinMode(pinPulsante, INPUT); mySwitch.enableReceive(interruptAntenna); } void loop() { // se stiamo eseguendo la marcia "chiudi" // e viene rilevato un ostacolo dalle fotocellule fermo tutto // if some person cross the sensors stop everything if ( digitalRead(pinAlimentazione) == HIGH && ultimaMarcia && digitalRead(pinFotocellule) == LOW ) muovi = false; // se ho ricevuto un segnale dal telecomando o dal pulsante //if i receive a signal from remote control , in our case from EasyIOT ESP8266 Node :) if ( segnale() || digitalRead(pinPulsante) == HIGH ) { // e il cancello/serranda è in movimento fermo tutto //if gate is moving stop everything if ( digitalRead(pinAlimentazione) == HIGH ) { digitalWrite(pinAlimentazione, LOW); muovi = false; ultimaMarcia = ! ultimaMarcia; } // altrimenti setto il verso di marcia opposto al precedente. // or i set inverse direction of gate else { if ( ultimaMarcia ) digitalWrite(pinScambioMarcia, LOW); // chiudi else digitalWrite(pinScambioMarcia, HIGH); // apri muovi = true; T = millis(); } } // faccio partire la marcia finché non scade il tempo di marcia prestabilito // oppure qualcuno o qualcosa bloccano la marcia //let start gate open and stop after time defined.... if ( muovi && (millis() - T) < deltaT ) digitalWrite(pinAlimentazione, HIGH); else { digitalWrite(pinAlimentazione, LOW); muovi = false; ultimaMarcia = ! ultimaMarcia; } } // funzione per ricevere il segnale dal telecomando //function to receive signal from RF - must be replaced with ESP.... boolean segnale() { if ( mySwitch.available() ) { if ( mySwitch.getReceivedValue() == keycode ) return true; else return false; mySwitch.resetAvailable(); } else return false; }
What do you think about ???
Please Log in or Create an account to join the conversation.
Please Log in or Create an account to join the conversation.
cdj wrote: Well, i try to adapt it by myself , and then i decide for consulting service ! thanks !
Dario
Please Log in or Create an account to join the conversation.
Please Log in or Create an account to join the conversation.
#include <Esp8266EasyIoT.h>
#include <SoftwareSerial.h>
Esp8266EasyIoT esp;
SoftwareSerial serialEsp(2,3);
#define pinAlimentazione 6
#define pinScambioMarcia 9
#define pinFotocellule 10
#define pinPulsante 11
#define CANCELLOAPERTO HIGH // GPIO value to write to turn on attached relay
#define CANCELLOCHIUSO LOW // GPIO value to write to turn off attached relay
boolean ultimaMarcia = false; // assumiamo FALSE = chiudi - TRUE = apri
boolean muovi = false;
unsigned long T;
int deltaT = 5000; // tempo di marcia del cancello/serranda per apertura/chiusura (da scegliersi in base alle proprie situazioni)
void setup()
{
serialEsp.begin(9600);
Serial.begin(115200);
Serial.println("EasyIoTEsp init");
esp.begin(incomingMessage, 3, &serialEsp, &Serial);
pinMode(pinAlimentazione, OUTPUT);
// esp.present(6, S_DIGITAL_OUTPUT);
pinMode(pinScambioMarcia, OUTPUT);
// esp.present(9, S_DIGITAL_OUTPUT);
pinMode(pinFotocellule, INPUT);
// esp.present(10, S_DIGITAL_INPUT);
pinMode(pinPulsante, INPUT);
esp.present(11, S_DIGITAL_INPUT);
}
void loop()
{
esp.process();
// se stiamo eseguendo la marcia "chiudi"
// e viene rilevato un ostacolo dalle fotocellule fermo tutto
if ( digitalRead(pinAlimentazione) == HIGH && ultimaMarcia && digitalRead(pinFotocellule) == LOW ) muovi = false;
// se ho ricevuto un segnale dal telecomando o dal pulsante
//if ( segnale() || digitalRead(pinPulsante) == HIGH )
if ( digitalRead(pinPulsante) == HIGH )
{
// e il cancello/serranda è in movimento fermo tutto
if ( digitalRead(pinAlimentazione) == HIGH )
{
digitalWrite(pinAlimentazione, LOW);
muovi = false;
ultimaMarcia = ! ultimaMarcia;
}
// altrimenti setto il verso di marcia opposto al precedente.
else
{
if ( ultimaMarcia ) digitalWrite(pinScambioMarcia, LOW); // chiudi
else digitalWrite(pinScambioMarcia, HIGH); // apri
muovi = true;
T = millis();
}
}
// faccio partire la marcia finché non scade il tempo di marcia prestabilito
// oppure qualcuno o qualcosa bloccano la marcia
if ( muovi && (millis() - T) < deltaT ) digitalWrite(pinAlimentazione, HIGH);
else
{
digitalWrite(pinAlimentazione, LOW);
muovi = false;
ultimaMarcia = ! ultimaMarcia;
}
}
void incomingMessage(const Esp8266EasyIoTMsg &message) {
// We only expect one type of message from controller. But we better check anyway.
Serial.println("New message");
if (message.type==V_DIGITAL_VALUE) {
// Change pinPulsante state to on and to off again immediately to simulate pression of button ?
digitalWrite(message.sensor-1+pinPulsante, message.getBool()?CANCELLOAPERTO:CANCELLOCHIUSO);
digitalWrite(message.sensor-1+pinPulsante, message.getBool()?CANCELLOAPERTO:CANCELLOCHIUSO);
Serial.print("Incoming change for sensor:");
Serial.print(message.sensor);
Serial.print(", New status: ");
Serial.println(message.getBool());
}
}
Please Log in or Create an account to join the conversation.