Hola de nuevo.
He simplificado un poco el programa quitando comentarios a ver si así podía descubrir el error. Pienso que tal vez no he puesto bien un bucle dentro del otro. ¿Cómo puedo hacer eso, dos bucles dentro de un mismo bucle (para eso de la contraseña)?
¿Y cómo hago para definir dos contraseñas diferentes en un mismo bucle (que no sé si así funcionaría mejor)?
Adjunto el programa modificado:
#define WEBDUINO_AUTH_REALM "ALARMNET"
#include <SPI.h>
#include <Ethernet.h>
#include <WebServer.h>
//Servidor
EthernetServer server(80);
static uint8_t mac[6] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
static uint8_t ip[] = {192,168,0,194};
String HTTP_req;
boolean LED9_status = 0;
//Declaración de variables de alarma
long distancia_1;
long PIR_1;
long PIR_2;
long PIR_3;
long tiempo;
long Punto;
long A = 2;
long B = 3;
long C = 4;
long D = 5;
long Activacion;
//Configuración del bucle de red y variables
void setup()
{ Ethernet.begin(mac, ip);
server.begin();
Serial.begin(9600);
Punto = int( 15 );
pinMode(14, OUTPUT); //Sirena
pinMode(9, OUTPUT); //Led
pinMode (A, INPUT);
pinMode (B, INPUT);
pinMode (C, INPUT);
pinMode (D, INPUT);
pinMode(15, OUTPUT); //salida ultrasónico
pinMode(16, INPUT); //rebote ultrasónico
pinMode(6, INPUT); //S1
pinMode(7, INPUT); //S2
pinMode(8, INPUT); //S3
digitalWrite(2,LOW);
digitalWrite(5,LOW);
Activacion = 0;
}
//Buble de red+alarma
void loop()
//Comienzo bucle alarma
{
A = digitalRead (2);
D = digitalRead (5);
//Clave
int clave []= {D,A,B,C,D};
int sec []= {100,100,100,100,100};
int estado = 0;
void loop () {
if (digitalRead(D)) {
sec [estado] =0;
estado++;
delay (500);
}
if (digitalRead(A)){
sec [estado] =1;
estado++;
delay (500);
}
if (digitalRead(B)){
sec [estado] =2;
estado++;
delay (500);
}
if (digitalRead(C)){
sec [estado] =3;
estado++;
delay (500);
}
if (digitalRead(D)){
sec [estado] =4;
estado++;
delay (500);
}
if (estado==5) {
if((sec[0]==clave[D])&&(sec[1]==clave[A]&&(sec[2]==clave[B])&&(sec[3]==clave[C])&&(sec[4]==clave[D]))
{((Activacion=0);
digitalWrite (14, LOW);
digitalWrite (9,LOW));}
}
}
{
int clave []= {A,A,B,C,D};
int sec []= {100,100,100,100,100};
int estado = 0;
void loop (){
if (digitalRead(A)) {
sec [estado] =0;
estado++;
delay (500);
}
if (digitalRead(A)){
sec [estado] =1;
estado++;
delay (500);
}
if (digitalRead(B)){
sec [estado] =2;
estado++;
delay (500);
}
if (digitalRead(C)){
sec [estado] =3;
estado++;
delay (500);
}
if (digitalRead(D)){
sec [estado] =4;
estado++;
delay (500);
}
if (estado==5){
if((sec[0]==clave[A])&&(sec[1]==clave[A]&&(sec[2]==clave[B])&&(sec[3]==clave[C])&&(sec[4]==clave[D]))
{digitalWrite (5, LOW); Activacion = 1;}
}
}
if (Activacion == 1)
{
//Control RF
digitalWrite(4,LOW);
digitalWrite(3,LOW);
//Sensor Ultrasonico
digitalWrite(15,LOW);
delayMicroseconds(5);
digitalWrite(15, HIGH);
delayMicroseconds(10);
tiempo=pulseIn(16, HIGH);
distancia_1= int(0.017*tiempo);
Serial.println("Distancia_1 ");
Serial.println(distancia_1);
Serial.println(" cm");
delay(100);
PIR_1 = digitalRead (6);
PIR_2 = digitalRead (7);
PIR_3 = digitalRead (8);
D = digitalRead (5);
A = digitalRead (2);
if (distancia_1 <= Punto || PIR_1 == HIGH || PIR_2 == HIGH || PIR_3 == HIGH)
{digitalWrite (14, HIGH );
digitalWrite (9, HIGH );}
else if (D == HIGH )
{digitalWrite (14, LOW );
digitalWrite (9, LOW );}
C = digitalRead (4);
if (C == HIGH)
{
digitalWrite (14, HIGH);
digitalWrite (9, HIGH);
delay(1000);
digitalWrite (14, LOW);
digitalWrite (9, LOW);
delay(1000);
digitalWrite (14, HIGH);
digitalWrite (9, HIGH);
delay(1000);
digitalWrite (14, LOW);
digitalWrite (9, LOW);
}
}
//Comienzo bucle de red
EthernetClient client = server.available();
if (client)
{ boolean currentLineIsBlank = true;
while (client.connected())
{ if (client.available())
{ char c = client.read();
HTTP_req += c;
if (c == '\n' && currentLineIsBlank)
{ client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();
client.println("<!DOCTYPE html>");
client.println("<html>");
client.println("<head>");
client.println("<title>Home Alarmnet</title>");
client.println("</head>");
client.println("<body>");
client.println("<h1>HOME ALARMNET</h1>");
client.println("<p>Haga click aquí para encender y apagar las luces.</p>");
client.println("<form method=\"get\">");
ProcessCheckbox(client);
client.println("</form>");
client.println("</body>");
client.println("</html>");
Serial.print(HTTP_req);
HTTP_req = "";
break;
}
if (c == '\n')
currentLineIsBlank = true;
else if (c != '\r')
currentLineIsBlank = false;
}
}
delay(10);
client.stop();
}
}
void ProcessCheckbox(EthernetClient cl)
{ if (HTTP_req.indexOf("LED9=9") > -1)
LED9_status = !LED9_status ;
digitalWrite(9, LED9_status);
if (LED9_status)
cl.println("<input type=\"checkbox\" name=\"LED9\" value=\"9\" \\ onclick=\"submit();\" checked>LED9");
else
cl.println("<input type=\"checkbox\" name=\"LED9\" value=\"9\" \\ onclick=\"submit();\">LED9");
}
}
[code]
Donde me da este error:
This report would have more information with
"Show verbose output during compilation"
enabled in File > Preferences.
Arduino: 1.0.6 (Windows 7), Board: "Arduino Uno"
Home_Alarmnet.ino: In function 'void loop()':
Home_Alarmnet:65: error: a function-definition is not allowed here before '{' token
Home_Alarmnet:237: error: expected `}' at end of input