Hello guys,
I started to work on an altimeter (real one with rotating numbers) and it uses a DC motor and 2 pots: one pot turns every 2000 ft and the other one makes a full rotation through the whole scale (60k feet).
The pot used for 2000ft scale is a continuous turn pot which electrically operates for 340 so from 0 to 1888 ft instead of 2000 ( I will study how to recover those missing feet later)
I want to make this work as The first one gives a precise position each 2000 ft and the other one should be used as a sort of counter to let sioc understand in which "2000ft segments" it is operating.
I started with the following code but changing the CounterAd value don't make the thing following what I have in mind...do you have a suggestion on how to do that?

Thanks

Code:
Var 0000, Value 0
{
  &AltControl = TIMER 999 ,0 ,2
  &AltObj = 0    
  &AltMotor = 0
}

Var 0003, name AltMotor, static, Link USB_DCMOTOR, Device 2, Output 1     // motor control (0-127) 0=Left, +128 = Rig
Var 0006, name AltAd, static, Link USB_ANALOGIC, Device 2, Input 1, PosL 0, PosC 127, PosR 255     // Pot value
Var 0007, name CounterAd // , static, link USB_ANALOGIC, Device 2, Input 2, PosL 0, PosC 127, PosR 255     // Counter value
Var 9001, name AltOffst, Link FSUIPC_IN, Offset $6020, Length 8
{
  L0 = &AltOffst * 3.28084     // FSUIPC conversion, L0=Altitude
  &Altitude = L0
  L0 = ROUND L0
  L2 = L0
  IF &CounterAd <= 6	// from 0 to 2000ft
  {  
    IF L0 <= 0     // Pot 0
    {
      L1 = 0     // pot 0
    }
    ELSE
    {
      L2 = L0 - 0
      IF L0 <= 1888     // Pot 340
      {
        L1 = L2 / 7.379     // Pot 255
        L1 = ROUND L1
      }
      ELSE
      {
        IF L0 > 1888
        { 
          L1 = 255	// Pot 255
        }
      }
    }
  }
  ELSE
  {
    IF &CounterAd <= 12	// from 2000 to 4000 ft
    {
      L2 = L0 - 2000
      IF L0 <= 0
      {
        L1 = 0
      }
      ELSE
      {
        IF L0 <= 1888
        {
          L1 = L2 / 7.379
          L1 = ROUND L1
        }
        ELSE
        {
          IF L0 > 1888
          { 
            L1 = 255
          }
        }
      }
    }
  }
  &AltObj = L1    
}
Var 9002, name Altitude

Var 9004, name AltControl, Link SUBRUTINE     // Subrutine for Control (each 20ms)
{
  L0 = &AltObj - &AltAd
  L1 = 0    
  IF L0 < 0
  {
    L1 = 128    
  }
  L0 = ABS L0
  L2 = &AltVelMax + L1
  IF L0 <= &AltAprox8
  {
    L2 = &AltVel8 + L1
  }
  IF L0 <= &AltAprox6
  {
    L2 = &AltVel6 + L1
  }
  IF L0 <= &AltAprox4
  {
    L2 = &AltVel4 + L1
  }
  IF L0 <= &AltAprox2
  {
    L2 = &AltVel2 + L1
  }
  IF L0 <= &AltAproxSlow
  {
    L2 = &AltVelMin + L1
  }
  IF L0 = &AltMargen
  {
    L2 = 0    
  }
  &AltMotor = L2    
}
Var 9006, name AltObj     // objective position
Var 9007, name AltMargen, Value 0     // %error
Var 9008, name AltAprox8, Value 15
Var 9009, name AltAprox6, Value 12
Var 9010, name AltAprox4, Value 8
Var 9011, name AltAprox2, Value 4
Var 9012, name AltAproxSlow, Value 1
Var 9013, name AltVelMax, Value 24     // Speed for follow objective
Var 9014, name AltVel8, Value 20     // Speed for proximity obj
Var 9015, name AltVel6, Value 16
Var 9016, name AltVel4, Value 12
Var 9017, name AltVel2, Value 8
Var 9018, name AltVelMin, Value 4     // Speed approaching target