Controlar buzzer mediante pagina web con enc28j60 ?

Por el momento, he logrado hacer lo que he querido hacer, excepto por una cosa.

El detalle es que cuando uso las funciones de apagar el buzzer, hasta lo intente con un led aparte, no logro apagar ninguno de los dos.

Dejo el codigo a ver si alguno logra visualizar el error en el control del buzzer.

Código:
int alarma = 11;                        // Definir el pin digital del Arduino para la Alarma
int infrarrojo = 12;                    // Definir el pin digital del Arduino para el sensor Infrarrojo
int valor_inf = 0;                      // define una variable para ingresar el estado
int boton1 = 4;                         // Declaracion el pin digital del Arduino del boton1
int valor_boton1 = 0;                   // Define una variable para ingresar el estado del valor del boton1
int boton2 = 2;                         // Declaracion el pin digital del Arduino del boton2
int valor_boton2 = 0;
int sensor_luz;                         // Declaracion del sensor de luz
int led=10;
int sensorflama = 28;                        // Declaracion del Sensor de flama
int valor_flama = 0;
int sensorsonido = 26;                  // Definir el pin digital del Arduino para el sensor de sonido
int valor_sonido = 0;                   // define una variable para ingresar el estado
int sensorvib = 8;                      // Definir el pin digital del Arduino para el sensor de vibracion
int valor_vib = 0;                      // define una variable para ingresar el estado
int sensormag = 6 ;                     // Definir el pin digital del Arduino para el sensor magnetico
int valor_mag ;                         // define una variable para ingresar el estado
int niveldeagua;                        // Declaracion del Sensor de nivel de agua
int bandera1=0;
int bandera2=0;
int bandera3=0;
int bandera4=0;
int bandera5=0;
float sinVal;
int toneVal;
float sinVal1;
int toneVal1;
float sinVal2;
int toneVal2;
float sinVal3;
int toneVal3;
float sinVal4;
int toneVal4;
float sinVal5;
int toneVal5;
int bandera=0;
unsigned long currentTime=0;
unsigned long previousTime=0;
unsigned long currentTime1=0;
unsigned long previousTime1=0;
unsigned long currentTime2=0;
unsigned long previousTime2=0;
unsigned long currentTime3=0;
unsigned long previousTime3=0;
unsigned long currentTime4=0;
unsigned long previousTime4=0;
unsigned long currentTime5=0;
unsigned long previousTime5=0;
char* statusAlarma = "Off";
#include <EtherCard.h>

static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 }; // ethernet mac address - must be unique on your network
static byte myip[] = {192,168,1,200};

byte Ethernet::buffer[5500]; // tcp/ip send and receive buffer

BufferFiller bfill;

static void headPage(){
   bfill.emit_p(PSTR(
    "HTTP/1.0 200 OK\r\n"
    "Content-Type: text/html\r\n"
    "Pragma: no-cache\r\n"
    "\r\n"
    ));
}

static word Login(){
  bfill = ether.tcpOffset();
  headPage();
  bfill.emit_p(PSTR(
  "<html>"
  "<head><title>"
    "Desarrollo de un sistema dom&oacutetico de gesti&oacuten y monitoreo de seguridad basado en la placa Arduino"
  "</title></head>"

  "<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">"
  "<div style= 'margin:50px;'>"
    
  "<body>"
    "<h3 align=\"center\">Desarrollo de un sistema dom&oacutetico de gesti&oacuten y monitoreo de seguridad basado en la placa Arduino.</h3>"
    "<h3 align=\"right\">Integrantes:</h3>"
    "<h3 align=\"right\">Ligielena Malpica.</h3>"
    "<body bgcolor=\"#FFFFF\">"
    "<h3 align=\"center\"> Ingresa su c&oacutedigo de validaci&oacuten, el mismo es sumistrado por su proveedor.</h3><br>"
    "<script >"
    "function usrpas(){"
    "if(document.form1.num.value==\"1234\") {window.location=\"A\"}"
    "else {alert(\"Error\")} }"
    "document.oncontextmenu=new Function(\"return false\");"
    "</script>"
    "<form name=\"form1\" align=\"center\"> <input type=\"text\" name=\"num\"> C&oacutedigo de Validaci&oacuten <br><br> <input type=\"button\" value=\"Ir\" onclick=\"usrpas()\"> </form>"
    
  "</body>"
"</html>"));
  return bfill.position();
}

static word Sensores(){
  bfill = ether.tcpOffset();
  headPage();
  bfill.emit_p(PSTR(
    "<html>"
    "<head> <title>"
    "Desarrollo de un sistema dom&oacutetico de gesti&oacuten y monitoreo de seguridad basado en la placa Arduino"
    "</title></head>"

    "<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">"
    "<meta http-equiv=\"refresh\" content=\"5\" >"

    "<style>"
    "#table, th, td{ border: 1px solid black; border-collapse: collapse;  border-color: #000080; font-size:120%; }"
    "#Alarma { text-align:center;  } "
    "#Modo_Noche { text-align:center; } "
    "#Cerrar_Sesion { text-align:center; }"
    "</style>"
    
    "<div style= 'margin:50px;'>"
    "<body>"
    "<body bgcolor=\"#FFFFF\">"
    "<h2 align=\"center\" > Estado de los sensores: </h2>"
    
    "<table style=\"margin: 0 auto;\">"
      "<tr>"
        "<th scope=\"col\">Nombre del sensor</th>"
        "<th scope=\"col\">Estado</th>"
        "</tr>"

        "<tr>"
        "<td>Infrarrojo</td>"
        "<td align=\"center\" >$S</td>"
        "</tr>"

        "<tr>"
        "<td>Sonido</td>"
        "<td align=\"center\" >$S</td>"
        "</tr>"

        "<tr>"
        "<td>Fuego</td>"
        "<td align=\"center\" >$S</td>"
        "</tr>"

        "<tr>"
        "<td>Contactores</td>"
        "<td align=\"center\" >$S</td>"
        "</tr>"

        "<tr>"
        "<td>Vibraci&oacuten</td>"
        "<td align=\"center\" >$S</td>"
        "</tr>"

        "<tr>"
        "<td>Nivel de agua</td>"
        "<td align=\"center\" >$D</td>"
        "</tr>"

        "</table> <br>"

       "<div id=\"Modo_Noche\">"
       "<input type=\"button\" value=\"Activar Modo Noche\" onclick=\"usrpas()\" >"
       "</div>"
      
       "<div id=\"Alarma\"> <br>"
       "Estado Alarma = $S <br>"
       "<a href='./Adata1=0'><input type='button' value='Apagar Alarma'></a>"
       "</div>"

       "<div id=\"Cerrar_Sesion\"> <br>"
       "<form action=/ method=get>"
       "<input type=submit value=Cerrar usuario>"
       "</form>"
       "</div> <br>"
      
    "</body>"
    "</html>"),
    digitalRead(12) ? "Off" : "On",
    digitalRead(26) ? "Off" : "On",
    digitalRead(28) ? "On" : "Off", 
    digitalRead(6) ? "On" : "Off",
    digitalRead(8) ? "Off" : "On",
    analogRead(2),
    statusAlarma
    );
  return bfill.position();
}


void setup() {

   Serial.begin(57600);
   pinMode(alarma, OUTPUT);
   pinMode(led, OUTPUT);
   pinMode(infrarrojo, INPUT);
   pinMode(sensorvib,INPUT);
   pinMode(sensorsonido,INPUT);
   pinMode(sensormag, INPUT);
   pinMode(sensorflama, INPUT);
   pinMode(boton1, INPUT);
   pinMode(boton2, INPUT);
   digitalWrite(led, LOW);
   //attachInterrupt(digitalPinToInterrupt(18),Lectura_paginaweb, CHANGE);

    
  if (ether.begin(sizeof Ethernet::buffer, mymac, 53) == 0)
    Serial.println( "El controlador Ethernet ha fallado en inicializar");
    else
    Serial.println("Ethernet controller ok!");
    ether.staticSetup(myip);
}

void Lectura_paginaweb(){
   word pos = ether.packetLoop(ether.packetReceive());
  if(pos){
    for(int c=pos;Ethernet::buffer[c];c++)
    Serial.print((char)Ethernet::buffer[c]);
    Serial.println("");

    word n;
    switch(Ethernet::buffer[pos+5]){
    case 'A': n=Sensores();break;
    default: n=Login();
     }
 
       ether.httpServerReply(n);
    
     if (strstr((char *)Ethernet::buffer + pos, "GET/Adata1=0") != 0) {
          Serial.println("led Off");
          apagaralarma();
          digitalWrite(led, LOW);
          statusAlarma = "OFF";
        
    }
}
}

void tiposalarma() {
         currentTime=millis();
          if((currentTime-previousTime)>2){
          sinVal = (sin(currentTime*(3.1412/180)));                           // convertir grados a radianes
          toneVal = 2000 + (int(sinVal*1000));                      // convertir frecuencia del valor.
          previousTime=currentTime;
          Lectura_paginaweb();
          tone(alarma, toneVal);
         }
}

void tiposalarma1() {
          currentTime1=millis();
          if((currentTime1-previousTime1)>10){
          sinVal1 = (sin(currentTime1*(3.1412/180)));                           // convertir grados a radianes
          toneVal1 = 2000 + (int(sinVal1*1000));                      // convertir frecuencia del valor.
          previousTime1=currentTime1;
          Lectura_paginaweb();
          tone(alarma, toneVal1);
         }
}

void tiposalarma2() {
          currentTime2=millis();
          if((currentTime2-previousTime2)>20){
          sinVal2 = (sin(currentTime2*(3.1412/180)));                           // convertir grados a radianes
          toneVal2 = 2000 + (int(sinVal2*1000));                      // convertir frecuencia del valor.
          previousTime2=currentTime2;
          Lectura_paginaweb();
          tone(alarma, toneVal2);
         }
}

void tiposalarma3() {
      currentTime3=millis();
          if((currentTime3-previousTime3)>30){
          sinVal3 = (sin(currentTime3*(3.1412/180)));                           // convertir grados a radianes
          toneVal3 = 2000 + (int(sinVal3*1000));                      // convertir frecuencia del valor.
          previousTime3=currentTime3;
          Lectura_paginaweb();
          tone(alarma, toneVal3);
         }
}

void tiposalarma4() {
      currentTime4=millis();
          if((currentTime4-previousTime4)>40){
          sinVal4 = (sin(currentTime4*(3.1412/180)));                           // convertir grados a radianes
          toneVal4 = 2000 + (int(sinVal4*1000));                      // convertir frecuencia del valor.
          previousTime4=currentTime4;
          Lectura_paginaweb();
          tone(alarma, toneVal4);
         }
}

void tiposalarma5() {
          currentTime5=millis();
          if((currentTime5-previousTime5)>10){
          sinVal5 = (sin(currentTime5*(3.1412/180)));                           // convertir grados a radianes
          toneVal5 = 2000 + (int(sinVal5*1000));                      // convertir frecuencia del valor.
          previousTime5=currentTime5;
          Lectura_paginaweb();
          tone(alarma, toneVal5);
         }
}

void apagaralarma(){
  noTone(alarma);
}

 
void loop()
{
    Lectura_paginaweb();
    valor_inf = digitalRead(infrarrojo);
    valor_vib= digitalRead(sensorvib);
    valor_sonido=digitalRead(sensorsonido);
    valor_mag = digitalRead(sensormag) ;
    valor_flama = digitalRead(sensorflama);
    valor_boton1 = digitalRead(boton1);
    valor_boton2 = digitalRead(boton2);

    sensor_luz=analogRead(A1);
    niveldeagua = analogRead(A2);
    
    
    if (valor_boton1 == 1 || sensor_luz < 800){
    if (valor_inf == 0){
      bandera = 1;
      while (bandera == 1){
     tiposalarma();
     digitalWrite(led, HIGH);
     Lectura_paginaweb();
     valor_boton2 = digitalRead(boton2);
     if (valor_boton2==1){
      bandera = 0;
     // digitalWrite(led, LOW);
      apagaralarma();
      }
      }
    }

    if (valor_mag == 1){
      bandera1 = 1;
      while (bandera1 == 1){
        tiposalarma1();
        digitalWrite(led, HIGH);
        valor_boton2 = digitalRead(boton2);
        if (valor_boton2==1){
          bandera1 = 0;
          digitalWrite(led, LOW);
          apagaralarma();
        }
      }
    }

      if (valor_sonido == 0){
      bandera2 = 1;
      while (bandera2 == 1){
        tiposalarma2();
        digitalWrite(led, HIGH);
        valor_boton2 = digitalRead(boton2);
        if (valor_boton2==1){
          bandera2 = 0;
          digitalWrite(led, LOW);
          apagaralarma();
        }
      }
    }
    }

    if (valor_flama == 1){   
      bandera3 = 1;
      while (bandera3 == 1){
        tiposalarma3();
        digitalWrite(led, HIGH);
        valor_boton2 = digitalRead(boton2);
        if (valor_boton2==1){
          bandera3 = 0;
         digitalWrite(led, LOW);
          apagaralarma();
        }
      }
    }

     if (valor_vib == 0){
      bandera4 = 1;
      while (bandera4 == 1){
        tiposalarma5();
        digitalWrite(led, HIGH);
        valor_boton2 = digitalRead(boton2);
        if (valor_boton2==1){
          bandera4 = 0;
          digitalWrite(led, LOW);
          apagaralarma();
        }
      }
    }

     if (niveldeagua > 500){
      bandera5 = 1;
      while (bandera5 == 1){
        tiposalarma4();
        digitalWrite(led, HIGH);
        valor_boton2 = digitalRead(boton2);
        if (valor_boton2==1){
          bandera5 = 0;
          digitalWrite(led, LOW);
          apagaralarma();
        }
      }     
    }
    
}
 
¿ No debería ser, en vez de: if (valor_boton2==1){} ---> if (digitalRead(boton2)==1){} ?

Porque si esperas que cambie de valor en un loop sin leer la entrada se va a complicar. :LOL:
 
Lo lee antes de la sentencia....
Ahora veo el código..

Si, justo iba a corregir que no lo había visto.

Puede pasar que haya algo que mantiene la alarma prendida aunque se apague por el pulsador. Ya que se tiene comunicación con la PC se puede poner varios "print" para saber si realmente el boton2 esta apagando la alarma pero alguno de los tantos disparadores la vuelve a prender inmediatamente.
 
Última edición:
Por lo poco que vi, tienes horrores en el formateo del HTML, tienes miles de lectura de valores llevados a una variable y luego leídos en las sentencias, en vez de leer directamente...

Tendría que analizarlo en la compu, desde el celu no tengo para formatear el código, pero te recomiendo que replantées tu idea, leas un poco de marcación en HTML, y vuelvas a probar...
 
Si, justo iba a corregir que no lo había visto.

Puede pasar que haya algo que mantiene la alarma prendida aunque se apague por el pulsador. Ya que se tiene comunicación con la PC se puede poner varios "print" para saber si realmente el boton2 esta apagando la alarma pero alguno de los tantos disparadores la vuelve a prender inmediatamente.
Ya intente con algunos print y no lo esta leyendo.
Por lo poco que vi, tienes horrores en el formateo del HTML, tienes miles de lectura de valores llevados a una variable y luego leídos en las sentencias, en vez de leer directamente...

Tendría que analizarlo en la compu, desde el celu no tengo para formatear el código, pero te recomiendo que replantées tu idea, leas un poco de marcación en HTML, y vuelvas a probar...
He seguido tutoriales y nada me ha funcionado, intentare leer sobre la marcacion a ver si me ayuda
 
Ok. Trato de armarte la parte del HTML, el del código te invito a que releas bien y vuelvas a plantear el mismo, ya que me parece (sin analizar) hay cosas sin necesidad...

Haz lo siguiente, escribe un diagrama de flujo de los pasos y entradas de datos que quieres realizar con el proyecto, luego lo vuelcas al código siguiendo la lógica antes planteada...

Sube el código modificadp y mejorado al foro formateado a "C++" para mejor visualización
 
La linea:
Código:
 <form action=/ method=get>
no está bien.

El "action" debe llevar a algún sitio o página que gestione el formulario.
Si, como parece, es "./Adata1=0", debería ser:
Código:
<form action=\"./Adata1=0\" method=\"GET\">

Además, esa línea debe ir antes de los "input type" de los botones porque, si no, no enviará su valor al pulsar el "submit".

Los botones input type no se meten en un vínculo, como veo en el código:
Código:
<a href='./Adata1=0'><input type='button' value='Apagar Alarma'></a>

Y el submit también está mal:
Código:
 <input type=submit value=Cerrar usuario>

Es estar entre etiquetas <form></form> lo que envía el "name" y el "value" del botón a la página indicada por "action", con el método "GET" cuando se pulsa "submit". Así:

Código:
<form action="recibovalor.php" method="GET">
<input type="button" name="botonalarma" value="true">
<input type="submit" value="Enviar">
</form>

En este caso recibovalor.php recibe un "true" del boton llamado "botonalarma" por el método GET.

Por último, los "input type" tampoco están bien escritos.
Así no:
Código:
<input type='button' value='Apagar Alarma'>
Los valores están mejor con comillas dobles:
Código:
<input type=\"button\" value=\"Apagar Alarma\">

Igual es por todo eso por lo que no funciona.

Está lleno de errores.
Incluso la tabla que muestra los estados:
Código:
"<table style=\"margin: 0 auto;\">"
      "<tr>"
        "<th scope=\"col\">Nombre del sensor</th>"
        "<th scope=\"col\">Estado</th>"
        "</tr>"

        "<tr>"
        "<td>Infrarrojo</td>"
        "<td align=\"center\" >$S</td>"
        "</tr>"

        "<tr>"
        "<td>Sonido</td>"
        "<td align=\"center\" >$S</td>"
        "</tr>"

        "<tr>"
        "<td>Fuego</td>"
        "<td align=\"center\" >$S</td>"
        "</tr>"

        "<tr>"
        "<td>Contactores</td>"
        "<td align=\"center\" >$S</td>"
        "</tr>"

        "<tr>"
        "<td>Vibraci&oacuten</td>"
        "<td align=\"center\" >$S</td>"
        "</tr>"

        "<tr>"
        "<td>Nivel de agua</td>"
        "<td align=\"center\" >$D</td>"
        "</tr>"

        "</table>"

Todos los estados reciben la misma variable $S, menos "Nivel de agua", que recibe $D.
 
Última edición:
Atrás
Arriba