Buenas tardes, me inicio con la programación, en electrónica ya tengo experiencia. Estoy tratando de hacer una pequeña alarma, con la idea de aprender sobre la marcha. Mi idea es sencilla, energizo el arduino, hay un delay de 5 seg que me permite salir y cerrar la puerta, ese mismo pin que detecta la entrada tiene un delay de 3 segundos que me permite llegar y apagar el arduino.
Los sensores son magneticos, normalmente cerrados, por lo que el pin que detectaa estos siempre tendrá 5v excepto cuando se abra la puerta, ahí tendrá cero.
Cuando la alarma se activa otro pin activa una sirena.
El problema es que cuando energizo el arduino la sirena suena siempre a a los 8 segundos, esté o no los pines en high.
const int pinentrada = 6; //sensor puerta de entrada
const int pinperimetro = 7; //sensores del perimetro
const int sirena = 8; //salida para la sirena
const int pinledact = 9; //salida led indicador
int estadopinentrada = 0;
int estadopinperimetro =0;
void setup() {
// put your setup code here, to run once:
pinMode (pinentrada, INPUT);
pinMode (pinperimetro, INPUT);
pinMode (sirena, OUTPUT);
pinMode (pinledact, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
delay (5000);
estadopinentrada = digitalRead(pinentrada);
estadopinperimetro = digitalRead(pinperimetro);
if (estadopinentrada == LOW) {
delay (3000);
digitalWrite(sirena, HIGH);
}
}
if (estadopinentrada == LOW)
{
delay (3000);
digitalWrite(sirena, HIGH);
}
No estas detectando la condicion de HIGH, por tanto la primera comprobacion que yo haría es mirar si tienes correctamente cableado en serie, el switch a los +5v, porque aunque explicas que tienes experiencia en electronica, todos sufrimos despistes.
El código es tan simple que debe funcionar. El problema es que el resultado que obtienes no es el esperado, pero el programa está haciendo lo correcto.
¿ Donde está el problema ?
Si como dices todo está cableado de modo correcto (de acuerdo al funcionamiento de programa), no llego a entender lo que te pasa, pero con los datos que comentas sigo pensando que el sensor (el switch) da la informacion inversa de la que espera encontar el programa.
Ok, corregí errores y conecté 5v directos a los pines y ahí va la cosa, este código funciona perfecto:
const int pinentrada = 6; //sensor puerta de entrada pin 6 del arduino
const int pinperimetro = 10; //sensores del perimetro pin 10 del arduino
const int sirena = 8; //salida para la sirena pin 8 del arduino
const int pinledact = 9; //salida led indicador pin 9 del arduino
int estadopinentrada = 0;
int estadopinperimetro =0;
void setup() {
// put your setup code here, to run once:
pinMode (pinentrada, INPUT); //declaro pin 6 como entrada
pinMode (pinperimetro, INPUT);
pinMode (sirena, OUTPUT);
pinMode (pinledact, OUTPUT);
Serial.begin(9600);
delay (5000); //pausa de 5 segundos para energizar la placa y salir por la puerta
digitalWrite(sirena, HIGH);// hago que la sirena de 2 bips para indicar que la alarma se activó
delay (500);
digitalWrite(sirena, LOW);
delay(500);
digitalWrite(sirena, HIGH);
delay(500);
digitalWrite(sirena, LOW);
}
void loop() {
// put your main code here, to run repeatedly:
estadopinentrada = digitalRead(pinentrada);//leo elm estado de los pins
estadopinperimetro = digitalRead(pinperimetro);
Serial.println("entrada"); //imprimo el estado de lo pins, sólo para la fase de prueba
Serial.println(estadopinentrada);
Serial.println("perimetro");
Serial.println(estadopinperimetro);
if (estadopinentrada == LOW) {
delay (3000);
digitalWrite(sirena, HIGH);
}
}
Pero si le agrego otro if para revisar el pin de perimetro, la alarma siempre se activa, el monitor me muestra que las dos entradas tienen 1.
const int pinentrada = 6; //sensor puerta de entrada pin 6 del arduino
const int pinperimetro = 10; //sensores del perimetro pin 10 del arduino
const int sirena = 8; //salida para la sirena pin 8 del arduino
const int pinledact = 9; //salida led indicador pin 9 del arduino
int estadopinentrada = 0;
int estadopinperimetro =0;
void setup() {
// put your setup code here, to run once:
pinMode (pinentrada, INPUT); //declaro pin 6 como entrada
pinMode (pinperimetro, INPUT);
pinMode (sirena, OUTPUT);
pinMode (pinledact, OUTPUT);
Serial.begin(9600);
delay (5000); //pausa de 5 segundos para energizar la placa y salir por la puerta
digitalWrite(sirena, HIGH);// hago que la sirena de 2 bips para indicar que la alarma se activó
delay (500);
digitalWrite(sirena, LOW);
delay(500);
digitalWrite(sirena, HIGH);
delay(500);
digitalWrite(sirena, LOW);
}
void loop() {
// put your main code here, to run repeatedly:
estadopinentrada = digitalRead(pinentrada);//leo elm estado de los pins
estadopinperimetro = digitalRead(pinperimetro);
Serial.println("entrada"); //imprimo el estado de lo pins, sólo para la fase de prueba
Serial.println(estadopinentrada);
Serial.println("perimetro");
Serial.println(estadopinperimetro);
if (estadopinentrada == LOW) {
delay (3000);
digitalWrite(sirena, HIGH);
}
if (pinperimetro== LOW);{
digitalWrite(sirena, HIGH);
}
}