Problema controllo Arduino da pc

Salve a tutti sto lavorando a un progetto con Arduino e Processing nel quale voglio controllare un motore e un servo tramite la tastiera del pc; ma, nel momento in cui faccio partire il programma in Processing su arduino si accende il led RX ma non succede nulla se io premo i tasti sulla tastiera. il circuito è funzionante in quanto al momento dell'avvio di Arduino il servo si posiziona alla posizione scritta nel setup... vi lascio qua sotto i due codici nella speranza che possiate aiutarmi

codice Arduino

#include <Servo.h>
Servo myservo;
const int motorpin= 2;
int incomingcommand;
void setup(){
  sterzo.attach(39);
  pinMode(motorpin, OUTPUT);
  Serial.begin(9600);
  myservo.write(90);
}
void loop(){
  if(Serial.available()>0){
    incomingcommand=Serial.read();
      if(incomingcommand=='0'){
      digitalWrite(motorpin, LOW);
      }
      if(incomingcommand=='1'){
      digitalWrite(motorpin, HIGH);
      }
      if(incomingcommand=='2'){
      myservo.write(45);
      }
      if(incomingcommand=='3'){
      sterzo.write(135);
      }
      if(incomingcommand=='4'){
      digitalWrite(motorpin, HIGH);
      myservo.write(45);
      }
      if(incomingcommand=='5'){
      digitalWrite(motorpin, HIGH);
      myservo.write(135);
      }
    }
    delay(1);
  }

codice Processing

import processing.serial.*;
Serial myport;
char command='0';
char incomingcommand;
void setup(){
 myport=new Serial(this, "COM40", 9600);
}
void draw(){
  myport.write(command);
}
void keyPressed(){
    if(key == 'w'){
    command=1;
    }
    if(key=='s'){
    command=0;
    }
    if(key=='q'){
    command=2;
    }
    if(key=='e'){
    command='3';
    }
    if(key=='a'){
    command='4';
    }
    if(key=='d'){
    command='5';
    }
   }

cosa significa

sterzo.attach(39);

non dovrebbe essere

myservo.attach(39);

Ciao Uwe

E comunque quando dichiari la variabile sterzo?

la variabile myservo è sterzo cambiata di nome (pensavo fosse più facile da capire) mentre il myservo.attach(39) è un errore di copiatura ecco il codice arduino corretto

#include <Servo.h>
Servo sterzo;
const int motorpin= 2;
int incomingcommand;
void setup(){
  sterzo.attach(9);
  pinMode(motorpin, OUTPUT);
  Serial.begin(9600);
  sterzo.write(90);
}
void loop(){
  if(Serial.available()>0){
    incomingcommand=Serial.read();
      if(incomingcommand=='0'){
      digitalWrite(motorpin, LOW);
      }
      if(incomingcommand=='1'){
      digitalWrite(motorpin, HIGH);
      }
      if(incomingcommand=='2'){
      sterzo.write(45);
      }
      if(incomingcommand=='3'){
      sterzo.write(135);
      }
      if(incomingcommand=='4'){
      digitalWrite(motorpin, HIGH);
      sterzo.write(45);
      }
      if(incomingcommand=='5'){
      digitalWrite(motorpin, HIGH);
      sterzo.write(135);
      }
    }
    delay(1);
  }

p.s. mi scuso per la risposta data dopo giorni

Premetto che non conosco "Processing", ma per analogia con altri linguaggi faccio alcune osservazioni:

Riferendomi al codice Processing
All'inizio definisci "char command='0';" quindi alla variabile command associ un carattere ASCII (codice 48 o 0x30),
poi nell'associare i tasti ai rispettivi comandi usi "char command=1;" che rappresenta un valore numerico (codice 1 o 0x01)
Non vedo alcun richiamo a "void draw()" per inviare effettivamente il comando alla seriale.

Riferendomi al codice arduino Arduino
Qui ritorni a parlare di caratteri ASCII "if(incomingcommand=='0')"
Credo che stai facendo confusione tra caratteri ASCII ( '0' , '1' , '2', ecc.) e codice numerico (0-255 o 0x00 - 0xFF).

Più che altro anche all interno dello sketch passi da command = 0 a command = "5" ma il valore che scrivi cambia

una volta messo a posto gli sketch come ti hanno detto,
se per caso hai un arduino Mega, in questo caso
non può funzionare se non metti un delay di 2 secondi nel setup.

void setup(){
 myport=new Serial(this, "COM40", 9600);
delay (2000);
}

Dopo aver sistemato i codici come suggerito ed aver inserito un println(command) in processing per verificare dalla console se processing trasformava correttamente i dati i risultati sono i seguenti:
-dalla console si possono vedere i comandi interpretati correttamente da processing
-il led rx di arduino che lampeggia
-il Servo che non si sistema nella posizione indicata nel setup()
-quando premo dei tasti non accade nulla oltre ai numeri che cambiano nella console di processing
(non uso una Arduino mega ma una Uno perciò non credo che serva il delay)

grazie per l'aiuto che mi state dando!

il tuo sketch completato con le apici mancanti
lo ho provato ora con il mega e funziona,
controlla i collegamenti
motorpin, high oppure low non fanno nulla
i tasti q e a fanno la stessa cosa.
i tasti a e d fanno la stessa cosa.

all'avvio il servo si mette in posizione

risolto il problema: bastava cambiare pin
con i pin 2 e 3 nonostante siano funzionanti il motore non girava e il servo non rispondeva ai comandi
utilizzando i pin 8 e 9 funziona tutto, grazie per il supporto fornito XD

Ancora una cosa: per un consiglio sul circuito che controlla il motore posso chiedere qua o devo spostarmi in un altra sezione?