Capturar 3 variables en arduino enviadas desde java.

Buenas a todos.

Disculpen la molestia, estoy trabajando en un proyecto en el cual activo y desactivo 3 motores, pero a la ves quiero aumentar la velocidad de estos con pwm, estoy haciendo una interfaz en java en la cual por medio d eun boton mando un entero a arduino y entro a un case para activar o desactivar un motor, lo que no entiendo es como le puedo hacer para que a la ves pueda aumentar la frecuencia del pwm.

Este es mi codigo:

//Control de Motores 
int contrarioPin=12;
int girarPin=11;  //Pines de salida del arduino
int derechaPin=10;
int izquierdaPin=9;
int arribaPin=8;
int abajoPin=7;
int input=0;

void setup(){ //asiganamos las salida y establecemos la conexion serial
Serial.begin(9600);
pinMode(contrarioPin, OUTPUT);
pinMode(girarPin, OUTPUT);
pinMode(derechaPin, OUTPUT);
pinMode(izquierdaPin, OUTPUT);
pinMode(arribaPin, OUTPUT);
pinMode(abajoPin, OUTPUT);
}

void loop(){
if (Serial.available()>=0){
  input=Serial.read();
switch (input) {
  
    case '1'://el motor gira en un sentido
     digitalWrite(girarPin,HIGH); 
      digitalWrite(contrarioPin,LOW); 
      /////////////////////////
      digitalWrite(derechaPin,LOW); 
      digitalWrite(izquierdaPin,LOW);
      digitalWrite(abajoPin,LOW);
      digitalWrite(arribaPin,LOW);
   
     
      break;
      
    case '2'://sube el gancho
      digitalWrite(arribaPin,HIGH); 
      digitalWrite(abajoPin,LOW); 
      ////////////////////////////////
      digitalWrite(derechaPin,LOW); 
      digitalWrite(izquierdaPin,LOW);
      digitalWrite(contrarioPin,LOW);
     digitalWrite(girarPin,LOW);  
      break;
      
      case '3'://baja el gancho
      digitalWrite(arribaPin,LOW); 
      digitalWrite(abajoPin,HIGH);
      ///////////////////////////
      digitalWrite(derechaPin,LOW); 
      digitalWrite(izquierdaPin,LOW);
      digitalWrite(contrarioPin,LOW);
     digitalWrite(girarPin,LOW);  
      break;
      
      case '4'://avanza el carro a la derecha
      digitalWrite(derechaPin,HIGH); 
      digitalWrite(izquierdaPin,LOW);
      /////////////////////////////
      digitalWrite(abajoPin,LOW);
      digitalWrite(arribaPin,LOW);
      digitalWrite(contrarioPin,LOW);
     digitalWrite(girarPin,LOW);  
      break;
      
      case '5'://avanza el carro a la izquierda
       digitalWrite(derechaPin,LOW); 
      digitalWrite(izquierdaPin,HIGH);
      ////////////////////////////////////
      digitalWrite(abajoPin,LOW);
      digitalWrite(arribaPin,LOW);
      digitalWrite(contrarioPin,LOW);
     digitalWrite(girarPin,LOW);  
      break;
      
      case '0': //apaga los motores
      digitalWrite(derechaPin,LOW); 
      digitalWrite(izquierdaPin,LOW);
      digitalWrite(abajoPin,LOW);
      digitalWrite(arribaPin,LOW);
      digitalWrite(contrarioPin,LOW);
     digitalWrite(girarPin,LOW);  
      break;
      
    default:
   break; 
      // if nothing else matches, do the default
      // default is optional
  }//switch
delay(10);
}//if principal
}//loop

Gracias por su atencion.

puedes añadir a la interfaz un control un slider con valores minValue 0 y maxValue 255 si quieres todos los rangos( o los que tu prefieras) y en el evento que se produce al cambiar la posicion del slider mandar el valor a arduino,pero tal como tienes ahora el if ,solo te coge un caracter por loop y el slider te va mandar valores de 0 a 255,aunque tambien puedes poner letras y no modificar el if y abarcar varios valores,por ej. cuando se reciba la l de low pues el pwm de 80 a 100,la m de medium de 130 a 150 y la h de high de 230 a 255 por ejemplo.
Me da por el codigo que veo que estas controlando los motores directamente con los pines del arduino invirtiendo las señales para hacer los cambios de sentido...si es asi tienes todos los numeros para cargarte algo,deberias usar un integrado l293d o similar que ademas tiene entrada pwm para hacer lo que quieres. por cierto deberias la cambiar la condicion del if :
if (Serial.available()>=0){ por if (Serial.available()>0){ o bien if (Serial.available()){
ya que la condicion se cumple para mayor de 0 pero no deberia cumplirse si es = 0 o la ultima opcion que devuelve true si hay datos disponibles.Si quieres recoger mas de un caracter en el una misma iteracion del loop: while(Serial.available() >0){

Programarlo para arduino.

Recibe cadena de carácteres desde Java o otros programa.

char caracter;
String comando;

void setup(){
	Serial.begin(9600);
}

void loop(){
  while (Serial.available()>0){
    caracter= Serial.read();
    comando.concat(caracter);
    delay(10);
  }
  if (comando.equals("hola") == true){
        Serial.println("El comando es hola");
  }      
  if (comando.equals("adiós")== true){
        Serial.println("El comando es adiós");
  }  
  comando="";
}

Saludo.