'03/05/2012
'A partir de una posicion memorizada, actua el servo que se usa para abrir y cerrar las compuertas del tren
'conectandolo al canal del tren. Con un pulsador se memorizan los puntos max y min de recorrido de las compuertas.
'USA LA MISMA PLACA QUE EL INVERSOR DE SERVO PROGRAMABLE
'Ajustar primero el recorrido de compuertas y punto de activacion, despues ajustar con la emisora el recorrido del servo del tren.
'Pulsar el sw mientras se alimenta para entrar el programacion. Memorizar max y minimo, el led se apaga. Pulsar nuevamente para seleccionar
'el punto donde actuan las compuertas.
Define CONF_WORD = 0x31c4
'Define CLOCK_FREQUENCY = 8
OSCCON.IRCF0 = 1  'Pongo el clock a 8MHz
OSCCON.IRCF1 = 1  'Pongo el clock a 8MHz
OSCCON.IRCF2 = 1  'Pongo el clock a 8MHz
AllDigital
Dim in As Byte  'vaiable donde guardo los valores de servo
Dim out As Byte  'variable para el valor de salida
Dim a As Byte  'variable valor a partir del cual funciona para sentido directo o inverso
Dim valor As Byte  'variable valor memorizado
Dim max As Byte  'almacena el valor maximo del servo de compuerta
Dim min As Byte  'almacena el valor minimo del servo de compuerta
Config GPIO.0 = Input  'entrada WFM
Config GPIO.1 = Output  'salida servo compuerta
Config GPIO.3 = Input  'pulsador memo
'Config GPIO.3
Config GPIO.4 = Output  'led
Config GPIO.5 = Output
Symbol led = GPIO.4
a = 0  'hago un contador para tener dos opciones de memoria
Read 1, valor  'lee de la dirección a el valor memorizado
Read 2, max
Read 3, min
led = 0
If GP3 = 1 Then
	led = 1
	WaitMs 1000
	Gosub programa
Else
Endif
loop:
ServoIn GP0, in

If GP3 = 1 Then
	led = 1
Read 1, valor  'leemos antes para comparar y no repetir la escritura'
If valor <> in Then
	valor = in
	Write 1, valor  'escribe en la dirección a el valor leido
	'WaitMs 100  'Esperamos la escritura en la eeprom'

	WaitMs 500
	led = 0
Endif
Endif

If in > valor Then
	out = max
Else
	out = min
Endif
ServoOut GP1, out  'Salida servo para compuertas
ServoOut GP5, in  'Salida servo para tren
Goto loop
End                                               

programa:
led = 0
ServoIn GP0, in
ServoOut GP1, in  'la salida de servo es la misma que la entreda para ajustar el recorrido del aerofreno
If GP3 = 1 Then a = a + 1

If a = 1 Then
	led = 1
	WaitMs 500
	'ServoIn GP0, in
	'If in > 150 Then
		max = in
		Write 2, max
	led = 0
	a = 2
Endif
If a = 3 Then
	led = 1
	'ServoIn GP0, in
		min = in
	Write 3, min
	led = 1
	WaitMs 300
	led = 0
	WaitMs 100
	led = 1
	WaitMs 200
	led = 0
Return                                            
Endif
Goto programa



