DETTAGLI MONOGRAFIA TELECONTROLLI GSM CON CELLULARI SIEMENS
Tutti i documenti relativi allla monografia sono contenuti in un file ZIP da 1,935 Mb.
 
Una una volta scaricato e decompresso tale file, saranno disponibili cinque cartelle con i dettagli hardware/software dei cinque progetti ed un file PDF contenete tutte gli articoli con la descrizione di questi progetti di cui presentiamo l'anteprima:
All'interno di ciascuna delle cinque cartelle sono presenti il master del circuito stampato (vedi esempio) ed i file .hex e .bas relativi al firmware implementato nel microcontrollore che gestisce il circuito. Di seguito riportiamo, a titolo di esempio, anche il file.bas del micro MF448.
 

'******************************************************************************
'* 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