'******************************************************************************
'* MF448ESP
'* Sistema di telecontrollo bidirezionale
'* Si basa su cellulare Siemens x35
'* Il sistema è basato su un PIC16F876 lavorante a 8 MHz
'******************************************************************************
DEFINE OSC 8
DEFINE DEBUG_REG PORTA
DEFINE DEBUG_BIT 2
DEFINE DEBUG_BAUD 19200
DEFINE DEBUG_MODE 0
@ DEVICE BOD_OFF
@ DEVICE WDT_OFF
SYMBOL POWER=PORTC.3 'Alimentazione cellulare
'SYMBOL AUDIO=PORTB.7 'Uscita fonia per toni di conferma
SYMBOL BIT1=PORTB.4 'Bit 0 del decoder DTMF
SYMBOL BIT2=PORTB.3 'Bit 1 del decoder DTMF
SYMBOL BIT3=PORTB.2 'Bit 2 del decoder DTMF
SYMBOL BIT4=PORTB.1 'Bit 3 del decoder DTMF
SYMBOL DE=PORTB.0 'Bit di STROBE del decoder DTMF
SYMBOL SDA=PORTA.1
SYMBOL SCL=PORTA.0
SYMBOL RELE1=PORTA.3
SYMBOL RELE2=PORTA.5
SYMBOL LED=PORTC.7
SYMBOL TX=PORTC.1
SYMBOL RX=PORTC.2
SYMBOL ALARM1=PORTB.7
SYMBOL ALARM2=PORTB.6
'SYMBOL DEBUGPC=PORTA.0 'USCITA DI DEBUG
BUFFER VAR BYTE[45]
IMEI VAR BYTE[10]
TMP1 VAR BYTE
TMP2 VAR WORD
TMP3 VAR BYTE
TMP4 VAR BYTE
TMP5 VAR BYTE
CONTA VAR WORD
NMESS VAR BYTE
TASTO VAR BYTE
DATO VAR BYTE
LIMITE VAR WORD
TIMER VAR BYTE
SCAD VAR BYTE
VOLTE VAR BYTE
VARALARM1 VAR BIT
VARALARM2 VAR BIT
BLOCCO VAR BIT
CARICA VAR BIT
PASS VAR BIT
PASSTMP VAR BYTE[10]
BAUD CON 32
BATT VAR BYTE
PROVA VAR BYTE
RELE VAR BYTE
INDW CON %01000000
INDAW CON %01110000
INDR CON %01000001
INDAR CON %01110001
I2CWrite SDA,SCL,INDAW,[0]
I2CWrite SDA,SCL, INDW,[0]
PROVA=0
Input BIT1
Input BIT2
Input BIT3
Input BIT4
Input DE
Input ALARM1
Input ALARM2
Input RX
Output TX
Output POWER
'Output AUDIO
Output RELE1
Output RELE2
Clear
EEPROM 1,[0]
EEPROM 2,[0]
EEPROM 3,[0]
EEPROM 4,[0]
EEPROM 5,[0]
PASS=0
CARICA=0
SCAD=1
CONTA=30000
ADCON0=0
ADCON1=7
'OPTION_REG.7=0 'PER ABILITARE LE RES DI PULLUP
High POWER
Low RELE1
Low RELE2
Debug "SYSTEM STARTUP VER 1.6",10,13
High LED
For TMP1=0 TO 5
Toggle LED
Pause 500
Next TMP1
Low LED
TMP1=0
'RELE=%11111111
' I2CWrite SDA,SCL,INDAW,[RELE]
' I2CWrite SDA,SCL, INDW,[RELE]
'Pause 1000
RELE=%00000000
I2CWrite SDA,SCL,INDAW,[RELE]
I2CWrite SDA,SCL, INDW,[RELE]
Pause 1000
'For TMP1=0 TO 255
'RELE=TMP1
' I2CWrite SDA,SCL,INDAW,[RELE]
' I2CWrite SDA,SCL, INDW,[RELE]
'Debug "RELE ",#RELE,10,13
'Pause 500
'Next TMP1
'Pause 1000
' Output TX
' High TX
' GoSub AT
' Input TX
'Pause 1000
'Input TX
VARALARM1=0
VARALARM2=0
RESTART:
High LED
'Debug "RESTART ",13,10
SerOut2 TX,BAUD,["AT",13]
SerIn2 RX,BAUD,500,RESTART,[WAIT ("O"),TMP1]
' Pause 5000
Low LED
Pause 500
SerOut2 TX,BAUD,["AT&F",13]
' Debug "AT F ",13,10
' Pause 5000
Pause 500
SerOut2 TX,BAUD,["AT+CGSN",13]
SerIn2 RX,BAUD,1000,RESTART,[WAIT ("SN"),TMP1,TMP1,TMP1,TMP1,TMP1,TMP1,TMP1,TMP1,TMP1,TMP1,TMP1,TMP1,TMP1]
SerIn2 RX,BAUD,1000,RESTART,[TMP1,TMP2,TMP3,TMP4,TMP5]
IMEI[1]=TMP1-48
IMEI[2]=TMP2-48
IMEI[3]=TMP3-48
IMEI[4]=TMP4-48
IMEI[5]=TMP5-48
' Debug "SER ",13,10
'Pause 5000
Write 1,IMEI[1]
Write 2,IMEI[2]
Write 3,IMEI[3]
Write 4,IMEI[4]
Write 5,IMEI[5]
Read 1,IMEI[1]
Read 2,IMEI[2]
Read 3,IMEI[3]
Read 4,IMEI[4]
Read 5,IMEI[5]
Debug "IMEI: ",#IMEI[1],#IMEI[2],#IMEI[3],#IMEI[4],#IMEI[5],13,10
'Pause 5000
Debug "PASSWORD SISTEMA : ",#IMEI[1],#IMEI[2],#IMEI[3],#IMEI[4],#IMEI[5],13,10
'Pause 5000
SerOut2 TX,BAUD,["AT+CPBW=1,",#IMEI[1],#IMEI[2],#IMEI[3],#IMEI[4],#IMEI[5],",200,PASSWORD",13]
TMP1=0
TMP2=0
TMP3=0
TMP4=0
TMP5=0
'Pause 5000
MAIN:
'FT421
Debug "MAIN",#TIMER,13,10
Debug "RELE' 1 ",#RELE1,13,10
Debug "RELE' 2 ",#RELE2,13,10
TMP4=0
High TX
IF ALARM1=1 OR VARALARM1=1 Then
VARALARM1=1
GoSub LEGGIMESS
GoSub FT420
EndIF
IF ALARM2=1 OR VARALARM2=1Then
VARALARM2=1
GoSub LEGGIMESS
GoSub FT420
EndIF
'GoTo MAIN
'Output TX
'Pause 1100
'SerOut2 TX,BAUD,["AT",13]
'SerIn2 RX,BAUD,500,RESTART,[WAIT ("O"),TMP1]
'Pause 500
' SerOut2 TX,BAUD,["AT+CPAS",13]
SerIn2 RX,BAUD,800,NOCHIAMATA,[WAIT ("RING")]
'Input TX
High LED
Pause 500
Input tx
Input RX
Pause 2000
High POWER
CONTA=30000
PASS=0
'For TMP1=1 TO 3
Debug "RILEVATA CHIAMATA ",13,10
TMP5=0
GoSub RISP
TMP5=0
RISUONA:
TMP5=TMP5+1
IF TMP5>10 Then GoTo MAIN
SerOut2 TX,BAUD,["AT+VTS=5,10",13]
SerIn2 RX,BAUD,2000,RISUONA,[WAIT ("O"),TMP1]
' EndIF
Debug "CHIAMATA IN CORSO",13,10
High LED
TMP5=0
TMP4=0
IF PASS=0 Then GoSub PASSWORD
IF PASS=1 Then GoTo GESTIONERELE
TMP1=0
NOCHIAMATA:
IF CARICA=0 Then
CONTA=30000
TIMER=TIMER+1
IF TIMER>250 Then
TIMER=0
GoSub BATTERIA 'SE NON è IN CARICA VAI A VEDERE LO STATO DELLA BATTERIA
EndIF
Else
GoSub RICARICA
EndIF
Low LED
' Debug "VAI A LEGGERE BATTERIA",13,10
TMP1=0
' Debug "VAI A RICARICA",13,10
' Debug "VAI A LEGGERE I MESS",13,10
TMP1=0
Debug "NESSUNA CHIAMATA IN ARRIVO",13,10
PulsOut LED,500
' GoTo MAIN
'Else
' IF TMP1="3"Then
'EndIF
GoTo MAIN '*********************
'SerIn2 RX,BAUD,500,MAIN,[WAIT ("OK")]
GESTIONERELE:
Debug "GESTIONE RELE'",13,10
TMP3=0
GoSub CHECKKEY
While SCAD=1
Debug "SCAD ",#TMP3,13,10
IF ALARM1=1 Then
VARALARM1=1
' GoSub LEGGIMESS
' GoSub FT420
EndIF
IF ALARM2=1 Then
VARALARM2=1
' GoSub LEGGIMESS
' GoSub FT420
EndIF
TMP3=TMP3+1
IF TMP3=3 Then
SerOut2 TX,BAUD,["ATH",13] 'RIATTACCA
' Pause 1000
' Input tx
' Pause 2000
' High POWER 'ALTRIMENTI INTERROMPI LA CARICA
'
' Output tx
'
' GoSub AT
' Pause 200
GoSub BATTERIA
GoTo MAIN
EndIF
GoSub CHECKKEY
Wend
' SerOut2 POWER,BAUD,["GES 1 ",13,10]
' GoSub CHECKKEY
'Debug "RITORNO DA CHECK",13,10
' SerOut2 POWER,BAUD,["GES 2 ",13,10]
IF SCAD=0 Then
IF TASTO=11 Then
'COMANDO IL RELE
'SerOut2 POWER,BAUD,["C CHKEY 1",13,10]
GoSub CHECKKEY
IF SCAD=0 Then
Debug "STATO RELE SCRITTURA ",#RELE,13,10
IF TASTO=1 Then
'RELE 1
IF RELE1=1 Then
Low RELE1
Pause 500
GoSub BIP3
RELE1=0
' GoTo GESTIONERELE
Else
High RELE1
Pause 500
GoSub BIP1
RELE1=1
' GoTo GESTIONERELE
EndIF
EndIF
IF TASTO=2 Then
'RELE 2
IF RELE2=1 Then
Low RELE2
Pause 500
GoSub BIP3
RELE2=0
' GoTo GESTIONERELE
Else
High RELE2
Pause 500
GoSub BIP1
RELE2=1
' GoTo GESTIONERELE
EndIF
EndIF
IF TASTO=3 Then
IF RELE.0=1 Then
RELE.0 = 0
GoSub AZIONARELE
Pause 500
GoSub BIP3
Else
RELE.0 = 1
GoSub AZIONARELE
Pause 500
GoSub BIP1
EndIF
EndIF
IF TASTO=4 Then
IF RELE.1=1 Then
RELE.1 = 0
GoSub AZIONARELE
Pause 500
GoSub BIP3
Else
RELE.1 = 1
GoSub AZIONARELE
Pause 500
GoSub BIP1
EndIF
EndIF
IF TASTO=5 Then
IF RELE.2=1 Then
RELE.2 = 0
GoSub AZIONARELE
Pause 500
GoSub BIP3
Else
RELE.2 = 1
GoSub AZIONARELE
Pause 500
GoSub BIP1
EndIF
EndIF
IF TASTO=6 Then
IF RELE.3=1 Then
RELE.3 = 0
GoSub AZIONARELE
Pause 500
GoSub BIP3
Else
RELE.3 = 1
GoSub AZIONARELE
Pause 500
GoSub BIP1
EndIF
EndIF
IF TASTO=7 Then
IF RELE.4=1 Then
RELE.4 = 0
GoSub AZIONARELE
Pause 500
GoSub BIP3
Else
RELE.4 = 1
GoSub AZIONARELE
Pause 500
GoSub BIP1
EndIF
EndIF
IF TASTO=8 Then
IF RELE.5=1 Then
RELE.5 = 0
GoSub AZIONARELE
Pause 500
GoSub BIP3
Else
RELE.5 = 1
GoSub AZIONARELE
Pause 500
GoSub BIP1
EndIF
EndIF
IF TASTO=9 Then
IF RELE.6=1 Then
RELE.6 = 0
GoSub AZIONARELE
Pause 500
GoSub BIP3
Else
RELE.6 = 1
GoSub AZIONARELE
Pause 500
GoSub BIP1
EndIF
EndIF
IF TASTO=0 Then
IF RELE.7=1 Then
RELE.7 = 0
GoSub AZIONARELE
Pause 500
GoSub BIP3
Else
RELE.7 = 1
GoSub AZIONARELE
Pause 500
GoSub BIP1
EndIF
EndIF
IF TASTO=12 Then
Low RELE1
RELE1=0
Low RELE2
RELE2=0
RELE = 0
GoSub AZIONARELE
Pause 500
GoSub BIP3
EndIF
Else
GoTo GESTIONERELE
EndIF
EndIF
IF TASTO=12 Then
'RICHIESTA STATO RELE
' SerOut2 POWER,BAUD,["C CHKEY 2",13,10]
GoSub CHECKKEY
IF SCAD=0 Then
Debug "STATO RELE LETTURA ",#RELE,13,10
IF TASTO=1 Then
'RELE 1
IF RELE1=0 Then
Pause 500
GoSub BIP3
Else
Pause 500
GoSub BIP1
EndIF
EndIF
IF TASTO=2 Then
'RELE 2
IF RELE2=0 Then
Pause 500
GoSub BIP3
Else
Pause 500
GoSub BIP1
EndIF
EndIF
IF TASTO=3 Then
IF RELE.0=0 Then
Pause 500
GoSub BIP3
Else
Pause 500
GoSub BIP1
EndIF
EndIF
IF TASTO=4 Then
IF RELE.1=0 Then
Pause 500
GoSub BIP3
Else
Pause 500
GoSub BIP1
EndIF
EndIF
IF TASTO=5 Then
IF RELE.2=0 Then
Pause 500
GoSub BIP3
Else
Pause 500
GoSub BIP1
EndIF
EndIF
IF TASTO=6 Then
IF RELE.3=0 Then
Pause 500
GoSub BIP3
Else
Pause 500
GoSub BIP1
EndIF
EndIF
IF TASTO=7 Then
IF RELE.4=0 Then
Pause 500
GoSub BIP3
Else
Pause 500
GoSub BIP1
EndIF
EndIF
IF TASTO=8 Then
IF RELE.5=0 Then
Pause 500
GoSub BIP3
Else
Pause 500
GoSub BIP1
EndIF
EndIF
IF TASTO=9 Then
IF RELE.6=0 Then
Pause 500
GoSub BIP3
Else
Pause 500
GoSub BIP1
EndIF
EndIF
IF TASTO=0 Then
IF RELE.7=0 Then
Pause 500
GoSub BIP3
Else
Pause 500
GoSub BIP1
EndIF
EndIF
Else
GoTo GESTIONERELE
EndIF
EndIF
EndIF
'Pause 1000
Debug "FINE GESTIONE RELE'",13,10
GoTo GESTIONERELE
CHECKKEY:
Debug "CHECKKEY",10,13
'SerOut2 POWER,BAUD,["CHKEY ",13,10]
'RITORNA VALORI DA 0 A 9 PER I NUMERI, 11 PER ASTERISCO E 12 PER CANCELLETTO
LIMITE=500
SCAD=0
TASTO=0
WAIT1:
IF ALARM1=1 Then
VARALARM1=1
' GoSub LEGGIMESS
' GoSub FT420
EndIF
IF ALARM2=1 Then
VARALARM2=1
' GoSub LEGGIMESS
' GoSub FT420
EndIF
IF DE=0 Then
Pause 10
LIMITE=LIMITE-1
IF LIMITE=0 Then
SCAD=1
Return
EndIF
GoTo WAIT1
EndIF
TASTO=BIT1+BIT2*2+BIT3*4+BIT4*8
IF TASTO=10 Then
TASTO=0
EndIF
Debug "TASTO PREMUTO: ",#TASTO,13,10
WAIT2:
IF ALARM1=1 Then
VARALARM1=1
' GoSub LEGGIMESS
' GoSub FT420
EndIF
IF ALARM2=1 Then
VARALARM2=1
' GoSub LEGGIMESS
' GoSub FT420
EndIF
IF DE=1 Then
Pause 200
LIMITE=LIMITE-1
IF LIMITE=0 Then
SCAD=1
Return
EndIF
GoTo WAIT2
EndIF
Return
FT420:
High LED
'SerOut2 TX,BAUD,["AT",13]
'IF VARALARM1=1 Then
' Output TX
' High TX
GoSub AT
IF VARALARM1=1 Then
Debug "ALLARME 1"
IF NMESS>=2 Then
TMP2= NMESS-1
Else
TMP2=1
EndIF
For TMP1=1 TO TMP2
' Pause 1000
GoSub INVIA
' SerOut2 TX,BAUD,["AT",13]
' Pause 1000
Next TMP1
EndIF
IF VARALARM2=1 Then
Debug "ALLARME 2"
TMP1=NMESS
' SerOut2 POWER,BAUD,["INVIO MESS N. ",#NMESS,13,10]
' SerOut2 TX,BAUD,["AT+CMSS=",#NMESS,13]
Pause 1000
GoSub INVIA
EndIF
TMP1=0
TMP2=0
'SerOut2 TX,BAUD,["AT+CMSS=1",13]
' Pause 5000
' Input TX
'Pause 5000
Pause 2000
' Low POWER
VARALARM1=0
VARALARM2=0
RESTA:
Pause 1000
IF ALARM1=1 OR ALARM2=1 Then RESTA
'EndIF
'IF VARALARM2=1 Then
' High POWER
' Pause 5000
' Output TX
' High TX
' For TMP1=1 TO 3
' SerOut2 TX,BAUD,["AT",13]
' Pause 500
' Next TMP1
' Pause 1000
' IF VARALARM2=1 Then
' TMP1=NMESS
' GoSub INVIA
' EndIF
' Pause 10000
' Pause 1000
' Pause 5000
' Input TX
' Pause 5000
' Low POWER
' Pause 2000
' High POWER
' Pause 2000
' Low POWER
' VARALARM2=0
'RESTA2:
' Pause 1000
' IF ALARM2=1 Then RESTA2
'EndIF
Low LED
Return
LEGGIMESS:
High LED
Pause 500
Input tx
Input RX
Pause 2000
High POWER
CONTA=30000
' Output TX
PAUSE 500
High TX
PAUSE 500
GoSub AT
' Pause 100
For TMP2=1 TO 10
' IF ALARM1=1 OR ALARM2=1 Then GoTo MAIN
SerOut2 TX,BAUD,["AT+CMGR=",#TMP2,13]
SerIn2 RX,BAUD,1000,MAIN,[WAIT ("+CMGR: "),TMP1]
Debug "TROVATO NELLA POSIZIONE ",#TMP2," --> ",TMP1,13,10
IF TMP1="1" Then
SerOut2 TX,BAUD,["AT+CMGD=",#TMP2,13]
Debug "SMS CANCELLATO",13,10
GoTo LEGGIMESS
EndIF
IF TMP1="0" Then
NMESS=TMP2-1
TMP2=0
GoTo FINELETTURA
EndIF
' Pause 10
Next TMP2
TMP2=0
FINELETTURA:
'SerOut2 POWER,BAUD,["S",#NMESS,13,10]
'Input TX
Debug "MESSAGGI IN MEMORIA: ",#NMESS,13,10
' SerOut2 POWER,BAUD,["MESS IN MEM: ",#NMESS,13,10]
Return
PASSWORD:
Read 1,IMEI[1]
Read 2,IMEI[2]
Read 3,IMEI[3]
Read 4,IMEI[4]
Read 5,IMEI[5]
Debug "INSERIRE PASSWORD",13,10
'SerOut2 TX,BAUD,["ATA",13]
For TMP1=1 TO 5
GoSub CHECKKEY
While SCAD=1
TMP4=TMP4+1
IF TMP4=5 Then
TMP4=0
SerOut2 TX,BAUD,["ATH",13] 'RIATTACCA
' Pause 1000
' Input tx
' Pause 2000
' High POWER 'ALTRIMENTI INTERROMPI LA CARICA
' Output tx
' GoSub AT
Pause 1000
GoSub BATTERIA
GoTo MAIN
EndIF
GoSub CHECKKEY
Wend
TMP4=0
' SerOut2 POWER,BAUD,["S ",#SCAD,13,10]
PASSTMP[TMP1]=TASTO
Debug "TMP1 ",#TMP1,13,10
Debug "PASSWORD ",#PASSTMP[TMP1],13,10
Next TMP1
TMP1=0
Debug "PASSWORD INSERITA: ",#PASSTMP[1],#PASSTMP[2],#PASSTMP[3],#PASSTMP[4],#PASSTMP[5],13,10
Debug "PASSWORD SISTEMA : ",#IMEI[1],#IMEI[2],#IMEI[3],#IMEI[4],#IMEI[5],13,10
IF PASSTMP[1] = IMEI[1] AND PASSTMP[2] = IMEI[2] AND PASSTMP[3] = IMEI[3] AND PASSTMP[4] = IMEI[4] AND PASSTMP[5] = IMEI[5] Then
PASS=1
' Pause 100
TMP5=0
RISUONA2:
TMP5=TMP5+1
IF TMP5>10 Then GoTo MAIN
SerOut2 TX,BAUD,["AT+VTS=5,10",13]
SerIn2 RX,BAUD,1000,RISUONA2,[WAIT ("O"),TMP1]
' EndIF
TMP5=0
' DTMFOut AUDIO,500,200,[2]
' Pause 500
Return
EndIF
PASS=0
Pause 500
RISUONA3:
TMP5=TMP5+1
IF TMP5>10 Then GoTo MAIN
SerOut2 TX,BAUD,["AT+VTS=",34,"55555",34,13]
SerIn2 RX,BAUD,2000,RISUONA3,[WAIT ("O"),TMP1]
'EndIF
TMP5=0
SerOut2 TX,BAUD,["ATH",13] 'RIATTACCA
Pause 1000
GoSub BATTERIA
' Pause 500
'SerOut2 TX,BAUD,["ATH",13]
Return
SUONO:
TMP5=0
'Output TX
'Pause 300
For TMP1=1 TO VOLTE
' Sound AUDIO,[90,50]
RIPROVA:
TMP5=TMP5+1
IF TMP5>10 Then GoTo MAIN
SerOut2 TX,BAUD,["AT+VTS=5",13]
SerIn2 RX,BAUD,1000,RIPROVA,[WAIT ("OK")]
Pause 150
Next TMP1
' Pause 800
VOLTE=0
TMP1=0
TMP5=0
'Input TX
Return
INVIA:
PulsOut LED,500
Debug "INVIO SMS N. ",#TMP1,13,10
Pause 1000
BLOCCO=1
GoSub BLOCCOTEL
Pause 2000
SerOut2 TX,BAUD,["AT+CMSS=",#TMP1,13]
' SerOut2 POWER,BAUD,["I ",#TMP1,13,10]
Pause 8000
BLOCCO=0
GoSub BLOCCOTEL
Pause 4000
' GoSub PAUSA
Return
AT:
' For TMP1=1 TO 3
Pause 500
SerOut2 TX,BAUD,["AT",13]
Pause 500
' Next TMP1
' TMP1=0
Return
BLOCCOTEL:
SerOut2 TX,BAUD,["AT+CLCK=CS,",#BLOCCO,13]
Return
RISP:
High TX
'Low TX
' Pause 500
GoSub AT
Pause 500
TMP5=TMP5+1
IF TMP5>10 Then GoTo MAIN
Debug "NON RISPOSTO - TMP5 ",#TMP5,10,13
SerOut2 TX,BAUD,["ATA",13]
SerIn2 RX,BAUD,1000,RISP,[WAIT ("O"),TMP1]
Debug "RISPOSTO",10,13
Pause 800
Return
BIP3:
TMP5=0
RISUONABIP3:
Low LED
TMP5=TMP5+1
IF TMP5>10 Then GoTo MAIN
SerOut2 TX,BAUD,["AT+VTS=",34,"555",34,13]
SerIn2 RX,BAUD,1000,RISUONABIP3,[WAIT ("O"),TMP1]
TMP5=0
High LED
Return
BIP1:
TMP5=0
RISUONABIP1:
Low LED
TMP5=TMP5+1
IF TMP5>10 Then GoTo MAIN
SerOut2 TX,BAUD,["AT+VTS=5,10",13]
SerIn2 RX,BAUD,1000,RISUONABIP1,[WAIT ("O"),TMP1]
TMP5=0
High LED
Return
PAUSA:
For TMP4=0 TO 200
IF ALARM1=1 Then
VARALARM1=1
EndIF
IF ALARM2=1 Then
VARALARM2=1
EndIF
Pause 20
Next TMP4
TMP4=0
Return
BATTERIA:
TMP1=0
TMP2=0
TMP3=0
TMP4=0
'Output TX
High TX
'Low TX
Pause 500
GoSub AT
Pause 500
SerOut2 TX,BAUD,["AT+CBC",13]
SerIn2 RX,BAUD,1000,RESTART,[WAIT ("+CBC: "),TMP3,TMP1,TMP1,TMP2] 'RISPOSTA DEL CELL: +CBC: 0,20
IF TMP3<>"0" Then 'se il cellulare non è in carica dalla batteria stacca e attacca il rele
Debug "BATTERIA IN CARICA ",13,10
'Low POWER
'GoSub PAUSA
Pause 500
Input tx
Input RX
GoSub PAUSA
High POWER
GoSub PAUSA
Low POWER
GoSub PAUSA
High POWER
GoSub PAUSA
Output tx
GoSub PAUSA
GoSub AT
Pause 200
Debug "BATTERIA STACCATA ",13,10
Else
Debug "BATTERIA NON IN CARICA ",13,10
EndIF
IF TMP1="0" OR TMP1="1" OR TMP1="2" OR TMP1="3" OR TMP1="4" OR TMP1="5" OR TMP1="6" OR TMP1="7" OR TMP1="8" OR TMP1="9" Then
TMP3=TMP1-48
Else
TMP3=0
EndIF
IF TMP2="0" OR TMP2="1" OR TMP2="2" OR TMP2="3" OR TMP2="4" OR TMP2="5" OR TMP2="6" OR TMP2="7" OR TMP2="8" OR TMP2="9" Then
TMP4=TMP2-48
Else
TMP4=0
EndIF
TMP1=(TMP3*10)+TMP4
Pause 500
IF TMP1=10 Then
SerOut2 TX,BAUD,["AT+CBC",13]
SerIn2 RX,BAUD,1000,MAIN,[WAIT ("+CBC: "),TMP2,TMP2,TMP2,TMP2,TMP3] 'RISPOSTA DEL CELL: +CBC: 0,20
IF TMP3="0" Then
TMP1=TMP1*10
EndIF
EndIF
Pause 500
BATT=TMP1
Debug "LIVELLO BATTERIA ",#BATT,"%",13,10
IF CARICA=0 AND BATT=>0 AND BATT<=40 Then 'SE LA BATTERIA è TRA L'11% (IN MODO CHE QUANDO è AL 100% NON ABBIA PROB) E IL 20% RICARICA
CARICA=1
EndIF
Input TX
GoSub PAUSA
Return
RICARICA:
Input TX
IF CONTA>1 AND CARICA=1 Then 'SE LA BATTERIA è SCARICA (CARICA=1) E CONTA NON è ANCORA A 1
'ALLORA LASCIA IL RELE DISECCITATO IN MODO CHE CARICA LA BATTERIA
' Low POWER 'E DECREMENTA CONTA
IF CONTA = 1000 OR CONTA = 2500 OR CONTA = 5000 OR CONTA = 10000 OR CONTA = 15000 OR CONTA = 20000 OR CONTA = 25000 OR CONTA = 29990 Then
Low POWER
GoSub PAUSA
Input TX
Input RX
GoSub PAUSA
High POWER
GoSub PAUSA
Low POWER
GoSub PAUSA
Output tx
GoSub PAUSA
GoSub AT
Pause 200
Debug "BATTERIA STACCATA TEMPORANEAMENTE ",13,10
EndIF
CONTA=CONTA-1
Debug "CELL IN CARICA - TIME ",#CONTA,13,10
Else
Input TX
Input RX
GoSub PAUSA
High POWER 'ALTRIMENTI INTERROMPI LA CARICA
CARICA=0 'E FAI IN MODO CHE NON LO RICARICA PIù FINO A QUANDO NO è DI NUOVO AL 20%
CONTA=30000
GoSub PAUSA
Output tx
GoSub PAUSA
GoSub AT
Pause 200
EndIF
Return
AZIONARELE:
I2CWrite SDA,SCL,INDAW,[RELE]
I2CWrite SDA,SCL, INDW,[RELE]
' Pause 50
Return |