Proyecto domotica, cerradura electronica y control de iluminacion

Buenas noches, me gustaria saber que parametro no estoy teniendo en cuenta o que problema podria tener mi codigo. Anteriormente utilice switch() y tampoco funciono. El problema es que despues de que suena el buzzer con la funcion de tone() no me vuelve a ejecutar ningun condicional o case() del control remoto.
Este es mi codigo:
#include <IRremote.h>
#define SW_1 0xE13830DE
#define SW_2 0x9929519F
#define SW_3 0xA182EBF
int sensor= 0;
int fria=12;
int calida=13;
int positivo=1;
IRrecv irrecv(sensor);
decode_results IRcontrol;

#include <Servo.h>
Servo servo;

#include <Keypad.h>

const byte Filas = 4;
const byte Columnas = 4;
byte PinFilas[4] = {9,8,7,6};
byte PinColumnas[4] = {5,4,3,2};

char Teclas [ Filas ][ Columnas ] =
{
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};

char codigoSecreto[6] = {'1','2','3','4','5','6'};
int posicion=0;
int ledVerde=A0;
int ledRojo=A1;
int pulsador=A5;
int buzz=10;

Keypad Teclado = Keypad(makeKeymap(Teclas), PinFilas, PinColumnas, Filas, Columnas);

void setup()
{
Serial.begin(9600) ;
irrecv.enableIRIn();
pinMode(fria, OUTPUT);
pinMode(calida, OUTPUT);
pinMode(positivo,OUTPUT);
pinMode (ledVerde,OUTPUT);
pinMode (ledRojo, OUTPUT);
pinMode (buzz, OUTPUT);
pinMode (sensor, INPUT);
servo.attach(11);
servo.write(180);
}

void loop()
{
digitalWrite(positivo,HIGH);

if (irrecv.decode(&IRcontrol))
{

Serial.println(IRcontrol.value, HEX);
if (IRcontrol.value ==SW_1)
  {
 digitalWrite(fria,!digitalRead(fria));
 delay(100);
  }
 if(IRcontrol.value== SW_2)
  {
 digitalWrite(calida,!digitalRead(calida));
 delay(100);
  }
 if(IRcontrol.value== SW_3)
  {
 correcto();
  }
  irrecv.resume();
 }

int switchInter=analogRead(pulsador);
if (switchInter>=1000)
{
correcto();
}

  char tecla = Teclado.getKey() ; //teclado
   
 if (tecla != 0) 
    {
     
  if (tecla == codigoSecreto[posicion])
   {
      posicion ++; 
   }
  if (posicion == 6)
  {
    Serial.println("Clave correcta ");        
    correcto();  
    }
  if(tecla=='*')
   {
   Serial.println("reinicio");      
   posicion=0;
   analogWrite(ledRojo,255); // encendemos el LED rojo
   analogWrite(ledVerde, 0); // apagamos el verde
   }  
  if(tecla=='A')
  {
   Serial.println("timbre");
   DO(); DO(); DO();
   delay(20);
   FA();LA();
   delay(120);
   DO();DO();DO();
   delay(20);
   FA();LA();
   delay(120);
   FA();FA();MI();MI();RE();RE();
   delay(20);
   tone(buzz,523.25, 700);
   posicion=0; 
   irrecv.resume(); 
   }

    }

}
void correcto()
{
analogWrite(ledRojo,0);
analogWrite(ledVerde, 255);
analogWrite(ledRojo,0);
servo.write(180);
delay(1000);
servo.write(0);
delay(3000);
servo.write(180);
delay(1000);
analogWrite(ledVerde,0);
analogWrite(ledRojo,255);
posicion =0;
}
void DO()
{
tone(buzz,523.25, 120);
delay(160);
}
void FA()
{
tone(buzz,698.46, 120);
delay(200);
}
void LA()
{
tone(buzz,880, 200);
delay(240);
}
void MI()
{
tone(buzz,659.26, 120);
delay(160);
}
void RE()
{
tone(buzz,587.33, 120);
delay(160);
}

He trasladado su tema de una categoría de idioma inglés del foro a la categoría International > Español @eliasarduinomanda.

En adelante por favor usar la categoría apropiada a la lengua en que queráis publicar. Esto es importante para el uso responsable del foro, y esta explicado aquí la guía "How to get the best out of this forum".
Este guía contiene mucha información útil. Por favor leer.

De antemano, muchas gracias por cooperar.

Por favor edita tu post y adjunta el código de acuerdo a las Normas del Foro en Español, punto 7. También usa la opción "Autoformato" del menú "Herramientas" de la IDE antes de copiar el código así nos facilitas su lectura.

Mientras tanto, no aclaras cuál placa usas pero si es una UNO, Nano o Mega, los pines analógicos no trabajan con PWM entonces

analogWrite(ledRojo, 0);
analogWrite(ledVerde, 255);

no funciona.
En este caso lo correcto es

digitalWrite(ledRojo, LOW);
digitalWrite(ledVerde, HIGH);

Por otro lado, leer un pulsador/botón de este modo

int switchInter = analogRead(pulsador);
if (switchInter >= 1000) {
  correcto();
}

no tiene sentido.
Un pulsador solo tiene 2 estados (pulsado / no pulsado) que según como esté conectado se corresponderán con LOW / HIGH o HIGH / LOW.
Como los pines analógicos también funcionan como digitales (con excepción de A6 y A7 en el Nano), lo más adecuado es

byte switchInter = digitalRead(pulsador);
if (switchInter == HIGH) {  // o simplemente if(switchInter) {

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.