Comandare ventola PWM con LIN BUS

Buongiorno a tutti,
il progetto è concluso e funziona perfettamente.
Pubblico il codice definitivo per chi è interessato:

// CODICE RILEVAZIONE EVENTI SU LINBUS LEXUS e COMANDO VENTOLE PWM

#define PIN_CS 2
#define PIN_FAULT 9
#define V_SX 6
#define V_DX 7

int V0 = 255;
int V1 = 170;
int V2 = 85;
int V3 = 0;

byte stato = 0;
byte comando;

void setup()
{
  pinMode(PIN_CS, OUTPUT);
  pinMode(PIN_FAULT, OUTPUT);
  pinMode(V_SX, OUTPUT);
  pinMode(V_DX, OUTPUT);
  digitalWrite(PIN_FAULT, HIGH);
  analogWrite( V_SX , V0 ); //VENTOLA Sx FERMA
  analogWrite( V_DX , V0 ); //VENTOLA Dx FERMA
  //Serial.begin(57600); //debug serial
  //Serial.println("Due debug Comms");
  Serial3.begin(9600); //LIN Serial Rx
  digitalWrite(PIN_CS, HIGH);
}

void loop()

{
  while (Serial3.available())
  {
    byte rx = Serial3.read();
    //Serial.println (rx , HEX);
    switch (stato)
    {
      case 0:
        if (rx == 0x55)      stato = 1;
        else                 stato = 0;
        break;
      case 1:
        if (rx == 0x78)      stato = 2;
        else if (rx == 0x55) stato = 1;
        else                 stato = 0;
        break;
      case 2:
        if (rx == 0x00)      stato = 3;
        else if (rx == 0x55) stato = 1;
        else                 stato = 0;
        break;
      case 3:
        if (rx == 0x55)      stato = 1;
        else {
          switch (rx)
          {
            case 0x0 : // 0x0 TUTTO SPENTO
              analogWrite( 6, V0 );
              analogWrite( 7, V0 );
              break;

            case 0xB :  // 0xB VENTOLA SX_3 DX_0
              analogWrite( 6, V3 );
              analogWrite( 7, V0 );
              break;

            case 0x7B :  // 0x7B VENTOLA SX_3 DX_0 RISC Dx_3
              analogWrite( 6, V3 );
              analogWrite( 7, V0 );
              break;

            case 0x6B :  // 0x6B VENTOLA SX_3 DX_0 RISC Dx_2
              analogWrite( 6, V3 );
              analogWrite( 7, V0 );
              break;

            case 0x5B :  // 0x5B VENTOLA SX_3 DX_0 RISC Dx_1
              analogWrite( 6, V3 );
              analogWrite( 7, V0 );
              break;

            case 0xB0 :  // 0xB0 VENTOLA SX_0 DX_3
              analogWrite( 6, V0 );
              analogWrite( 7, V3 );
              break;

            case 0xB7 :  // 0xB7 VENTOLA SX_0 DX_3 RISC Sx_3
              analogWrite( 6, V0 );
              analogWrite( 7, V3 );
              break;

            case 0xB6 :  // 0xB6 VENTOLA SX_0 DX_3  RISC Sx_2
              analogWrite( 6, V0 );
              analogWrite( 7, V3 );
              break;

            case 0xB5 :  // 0xB5 VENTOLA SX_0 DX_3 RISC Sx_1
              analogWrite( 6, V0 );
              analogWrite( 7, V3 );
              break;

            case 0xBB : // 0xBB VENTOLA SX_3 DX_3
              analogWrite( 6, V3 );
              analogWrite( 7, V3 );
              break;

            case 0xBA :  // 0xBA VENTOLA SX_2 DX_3
              analogWrite( 6, V2 );
              analogWrite( 7, V3 );
              break;

            case 0xAB :  // 0xAB VENTOLA SX_3 DX_2
              analogWrite( 6, V3 );
              analogWrite( 7, V2 );
              break;

            case 0xA : // 0xA VENTOLA SX_2 DX_0
              analogWrite( 6, V2 );
              analogWrite( 7, V0 );
              break;

            case 0x7A :  // 0x7A VENTOLA SX_2 DX_0 RISC Dx_3
              analogWrite( 6, V2 );
              analogWrite( 7, V0 );
              break;

            case 0x6A :  // 0x6A VENTOLA SX_2 DX_0 RISC Dx_2
              analogWrite( 6, V2 );
              analogWrite( 7, V0 );
              break;

            case 0x5A :  // 0x5A VENTOLA SX_2 DX_0 RISC Dx_1
              analogWrite( 6, V2 );
              analogWrite( 7, V0 );
              break;

            case 0xA0 : // 0xA0 VENTOLA SX_0 DX_2
              analogWrite( 6, V0 );
              analogWrite( 7, V2 );
              break;

            case 0xA7 : // 0xA7 VENTOLA SX_0 DX_2 RISC Sx_3
              analogWrite( 6, V0 );
              analogWrite( 7, V2 );
              break;

            case 0xA6 : // 0xA6 VENTOLA SX_0 DX_2 RISC Sx_2
              analogWrite( 6, V0 );
              analogWrite( 7, V2 );
              break;

            case 0xA5 : // 0xA5 VENTOLA SX_0 DX_2 RISC Sx_1
              analogWrite( 6, V0 );
              analogWrite( 7, V2 );
              break;

            case 0xAA :  // 0xAA VENTOLA SX_2 DX_2
              analogWrite( 6, V2 );
              analogWrite( 7, V2 );
              break;

            case 0xA9 :  // 0xA9 VENTOLA SX_1 DX_2
              analogWrite( 6, V1 );
              analogWrite( 7, V2 );
              break;

            case 0x9A :  // 0x9A VENTOLA SX_2 DX_1
              analogWrite( 6, V2 );
              analogWrite( 7, V1 );
              break;

            case 0x99 : // 0x99 VENTOLA SX_1 DX_1
              analogWrite( 6, V1 );
              analogWrite( 7, V1 );
              break;

            case 0x90 :  // 0x90 VENTOLA SX_0 DX_1
              analogWrite( 6, V0 );
              analogWrite( 7, V1 );
              break;

            case 0x9 : // 0x9 VENTOLA SX_1 DX_0
              analogWrite( 6, V1 );
              analogWrite( 7, V0 );
              break;

            case 0x79 :  // 0x79 VENTOLA SX_1 DX_0 RISC Dx_3
              analogWrite( 6, V1 );
              analogWrite( 7, V0 );
              break;

            case 0x69 :  // 0x69 VENTOLA SX_1 DX_0 RISC Dx_2
              analogWrite( 6, V1 );
              analogWrite( 7, V0 );
              break;

            case 0x59 :  // 0x59 VENTOLA SX_1 DX_0 RISC Dx_1
              analogWrite( 6, V1 );
              analogWrite( 7, V0 );
              break;

            case 0x9B :  // 0x9B VENTOLA SX_3 DX_1
              analogWrite( 6, V3 );
              analogWrite( 7, V1 );
              break;

            case 0xB9 :  // 0xB9 VENTOLA SX_1 DX_3
              analogWrite( 6, V1 );
              analogWrite( 7, V3 );
              break;

            case 0x7 :  // 0x7 VENTOLA SX_0 DX_0 RISC SX_3 DX_0
              analogWrite( 6, V0 );
              analogWrite( 7, V0 );
              break;

            case 0x6 :  // 0x6 VENTOLA SX_0 DX_0 RISC SX_2 DX_0
              analogWrite( 6, V0 );
              analogWrite( 7, V0 );
              break;

            case 0x5 :  // 0x5 VENTOLA SX_0 DX_0 RISC SX_1 DX_0
              analogWrite( 6, V0 );
              analogWrite( 7, V0 );
              break;

            case 0x97 :  // 0x97 VENTOLA SX_0 DX_1
              analogWrite( 6, V0 );
              analogWrite( 7, V1 );
              break;

            case 0x70 :  // 0x70 VENTOLA SX_0 DX_0  RISC SX_0 DX_3
              analogWrite( 6, V0 );
              analogWrite( 7, V0 );
              break;

            case 0x60 :  // 0x60 VENTOLA SX_0 DX_0  RISC SX_0 DX_2
              analogWrite( 6, V0 );
              analogWrite( 7, V0 );
              break;

            case 0x50 :  // 0x50 VENTOLA SX_0 DX_0  RISC SX_0 DX_1
              analogWrite( 6, V0 );
              analogWrite( 7, V0 );
              break;

            default:
              break;
          }
          stato = 0;
        }
    }
  }
}