Nuevo sensor Buzzer
parent
c07b299e21
commit
78d3cb851a
|
|
@ -6,6 +6,7 @@ DomoEspManager::DomoEspManager()
|
||||||
//vars.AddListenner(&sens);
|
//vars.AddListenner(&sens);
|
||||||
//vars.AddListenner(&des);
|
//vars.AddListenner(&des);
|
||||||
sens.Config(&vars);
|
sens.Config(&vars);
|
||||||
|
sens.buzz=&buzz;
|
||||||
suscrito=false;
|
suscrito=false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -89,6 +89,9 @@ class DomoEspManager: public MqttReceiver
|
||||||
MqttManager mqtt;
|
MqttManager mqtt;
|
||||||
|
|
||||||
MqttDesencadenadorManager des;
|
MqttDesencadenadorManager des;
|
||||||
|
|
||||||
|
SonidoBuzzer buzz;
|
||||||
|
|
||||||
LcdMQTTViewer lcdm;
|
LcdMQTTViewer lcdm;
|
||||||
bool suscrito;
|
bool suscrito;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -124,6 +124,23 @@ void MqttSensManager::AddDout(int pin, char* topic, bool defautlValor)
|
||||||
pinMode(s.pin, OUTPUT);
|
pinMode(s.pin, OUTPUT);
|
||||||
digitalWrite(s.pin, defautlValor);
|
digitalWrite(s.pin, defautlValor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MqttSensManager::AddBuzz(int pin, char* topic)
|
||||||
|
{
|
||||||
|
MqttSensor s;
|
||||||
|
s.tipo=(int)MqttSensor::SENS_BUZZ_OUT;
|
||||||
|
s.pin=pin;
|
||||||
|
s.ivar=vars->AddVar((byte)(MqttVar::IN_VAR|MqttVar::OUT_VAR|MqttVar::ACCION_VAR),topic);
|
||||||
|
sens.Add(&s);
|
||||||
|
pinMode(s.pin, OUTPUT);
|
||||||
|
}
|
||||||
|
void MqttSensManager::AddMelodia(char* m)
|
||||||
|
{
|
||||||
|
if(buzz)
|
||||||
|
{
|
||||||
|
buzz->Add(m);
|
||||||
|
}
|
||||||
|
}
|
||||||
void MqttSensManager::AddDin(int pin, char* topic)
|
void MqttSensManager::AddDin(int pin, char* topic)
|
||||||
{
|
{
|
||||||
MqttSensor s;
|
MqttSensor s;
|
||||||
|
|
@ -296,6 +313,20 @@ void MqttSensManager::OnVarChange(int ivar)
|
||||||
digitalWrite( s->pin, v->val.i);
|
digitalWrite( s->pin, v->val.i);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case((int)MqttSensor::SENS_BUZZ_OUT):
|
||||||
|
{
|
||||||
|
#ifdef DEBUG_PS
|
||||||
|
Serial.println("Sens::OnVarChangeSensor buz cambiado");
|
||||||
|
#endif
|
||||||
|
if(v->val.i>0 && buzz)
|
||||||
|
{
|
||||||
|
buzz->Toca( s->pin, v->val.i-1);
|
||||||
|
v->val.i=0;
|
||||||
|
vars->OnChange(ivar, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@
|
||||||
*/
|
*/
|
||||||
#include "MqttDefines.h"
|
#include "MqttDefines.h"
|
||||||
#include <PubSubClient.h>
|
#include <PubSubClient.h>
|
||||||
|
class SonidoBuzzer;
|
||||||
//class PubSubClient;
|
//class PubSubClient;
|
||||||
class MqttVarManager;
|
class MqttVarManager;
|
||||||
#include <SimpleDHT.h>
|
#include <SimpleDHT.h>
|
||||||
|
|
@ -63,7 +63,8 @@ class MqttSensor
|
||||||
SENS_ANALOG_IN,//sensor analogico in
|
SENS_ANALOG_IN,//sensor analogico in
|
||||||
SENS_DIGI_IN,//sensor digital in (algo con 2 estados)
|
SENS_DIGI_IN,//sensor digital in (algo con 2 estados)
|
||||||
SENS_DIGI_OUT,//sensor digital out
|
SENS_DIGI_OUT,//sensor digital out
|
||||||
SENS_DIGI_IN_PULSANTE//pensado para pulsadores (Publicara un put)
|
SENS_DIGI_IN_PULSANTE,//pensado para pulsadores (Publicara un put)
|
||||||
|
SENS_BUZZ_OUT,//sensor digital out con buzzer conectado
|
||||||
//SENS_DIGI_IN_OUT//sensor doble de entrada y salida (dos pines que tienen que tener el mismo valor)
|
//SENS_DIGI_IN_OUT//sensor doble de entrada y salida (dos pines que tienen que tener el mismo valor)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -131,7 +132,7 @@ class MqttSensManager: public MqttOnVarChangeListenner
|
||||||
|
|
||||||
SimpleDHT22 cdht;//clase para leer de dht
|
SimpleDHT22 cdht;//clase para leer de dht
|
||||||
Adafruit_BMP085 bmp;//clase bmp
|
Adafruit_BMP085 bmp;//clase bmp
|
||||||
|
SonidoBuzzer *buzz;
|
||||||
bool bloqueo_sens;//bloquea todos los sensores (para poder editarlos)
|
bool bloqueo_sens;//bloquea todos los sensores (para poder editarlos)
|
||||||
|
|
||||||
int ind_interrup[MAXINTERRUP];
|
int ind_interrup[MAXINTERRUP];
|
||||||
|
|
@ -166,7 +167,8 @@ class MqttSensManager: public MqttOnVarChangeListenner
|
||||||
//salida digital
|
//salida digital
|
||||||
void AddDout(int pin, char* topic, bool defautlValor);//variable que solo publica en el cambio (pulsadores, ...)
|
void AddDout(int pin, char* topic, bool defautlValor);//variable que solo publica en el cambio (pulsadores, ...)
|
||||||
void AddAnalogIn(int pin, char* topic, bool ValNegado);//nivel de luz, nivel de lluvia ...
|
void AddAnalogIn(int pin, char* topic, bool ValNegado);//nivel de luz, nivel de lluvia ...
|
||||||
|
void AddBuzz(int pin, char* topic);
|
||||||
|
void AddMelodia(char* m);
|
||||||
//funciones auxiliares------------
|
//funciones auxiliares------------
|
||||||
|
|
||||||
MqttSensor* Get(int i);
|
MqttSensor* Get(int i);
|
||||||
|
|
|
||||||
|
|
@ -179,3 +179,91 @@ void Ceprom_manager::cursor(int pos)
|
||||||
{
|
{
|
||||||
nb=pos;
|
nb=pos;
|
||||||
}
|
}
|
||||||
|
//**************************************************************************************************************************************************
|
||||||
|
MelodiaBuzzer::MelodiaBuzzer()
|
||||||
|
{
|
||||||
|
melodia[0]=0;
|
||||||
|
}
|
||||||
|
int MelodiaBuzzer::st2nota(char st)
|
||||||
|
{
|
||||||
|
switch(st)
|
||||||
|
{
|
||||||
|
case 'd':
|
||||||
|
return 262;
|
||||||
|
case 'r':
|
||||||
|
return 294;
|
||||||
|
case 'm':
|
||||||
|
return 330;
|
||||||
|
case 'f':
|
||||||
|
return 349;
|
||||||
|
case 's':
|
||||||
|
return 392;
|
||||||
|
case 'l':
|
||||||
|
return 440;
|
||||||
|
case 'i':
|
||||||
|
return 494;
|
||||||
|
case 'D':
|
||||||
|
return 277;
|
||||||
|
case 'R':
|
||||||
|
return 311;
|
||||||
|
case 'M':
|
||||||
|
return 345;
|
||||||
|
case 'F':
|
||||||
|
return 350;
|
||||||
|
case 'S':
|
||||||
|
return 415;
|
||||||
|
case 'L':
|
||||||
|
return 466;
|
||||||
|
case 'I':
|
||||||
|
return 554,36;
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int MelodiaBuzzer::str2t(char* st, int *t)
|
||||||
|
{
|
||||||
|
char buf[8];
|
||||||
|
int n=0;
|
||||||
|
int i;
|
||||||
|
while(st[i]<='9' && st[i]>='0')
|
||||||
|
{
|
||||||
|
buf[n++]=st[i++];
|
||||||
|
}
|
||||||
|
buf[n]=0;
|
||||||
|
(*t)=atoi(buf);
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
void MelodiaBuzzer::Toca(int pin)
|
||||||
|
{
|
||||||
|
int i=0;
|
||||||
|
int h=0, t=0;
|
||||||
|
|
||||||
|
while (melodia[i])
|
||||||
|
{
|
||||||
|
h=st2nota(melodia[i]);
|
||||||
|
i++;
|
||||||
|
t=0;
|
||||||
|
i+=str2t(&melodia[i], &t);
|
||||||
|
if(h>0)
|
||||||
|
tone(pin, h);
|
||||||
|
else
|
||||||
|
noTone(pin);
|
||||||
|
delay(t);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//*************************************************
|
||||||
|
SonidoBuzzer::SonidoBuzzer()
|
||||||
|
{
|
||||||
|
n=0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SonidoBuzzer::Toca(int pin, int imel)
|
||||||
|
{
|
||||||
|
mel[imel].Toca(pin);
|
||||||
|
}
|
||||||
|
|
||||||
|
int SonidoBuzzer::Add(char* melo)
|
||||||
|
{
|
||||||
|
strcpy(mel[n].melodia, melo);
|
||||||
|
return n++;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -130,4 +130,25 @@ class Ceprom_manager
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class MelodiaBuzzer
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
//melodia se compone de notas (primera letra y tiempo de duracion) silecio es #
|
||||||
|
char melodia[64];
|
||||||
|
MelodiaBuzzer();
|
||||||
|
int st2nota(char st);
|
||||||
|
int str2t(char* st, int *t);
|
||||||
|
|
||||||
|
void Toca(int pin);
|
||||||
|
};
|
||||||
|
|
||||||
|
class SonidoBuzzer
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
MelodiaBuzzer mel[4];
|
||||||
|
int n;
|
||||||
|
SonidoBuzzer();
|
||||||
|
void Toca(int pin, int melodia);
|
||||||
|
int Add(char* melodia);
|
||||||
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,104 @@
|
||||||
#define DEBUG_PS 1//Descomentar para debug
|
#define DEBUG_PS 1//Descomentar para debug
|
||||||
#define CON_LCD 1
|
#define CON_LCD 1
|
||||||
//va por 16
|
//va por 16
|
||||||
|
class ActDomoConfig: public DomoConfig
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ActDomoConfig()
|
||||||
|
{
|
||||||
|
velocidadPortSerie=115200;
|
||||||
|
strcpy(ssidWifi,"Idhun");//nombre wifi
|
||||||
|
strcpy(keyWifi,"Ardileorca1234.");//key wifi
|
||||||
|
|
||||||
|
strcpy(ideEsp,"Esp8266_016");//idenitificador del esp (sera único)
|
||||||
|
strcpy(hostMQTT,"192.168.2.50");//servidor mqttBroker
|
||||||
|
portMQTT=1883;//puerto del servidor mqtt Broker
|
||||||
|
|
||||||
|
refresTimeVars=30;//tiempo de refresco en segundos de las variables
|
||||||
|
refresTimeSens=15;//tiempo de refresco en segundos de los sensores
|
||||||
|
|
||||||
|
//config lcd--------------------
|
||||||
|
lcd.colum=16;//columnas lcd
|
||||||
|
lcd.lines=2;//lineas
|
||||||
|
//pines lcd
|
||||||
|
lcd.rs=D5;
|
||||||
|
lcd.en=D6;//eneable
|
||||||
|
lcd.d0=D3;
|
||||||
|
lcd.d1=D2;
|
||||||
|
lcd.d2=D1;
|
||||||
|
lcd.d3=D0;
|
||||||
|
|
||||||
|
}
|
||||||
|
//configuracion de sensores, variables, lcd---------------------------------
|
||||||
|
virtual void ConfigGen(MqttSensManager* sens, MqttVarManager* vars, LcdMQTTViewer *lcd, MqttDesencadenadorManager *des)
|
||||||
|
{
|
||||||
|
//sensores--------------------------------------------------------
|
||||||
|
/*
|
||||||
|
sens->AddHDT22(int pin, char* topic);
|
||||||
|
//tempe y presion varometrica
|
||||||
|
sens->AddBMP180(int sda,int scl, char* topic);
|
||||||
|
//entradas digitales
|
||||||
|
sens->AddDin(int pin, char* topic);//añade variable digital que se actualiza de manera instantanea (interruptores sensor presencia ..)
|
||||||
|
sens->AddDinAccion(int pin, char* topic);//añade variable que solo publica en el cambio (pulsadores, ...)
|
||||||
|
//salida digital
|
||||||
|
sens->AddDout(int pin, char* topic, bool defautlValor);//variable que solo publica en el cambio (pulsadores, ...)
|
||||||
|
Sensor analogico
|
||||||
|
sens->AddAnalogIn(int pin, char* topic, bool ValNegado);//nivel de luz, nivel de lluvia ...
|
||||||
|
|
||||||
|
sens->AddBuzz(int pin, char* topic);
|
||||||
|
*/
|
||||||
|
//sens->AddHDT22(D4, "casa/desp");
|
||||||
|
sens->AddBuzz(D0, "casa/p/buz");
|
||||||
|
|
||||||
|
sens->AddMelodia("m200#100d200#0");
|
||||||
|
//variables----------------------------------------------------
|
||||||
|
/*
|
||||||
|
int ivar= vars->AddVar(byte flags, char*topic);//variable con flags a elegir
|
||||||
|
int ivar= vars->AddInternalVarFloat( char*topic);//variable privada
|
||||||
|
int ivar= vars->AddInternalVarInt( char*topic);//variable privada
|
||||||
|
* /
|
||||||
|
int lamb= vars->AddInternalVarInt( "casa/Salon/LAmb");
|
||||||
|
int lchim= vars->AddInternalVarInt( "casa/Salon/LChime");
|
||||||
|
int lent= vars->AddInternalVarInt( "casa/Salon/LEnt");
|
||||||
|
|
||||||
|
int pul1= vars->AddInternalVarInt( "casa/Salon/pul1");
|
||||||
|
int pul2= vars->AddInternalVarInt( "casa/Salon/pul2");
|
||||||
|
int pul3= vars->AddInternalVarInt( "casa/Salon/pul3");
|
||||||
|
int pulIall= vars->AddInternalVarInt( "casa/Salon/intAll");
|
||||||
|
int pulAll= vars->AddInternalVarInt( "casa/Salon/pulAll");
|
||||||
|
//lcd---------------------------------------------------------
|
||||||
|
|
||||||
|
//lcd->add(0,"T des: %s",0,0);
|
||||||
|
//lcd->add(1,"H des: %s",1,0);
|
||||||
|
//lcd->add(temCoci,"T coci: %s",0,1);
|
||||||
|
//lcd->add(temDesp,"H coci: %s",1,1);
|
||||||
|
|
||||||
|
/*
|
||||||
|
//sin depender de variable
|
||||||
|
lcd->add(-1,"Hola",0,0);
|
||||||
|
lcd->add(-1,"como va",1,0);
|
||||||
|
|
||||||
|
lcd->add(-1,"Mi ritmo",0,1);
|
||||||
|
lcd->add(-1,"bueno pa goza",1,1);* /
|
||||||
|
//desencadenaores----------
|
||||||
|
char st[64];
|
||||||
|
//Efecto Interruptor-----
|
||||||
|
sprintf(st,"{%d}>0 -> {%d}=1 & {%d}=1 & {%d}=1 ",pulIall,lamb,lchim, lent);//terminar en espacios
|
||||||
|
des->AddDes(st);
|
||||||
|
sprintf(st,"{%d}<1 -> {%d}=0 & {%d}=0 & {%d}=0 ",pulIall,lamb,lchim, lent);//terminar en espacios
|
||||||
|
des->AddDes(st);
|
||||||
|
//Efecto Pulsadores
|
||||||
|
sprintf(st,"{%d}>0 -> !{%d} ",pulAll,pulIall);//terminar en espacios
|
||||||
|
des->AddDes(st);
|
||||||
|
sprintf(st,"{%d}>0 -> !{%d} ",pul1,lamb);//terminar en espacios
|
||||||
|
des->AddDes(st);
|
||||||
|
sprintf(st,"{%d}>0 -> !{%d} ",pul2,lchim);//terminar en espacios
|
||||||
|
des->AddDes(st);
|
||||||
|
sprintf(st,"{%d}>0 -> !{%d} ",pul3,lent);//terminar en espacios
|
||||||
|
des->AddDes(st);
|
||||||
|
/* */
|
||||||
|
}
|
||||||
|
};
|
||||||
class AutomatismosDomoConfig: public DomoConfig
|
class AutomatismosDomoConfig: public DomoConfig
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
@ -307,4 +405,4 @@ class ExteriorDomoConfig: public DomoConfig
|
||||||
|
|
||||||
|
|
||||||
//configuracion que se usara--------------------------
|
//configuracion que se usara--------------------------
|
||||||
DespachoDomoConfig ConfiguracionActual;
|
ActDomoConfig ConfiguracionActual;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue