Nuevo sensor Buzzer
parent
c07b299e21
commit
78d3cb851a
|
|
@ -6,6 +6,7 @@ DomoEspManager::DomoEspManager()
|
|||
//vars.AddListenner(&sens);
|
||||
//vars.AddListenner(&des);
|
||||
sens.Config(&vars);
|
||||
sens.buzz=&buzz;
|
||||
suscrito=false;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -89,6 +89,9 @@ class DomoEspManager: public MqttReceiver
|
|||
MqttManager mqtt;
|
||||
|
||||
MqttDesencadenadorManager des;
|
||||
|
||||
SonidoBuzzer buzz;
|
||||
|
||||
LcdMQTTViewer lcdm;
|
||||
bool suscrito;
|
||||
|
||||
|
|
|
|||
|
|
@ -124,6 +124,23 @@ void MqttSensManager::AddDout(int pin, char* topic, bool defautlValor)
|
|||
pinMode(s.pin, OUTPUT);
|
||||
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)
|
||||
{
|
||||
MqttSensor s;
|
||||
|
|
@ -296,6 +313,20 @@ void MqttSensManager::OnVarChange(int ivar)
|
|||
digitalWrite( s->pin, v->val.i);
|
||||
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:
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@
|
|||
*/
|
||||
#include "MqttDefines.h"
|
||||
#include <PubSubClient.h>
|
||||
|
||||
class SonidoBuzzer;
|
||||
//class PubSubClient;
|
||||
class MqttVarManager;
|
||||
#include <SimpleDHT.h>
|
||||
|
|
@ -63,7 +63,8 @@ class MqttSensor
|
|||
SENS_ANALOG_IN,//sensor analogico in
|
||||
SENS_DIGI_IN,//sensor digital in (algo con 2 estados)
|
||||
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)
|
||||
};
|
||||
|
||||
|
|
@ -131,7 +132,7 @@ class MqttSensManager: public MqttOnVarChangeListenner
|
|||
|
||||
SimpleDHT22 cdht;//clase para leer de dht
|
||||
Adafruit_BMP085 bmp;//clase bmp
|
||||
|
||||
SonidoBuzzer *buzz;
|
||||
bool bloqueo_sens;//bloquea todos los sensores (para poder editarlos)
|
||||
|
||||
int ind_interrup[MAXINTERRUP];
|
||||
|
|
@ -166,7 +167,8 @@ class MqttSensManager: public MqttOnVarChangeListenner
|
|||
//salida digital
|
||||
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 AddBuzz(int pin, char* topic);
|
||||
void AddMelodia(char* m);
|
||||
//funciones auxiliares------------
|
||||
|
||||
MqttSensor* Get(int i);
|
||||
|
|
|
|||
|
|
@ -179,3 +179,91 @@ void Ceprom_manager::cursor(int 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
|
||||
|
|
|
|||
|
|
@ -2,6 +2,104 @@
|
|||
#define DEBUG_PS 1//Descomentar para debug
|
||||
#define CON_LCD 1
|
||||
//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
|
||||
{
|
||||
public:
|
||||
|
|
@ -307,4 +405,4 @@ class ExteriorDomoConfig: public DomoConfig
|
|||
|
||||
|
||||
//configuracion que se usara--------------------------
|
||||
DespachoDomoConfig ConfiguracionActual;
|
||||
ActDomoConfig ConfiguracionActual;
|
||||
|
|
|
|||
Loading…
Reference in New Issue