Buenas noches por aca...
He podido ir probando algunas cosas, de un codigo extenso para encender y apagar un led cada segundo en un minuto (240 lineas de codigo) gracias a la informacion encontrada, y al bucle FOR, pude reducirla a solo 10... que tal ahorro en tipeo...
he conseguido entender el MILLIS, pero a duras penas., queria lograr que un led encienda dos veces en un segundo para indicar un estado del sistema, pero con lo que logre creo que basta, las lineas que estan comentadas es para que me permita probar con solo un sensor, lo demas ya esta hecho. veremos que pasa, por el momento seguire experimentando...
la secuencia void buzzer al final, esta hecha con delays para las pausas entre tonos, no he encontrado la manera de hacerlo con millis ya que todos los ejemplos solo tratan de un led 1-0xseg y no en 1-0-1-0xseg a ver si me tiran un ancla por alli para que el buzzer suene como lo programé necesito muchas mas lineas que implementar, ahh, ademas no consigo activar la sirena en el pin A0,(si me tiran el ancla, por este tendrian que tirarme la cadena tambien)
Saludos...
#include <SoftwareSerial.h> //Incluimos la libreria SoftwareSerial
SoftwareSerial SIM800L(2, 3); //Declaramos los pines RX(2) y TX(3) que vamos a usar
const int Puls = 9; // Boton de panico(0) Barra y cocina.
const int Pir1 = 10; // Detector de movimiento (1) Entrada Principal.
const int Pir2 = 11; // Detector de movimiento (2) Cocina.
const int Pir3 = 12; // Detector de movimiento (3) 2do piso.
const int Estado = 13; // Led de estado del sistema: Apagado=No activo, Parpadeando=Activo
const int Siren = A0; // Activa la sirena
const int pinBuz = A1; // Salida del BUZZER
int enviar =0;
String Mensaje;
boolean flag = true;
long previousMillis = 0;
long On = 100;
long Off = 900;
boolean SMSPuls_1 = true;
boolean SMSPuls_0 = true;
boolean SMSPir1_1 = true;
boolean SMSPir1_0 = true;
boolean SMSPir2_1 = true;
boolean SMSPir2_0 = true;
boolean SMSPir3_1 = true;
boolean SMSPir3_0 = true;
void setup()
{
Serial.begin(115200); // Velocidad de comunicacion con el Monitor Serie
SIM800L.begin(115200); // Velocidad de comunicacion con el modulo SIM800L
delay(600);
pinMode(Puls,INPUT); // En LOW por resistencia PULLDOWN, cambia a HIGH al presionar
// pinMode(Pir1,INPUT); // En LOW por el PIR, cambia a HIGH al detectar movimiento
// pinMode(Pir2,INPUT); // En LOW por el PIR, cambia a HIGH al detectar movimiento
// pinMode(Pir3,INPUT); // En LOW por el PIR, cambia a HIGH al detectar movimiento
pinMode(A5, OUTPUT); // Salida Led, indica que se presionó el boton de panico
//pinMode(A4, OUTPUT); // Salida Led, indica que se activó el Pir1
// pinMode(A3, OUTPUT); // Salida Led, indica que se activó el Pir2
// pinMode(A2, OUTPUT); // Salida Led, indica que se activó el Pir3
// pinMode(A1, OUTPUT); // Salida Piezoelectrico(buzer)
// pinMode(A0, OUTPUT); // Salida Sirena
pinMode(Estado, OUTPUT); // Led de estado del sistema: Apagado=No activo, Parpadeando=Activo
pinMode(4, OUTPUT); // Led de general de activacion del sistema: Apagado=sin eventos, Encendido=Alarma de evento
SIM800L.println("AT+CMGF=1"); // Configurar el módulo en modo de texto
delay(200); // Tiempo de espera para que el modulo se conecte a una red
SIM800L.println("AT+CNMI=2,2,0,0,0"); // Configuracion de la forma como recibie los mensajes
Mensaje.reserve(100);
delay(200);
SIM800L.println("AT+CMGD=1,4"); //Borra todos los SMS enviados y recibidos
for (int i=0; i <= 90; i++)
{
delay(500);
digitalWrite(13, HIGH);
delay(300);
digitalWrite(13, LOW);
tone(A1,700);
delay(200);
noTone(A1);
}
}
void loop()
{
if (millis() < (previousMillis + On + Off))
{
flag = true;
}
else
{
flag = false;
previousMillis = millis();
}
if (flag == true)
{
if (millis() > (previousMillis + On))
{
digitalWrite(Estado, LOW);
}
else
{
digitalWrite(Estado, HIGH);
}
}
// Para activar el dispositivo por SMS
if(Mensaje.indexOf ("ENCENDER") >= 0 || Mensaje.indexOf ("Encender") >= 0)
{
digitalWrite(Siren,HIGH); //Activa dispositivo
Mensaje = "";
}
//si el SMS contiene "APAGAR" o "Apagar"
if(Mensaje.indexOf ("APAGAR") >= 0 || Mensaje.indexOf ("Apagar") >= 0)
{
digitalWrite(Siren,LOW);//Desactiva el dispositivo
Mensaje = "";
}
// Cuando se activan los sensores
if((digitalRead(Puls) == HIGH) && (digitalRead(A5)==LOW))
{
digitalWrite(A5,HIGH);
digitalWrite(4,HIGH);
SMSPuls(); //Se envía la notificacion del evento
SMSPuls_0 = true;
}
if((digitalRead(4) == HIGH))
{ Buzzer();}
}
//Lo que se escriba en el monitor serie, se trasladará al modulo SIM800L
void serialEvent(){
if(Serial.available())
{
String text=Serial.readString();
SIM800L.println(text);
}
}
//Rutina de servicio a la interrupcion para el monitor serie
void serialEvent1(){
if(SIM800L.available() > 0 )
{
Mensaje=SIM800L.readStringUntil("\n");
Serial.println("Nuevo Mensaje:");
Serial.println(Mensaje);
}
}
//Funcion de envio de SMS
void SMSPuls()
{
if(SMSPuls_1 == true)
{
SIM800L.println("AT+CMGF=1");
delay(200);
SIM800L.println("AT+CMGS=\"+51980989627\"");
delay(200);
SIM800L.print("El Boton de Panico Fue Activado");
delay(200);
SIM800L.print((char)26);
delay(200);
SIM800L.println("");
delay(200);
SMSPuls_0 = false;
}}
void Buzzer()
{
tone(pinBuz, 700);
delay(200);
noTone(pinBuz);
delay(50);
tone(pinBuz, 700);
delay(200);
noTone(pinBuz);
delay(50);
tone(pinBuz, 1000);
delay(500);
noTone(pinBuz);
delay(700);
}