Hola a todos,
Soy nuevo en el foro, y muy novato con la programación.
Veréis, necesito ayuda para un pequeño proyecto que estoy intentando hacer, se trata de un avisador por envío de mensaje vía GSM.
El sistema está pensado para que cuando alguien abra una puerta, el sistema active un relé,
Y el módulo GSM empiece a llamar, en ese momento tenemos un led de aviso llamémosle (LdRed), de que estamos llamando y cuando descuelguen en el otro extremo se nos enciende otro led llamémosle (LdGreen) avisando que han descolgado, pasados unos 8 segundos, tiempo suficiente para enviar un mensaje pregrabado en el módulo GSM, la llamada ha sido enviada correctamente regresamos al estado inicial, pero ya no volveremos a enviar nada aunque la puerta siga estando abierta, para no repetir el envió del mensaje, el ciclo no se repetirá hasta que la puerta no se cierre y se vuelva a abrir de nuevo.
He hecho varias rutinas, y tengo la simulación en proteus, pero no hay manera, a ver si alguien
Me puede echar una mano.
Muchas gracias
Aqui os dejo uno de los codigos que he usado, pero que no me acaba de funcionar:
'* MICROCONTROLADOR PIC 18F45K20 CLOCK 4 MHZ *
'* *
'*****************************************************************************
;****************** PIC STANDARD CONFIGURATION BY EA3ABN *******************
;*****************************************************************************
' DEFINICIÓN DE FUSES Y OSCILADOR
'*****************************************************************************
define _INTRC_IO & _WDT_OFF & _PWRTE_ON & _MCLR_OFF & _LVP_OFF & _CP_OFF & _OSC_4
DEFINE OSC 4
;********************* VARIABLES AND REGISTERS *******************************
;---------- OUTPUTS --------------
RELCALL VAR portd.0 ; Variable guarda el valor de la salida portD.0
BEACON VAR portd.1 ; Variable guarda el valor de la salida portD.1
AMPLI VAR portd.2 ; Variable guarda el valor de la salida portD.2
TESTLD VAR portd.3 ; Variable para led de test del sistema
;---------- DEFINE THE INPUT NAME --------------
RSTSW var portb.5 ; Variable deteccion de RESET SWITCH
TAMPER VAR portc.1 ; Variable de detección TAMPER SWITCH
LDRED VAR portc.2 ; Variable deteccion de LED RED
LDGREEN VAR portc.3 ; Variable deteccion de LED GREEN
MAINT VAR portb.1 ; Variable deteccion de MAINTENANCE SWITCH
;---------- DEFINE PORT INPUTS ------------------------
Input PORTb.5 ' Activamos B.5 como entrada de RESET switch.
Input PORTb.1 ' Activamos B.1 como entrada de MAINTENANCE switch.
Input PORTc.1 ' Activamos C.1 como entrada de TAMPER switch.
input PORTc.2 ' Activamos C.2 como entrada de LED RED
input PORTc.3 ' Activamos C.3 como entrada de LED GREEN
;---------- VARIABLES GENERAL USE ------------
MEMOTamper VAR BIT ; Variable para guardar el estado TAMPER
MEMORlay var bit ; Variable para guardar el estado RELAY Call
MEMOLdRED var bit ; Variable para guardar el estado LedRED
MEMOLdGreen var bit ; Variable para guardar el estado Green
CondiCuelga var bit ; Variable para guardar el paso por colgar
;*****************************************************************************
;------------------------ RESET INICIAL DE LA EEPROM ---------------------------
EEPROM 0,[0] ;memoria 0 con el valor inicial 0 , sirve para
;indicar que nunca ha corrido este programa
;*****************************************************************************
; vector de interrupcion
RCON.7=1 ; Enable interrupt priorities 18f45k20 TESTING PP.
IPR1.5=1 ; Set high interrupt priority TESTING PP
ON INTERRUPT GOTO ARRANQUE ; EN CASO DE INTERRUPCION IR A .....
;------------- IMPORTANTE, ESTO HABILITA LA INTERRUPCION EN " PORTB.0
INTCON=%10010000 ; HABILITA LA INTERRUPCION EN " PORTB.0 "
;Trisb=1
;Trisc=%00001010
;------------------------------------------------------------------------------
ARRANQUE:
high testld ;LED DE AVISO INICIO SISTEMA
pause 100
low testld
pause 100
high testld ;LED DE AVISO INICIO SISTEMA
pause 100
low testld
pause 100
high testld ;LED DE AVISO INICIO SISTEMA
pause 100
low testld
pause 100
PAUSE 100
MEMOTamper=0 ;Inicializamos variable MEMOTamper
MEMOLdRED=0 ;Inicializamos variable MEMOLdRED
;--------- HASTA QUE MAINT NO ESTE ABIERTO NO HACEMOS NADA ---------------------
INICIO:
CondiCuelga=0 ;
IF MAINT=0 THEN TapaOpen ; Hasta que no está abierto Maint
goto INICIO ; No seguimos con el resto.....
; Ojo esto solo sucede una vez
; Cuando estamos en modo normal, todo sigue
; su curso y nos vamos a ver si esta abierta
; la tapa TAMPER
;------- AQUI NOS QUEDAMOS DETECTANDO HASTA QUE SE ABRA LA PUERTA "TAMPER "-----
TapaOpen:
pause 100 ; Pausa
high BEACON ; Activamos BALIZA DE LA CAJA
pause 100
LOW BEACON ; Activamos BALIZA DE LA CAJA
'pause 10
'if TAMPER=0 and LDRED =0 then ActAudio ; Miramos si esta la zona activada
if TAMPER=0 then GOTO LLAMA1; Miramos si esta el tamper activado, y si
; lo esta, nos vamos a llamar, si no, seguimos
;mirando hasta que este abierta.
goto TapaOpen ; bucle hasta tapa abierta, SI / N0
;----------- HASTA AQUI EL CODIGO BIEN ----------------------------------------
;------------------------------------------------------------------------------
;iniciamos la llamada poniendo el rele activo.
llama1:
PAUSE 10
HIGH RELCALL
memorlay=1
IF TAMPER=0 and ldred=1 then llama1
IF TAMPER=0 AND Ldred=0 THEN mirarverde ; si puerta abierta y led verde activo
;significa que estamos en transito de la llamada
; pero que ha sido cerrada la puerta
RETURN
;----------------------------------------------------------------------------
llama2:
PAUSE 10
HIGH RELCALL
gosub contverde
;------------------------------------------------------------------------------
; Miramos si esta activo el rojo si no lo esta, seguimos mirando
; para asi verificar que está en transito la llamada.
mirarVerde:
if ldgreen=1 and tamper=0 then mirarVerde
if ldgreen=0 and tamper=0 then llama2 ; tengo dudas aqui
ContVerde:
if ldgreen=1 and tamper=0 then CondiCuelga=1 ; aqui esta el problema
if tamper=0 and CondiCuelga=1 then gosub cuelga
cuelga:
pause 10
low relcall
;if condicuelga=0 and tamper=0 then goto cuelga
;if ldgreen=1 and tamper=0 then goto inicio
end
;------------------------------------------------------------------------------