SC PASCAL: PROGRAMACIÓN DE LA PALANCA DE FLAPS CON POTENCIÓMETROS
Partimos de una palanca de flaps que al moverla hacer moverse a su vez a un potenciómetro lineal de 10kohm. Lo primero que tenemos que hacer es conectar este potenciómetro a la tarjeta que se vaya a usar para controlarlo (USB Main o USB Servos) y ver qué valor toma el potenciómetro en cada punto de flap.
En este ejemplo los datos son los siguientes:
Flaps |
Valor pot |
0 |
40 |
1 |
130 |
2 |
230 |
5 |
324 |
10 |
454 |
15 |
559 |
25 |
673 |
30 |
764 |
40 |
857 |
Ahora podemos tratar estos datos de diferente manera, pero para este ejemplo vamos a calcular el valor del potenciómetro entre cada dos puntos de flaps. Son los siguientes:
| Flaps |
Valor intermedio |
| 0-1 |
85 |
| 1-2 |
180 |
| 2-5 |
277 |
| 5-10 |
389 |
| 10-15 |
506 |
| 15-25 |
616 |
| 25-30 |
718 |
| 30-40 |
810 |
De esta forma, si el valor del potenciómetro es mayor de 389 pero menor de 506, significa que la palanca estará en el punto de flap 10º.
Vamos a usar un archivo *.INI, que será el siguiente:
[Main]
Main1=SIMIO000210
[MainADCs]
Lever1=1
Lever2=2
EjeSplr=3
EjeFlap=4
[Flaps]
Flaps01=85
Flaps12=180
Flaps25=277
Flaps510=389
Flaps1015=506
Flaps1525=616
Flaps2530=718
Flaps3040=810
En este *.INI se ha definido el nombre de la tarjeta MAin USB que se usará, en qué eje de esta tarjeta está conectada la palanca de flaps, y los valores de las posiciones intermedias que hemos calculado antes.
Cuando movamos la palanca, debemos leer los valores del potenciómetro que van a cambiar, por lo que se leen en la sección OnADCChange(). Una vez leído, hay que hacer algo con ese valor. En este caso debemos escribir en la variable IOCP de la posición de la palanca (variable 326) el valor que se corresponde con el punto de flap seleccionado.
La variable 326 toma los siguientes valores:
| Flaps |
Variable IOCP |
| 0 |
0 |
| 1 |
2048 |
| 2 |
4096 |
| 5 |
6144 |
| 10 |
8192 |
| 15 |
10240 |
| 25 |
12288 |
| 30 |
14336 |
| 40 |
16384 |
Estos valores se obtienen, por ejemplo, usando el programa Offset Monitor incluído en la suite IOCP Server.

La variable IOCP hay que registrarla en la sección OnIOCPConnect().
Finalmente en la sección MAIN se leen los valores del fichero *.INI y se activa el eje ADC que nos interesa.
El script sería el siguiente:
PROGRAM Flaps;
const
OFFSET_FLAPLEVER_POS=326; //0 2048 4096 6144 8192 10240 12288 14336 16384
var
Main1:string;
Flaps01:integer;
Flaps12:integer;
Flaps25:integer;
Flaps510:integer;
Flaps1015:integer;
Flaps1525:integer;
Flaps2530:integer;
Flaps3040:integer;
ejeflap:integer;
//BOARDS EVENTs
procedure OnADCChange(sn:string;nadc:byte;value:integer);
begin
if nadc=ejeflap then begin
if (value<Flaps01) then WriteIOCP(1,OFFSET_FLAPLEVER_POS,0) else
if ((value>(Flaps01)) and (value<(Flaps12))) then WriteIOCP(1,OFFSET_FLAPLEVER_POS,2048) else
if ((value>(Flaps12)) and (value<(Flaps25))) then WriteIOCP(1,OFFSET_FLAPLEVER_POS,4096) else
if ((value>(Flaps25)) and (value<(Flaps510))) then WriteIOCP(1,OFFSET_FLAPLEVER_POS,6144) else
if ((value>(Flaps510)) and (value<(Flaps1015))) then WriteIOCP(1,OFFSET_FLAPLEVER_POS,8192) else
if ((value>(Flaps1015)) and (value<(Flaps1525))) then WriteIOCP(1,OFFSET_FLAPLEVER_POS,10240) else
if ((value>(Flaps1525)) and (value<(Flaps2530))) then WriteIOCP(1,OFFSET_FLAPLEVER_POS,12288) else
if ((value>(Flaps2530)) and (value<(Flaps3040))) then WriteIOCP(1,OFFSET_FLAPLEVER_POS,14336) else
if ((value>(Flaps3040))) then WriteIOCP(1,OFFSET_FLAPLEVER_POS,16384) end;
end;
//IOCP EVENTs
procedure OnIOCPConnect(socket:byte);
begin
RegIOCPOffset(1,OFFSET_FLAPLEVER_POS);SYNC;
end;
//MAIN
Begin
Main1:=readinifile('Throttle.ini','Main','Main1');
ejeflap:=readinifile('Throttle.ini','MainADCs','EjeFlap');
Flaps01:=readinifile('Throttle.ini','Flaps','Flaps01');
Flaps12:=readinifile('Throttle.ini','Flaps','Flaps12');
Flaps25:=readinifile('Throttle.ini','Flaps','Flaps25');
Flaps510:=readinifile('Throttle.ini','Flaps','Flaps510');
Flaps1015:=readinifile('Throttle.ini','Flaps','Flaps1015');
Flaps1525:=readinifile('Throttle.ini','Flaps','Flaps1525');
Flaps2530:=readinifile('Throttle.ini','Flaps','Flaps2530');
Flaps3040:=readinifile('Throttle.ini','Flaps','Flaps3040');
EnableADCChannel(Main1, ejeflap, 1, 30); //Flaps pot
End.