Sirena solo suene un tiempo específico y se detenga.

Estimados, estoy haciendo un código para zonas de descarga en una práctica de donde estudio, pero necesito activar una sirena durante un tiempo establecido, que se desactive aunque el lcd me indique que la zona está ocupada, con un tiempo de sirena de 3 segundos que suene y se desactive, para las dos zonas de descarga.
Código:
'****************************************************************
'*  Name    : zonadescarga.BAS                                      *
'*  Author  : [greivin granados]                    *
'*  Notice  : Copyright (c) 2022 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 2/9/2022                                          *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
cmcon=7 ; convierte todo el puerto A en digital

SENSOR1 VAR portA.1 ;ACTIVA ZONA1 DESCARGA O DESACTIVA
SENSOR2 var portA.0 ;CTIVA ZONA2 DESCARGA O DESACTIVA
APALAR VAR PORTA.4
ledROJO VAR portA.2 ;ACTIVA EL LEDROJO
ledVERDE var portA.3 ;ACTIVA EL LEDVERDE
SIRENA VAR PORTB.0 ;ACTIVA SIRENA
x Var BYTE ; PARA HACER LAS REPETICIONES

DEFINE  LCD_DREG        PORTB         ; define pines del LCD  B4  a  B7
DEFINE  LCD_DBIT          4      ; empezando desde el Puerto B4 hasta el B7
DEFINE  LCD_RSREG       PORTB    ;define el puerto B para conectar el bit RS
DEFINE  LCD_RSBIT        3      ;este es el puerto B3
DEFINE  LCD_EREG         PORTB    ;define el puerto B para conectar el bit Enable
DEFINE  LCD_EBIT           2      ;este es el puerto B2

ACTIVAR:
IF SENSOR1=1 AND SENSOR2=1 THEN ZONASOCUPADAS

if SENSOR1 = 1 then ZONAOCUPADA1

if SENSOR2 = 1 then ZONAOCUPADA2
PAUSE 300                     ;retardo para esperar que funcione el LCD

LCDOUT $FE,1,"ZONA LIBRE 1"  ;LIMPIAR PANTALLA Y SACAR EL TEXTO HOLA GRUPO
LCDOUT $FE, $C0,"ZONA LIBRE 2" ;PASAR AL COMIENZO DE LA SEGUNDA LINEA Y ESCRIBIR ELECTRONICA DIGITAL
HIGH LEDVERDE
PAUSE 300
LOW LEDVERDE
PAUSE 300

if SENSOR1 = 1 then ZONAOCUPADA1

if SENSOR2 = 1 then ZONAOCUPADA2

IF SENSOR1=1 AND SENSOR2=1 THEN ZONASOCUPADAS

GOTO ACTIVAR

ZONAOCUPADA1:                 ;retardo para esperar que funcione el LCD
LCDOUT $FE,1,"ZONA OCUPADA 1"  ;LIMPIAR PANTALLA Y SACAR EL TEXTO HOLA GRUPO
LCDOUT $FE, $C0,"ZONA LIBRE 2"
PAUSE 300
HIGH LEDROJO
PAUSE 300
LOW LEDROJO
PAUSE 300

IF SENSOR1=1 AND SENSOR2=1 THEN ZONASOCUPADAS

IF SENSOR1 =0 THEN ACTIVAR

GOTO ZONAOCUPADA1

ZONAOCUPADA2:
PAUSE 300                     ;retardo para esperar que funcione el LCD

LCDOUT $FE,1, "ZONA LIBRE 1"   ;LIMPIAR PANTALLA Y SACAR EL TEXTO HOLA GRUPO
LCDOUT $FE, $C0,"ZONA OCUPADA 2"

PAUSE 300
HIGH LEDROJO
PAUSE 300
LOW LEDROJO
PAUSE 300

IF SENSOR1=1 AND SENSOR2=1 THEN ZONASOCUPADAS

IF SENSOR2 =0 THEN ACTIVAR

GOTO ZONAOCUPADA2

ZONASOCUPADAS:
PAUSE 300                     ;retardo para esperar que funcione el LCD

LCDOUT $FE,1, "ZONA OCUPADA 1"   ;LIMPIAR PANTALLA Y SACAR EL TEXTO HOLA GRUPO
LCDOUT $FE, $C0,"ZONA OCUPADA 2"
PAUSE 300
HIGH LEDROJO
PAUSE 300
LOW LEDROJO
PAUSE 300

IF SENSOR1 =0 THEN ACTIVAR

IF SENSOR2 =0 THEN ACTIVAR

GOTO ZONASOCUPADAS

encender:

for x = 0 to 1
if sensor1=1 then encender

IF apalar=1 THEN apagar
high sirena     
pause 250       
low sirena
PAUSE 250
next
goto apagar

apagar:
low sirena
goto activar

END
Esto es lo que tengo hasta ahora.
 

Adjuntos

  • zonadecargaydescarga.pdsprj.LAPTOP-AN25VHSO.Greiv.zip
    17.6 KB · Visitas: 5
Última edición por un moderador:
Entiendo de programación, pero no de programación de pics.

Lo que sí veo es que, si sensor1 = 1

encender:
for x = 0 to 1
if sensor1=1 then encender

ahí tienes un bucle infinito

(qué poco me gustan los GOTOs :rolleyes: )

En esta línea te ha olvidado poner el retardo:

ZONAOCUPADA1: ;retardo para esperar que funcione el LCD

Aquí hay líneas que sobran:

ACTIVAR:
IF SENSOR1=1 AND SENSOR2=1 THEN ZONASOCUPADAS
if SENSOR1 = 1 then ZONAOCUPADA1
if SENSOR2 = 1 then ZONAOCUPADA2
PAUSE 300 ;retardo para esperar que funcione el LCD
LCDOUT $FE,1,"ZONA LIBRE 1" ;LIMPIAR PANTALLA Y SACAR EL TEXTO HOLA GRUPO
LCDOUT $FE, $C0,"ZONA LIBRE 2" ;PASAR AL COMIENZO DE LA SEGUNDA LINEA Y ESCRIBIR ELECTRONICA DIGITAL
HIGH LEDVERDE
PAUSE 300
LOW LEDVERDE
PAUSE 300 <‐------------ Esta... porque ya hace 300 de pausa en la de arriba (si no se quita estará 300 en HIGH y 600 en LOW)
if SENSOR1 = 1 then ZONAOCUPADA1 <‐---------- Esta... porque ya se lee con las de arriba
if SENSOR2 = 1 then ZONAOCUPADA2 <‐---------- Esta... porque ya se lee con las de arriba
IF SENSOR1=1 AND SENSOR2=1 THEN ZONASOCUPADAS <‐---------- Esta... porque ya se lee con las de arriba
GOTO ACTIVAR
 
Última edición:
Arriba