Como supones tenes que hacer un PWM por software, Ya hay varios temas hablando de esos, creo que una busqueda en el foro y vas a encontrar muchos.
Ahi vas tener que tener una base de tiempo como un timer y su correspondiente interrupcion.
Luego en tu programa principal si manejas tu teclado y las variables del pwm.
Cosas por la cual veo que tu programa no puede funcionar como queres:
Num=atoi(motor);
switch(motor){
"motor" en ese caso es un char... es decir una letra... pero una letra esta representada por 8 bits , es igual a un entero, por lo cual podes usarlo ahi... la instruccion de arriba no tiene sentido ya que no lo usarias.
El tema luego viene cuando haces:
case 1:
En donde 1, no es lo mismo que '1' , es decir 1 = 0x01 y '1' = 0x31 = 49, si pones case '1': ahi va a funcionar ya que compararia la salida del char motor ( en caso que se presione 1 este contiene un caracter '1' o valor 0x31 )
No hay un valor default, deberias ponerlo siempre.
Y pienso que esta linea es redundante que ya lo estaria haciendo el case '1', y ademas esta mal por lo mismo de arriba:
if(motor ==1)
Por otra parte una ves que entro a el
while(true){
NO sale mas. solo saldria si presionas RC1, por el break; lo cual faltaria nuevamente otro break; para el case. pero en caso de ir hacia la derecha se quedaria para siempre ahi. en caso de la izquierda haria un solo paso.
Esto si haces un PWM por soft con interrupciones te lo ahorrarias, ya que solo manejarias que cada ves que entre simplemente incremente en 5 por ejemplo la variable pwm1(correspondiente al motor1) y listo.
Ademas no tendrias ningun delay. Y estaria constantemente corriendo el PWM, sin necesidad de tu interaccion, y vos solo manejarias el duty por asi decirlo.