[SOLUCIONADO]Aumentar frecuencia en PWM desde Serial

Buenas encontré este código en Internet para una PWM con librería PWM.

#include <PWM.h>

int32_t frequency = 10;                       //Frecuencia en Hertz (HZ)

char dato;


void setup()
{
  Serial.begin(57600);

  InitTimersSafe();
  bool success = SetPinFrequencySafe(9, frequency);   //Pin de salida

}

void loop()
{
  int Duty = 129;                                   //duty 50%
  pwmWrite(9, Duty);

  if (Serial.available())
  {
    dato = Serial.read();
  }
  switch (dato) {

    case 'a':                       // Con a aumentamos 10hz la frecuencia
      
      break;

    case 'b':                    // Con b disminuimos 10hz la frecuencia

      break;

  }
}

Lo que me gustaría hacer es, desde el puerto serie enviar un carácter y que valla aumente o disminuya la frecuencia de 10Hz en 10Hz.

Po otra parte esta parte del código no la entiendo, porque pone 129 para tener un Duty del 50%

 int Duty = 129;                                   //duty 50%
  pwmWrite(9, Duty);

El valor para duty va de 0 (0%) a 255 (100%), el 50% teóricamente sería 128.
Tal vez, el autor, determinó experimentalmente que 129 es el valor más adecuado.

Para la frec. crea una variable que incrementas o decrementas según la tecla pulsada.

Gracias gatul por la explicación.

Voy hacer lo de la variable y comento.

Buenas, hice este código, que probé y funciona, aunque no del todo bien, si por el serial mando el comando algunas veces me suma 20 en vez de 10 igual si mando el comando dos veces me suma 30 en vez de 20.

#include <PWM.h>

int freq = 10;                                //Frecuencia en Hertz (HZ)
int duty = 128;                               //duty 50%

char dato;


void setup()
{
  Serial.begin(57600);
  InitTimersSafe();

}

void loop()
{

  if (Serial.available())
  {
    dato = Serial.read();
  }
  switch (dato) {

    case 'a':                       // Con a aumentamos 10hz la frecuencia
      freq = freq + 10;
      break;

    case 'b':                    // Con b disminuimos 10hz la frecuencia
      freq = freq - 10;
      break;
  }

  pwmWrite(9, duty);
  SetPinFrequencySafe (9, freq);
}

Prueba agregando

dato = ' ' ;   // (un espacio)  *** agrega esta línea solamente, la de abajo es de referencia

pwmWrite(9, duty);

para "borrar" el valor de dato al salir del switch().

Gracias gatul

Lo he colocado asin que es como mejor me ha funcionado.

 if (Serial.available())
  {
    dato = Serial.read();
  }
  switch (dato) {

    case 'a':                       // Con a aumentamos 10hz la frecuencia
      freq = freq + 10;
      dato = '  ' ;
      break;

    case 'b':                    // Con b disminuimos 10hz la frecuencia
      freq = freq - 10;
      dato = '  ' ;
      break;
  }