Merci pour vos réponses,
J'ai essayé de mettre un if (Serial.available()) avant le parseInt() dans les while et il n'y a que la led rouge qui s'allume tout au long de la prise de mesure et après, quelque soit la valeur de la variable.
J'ai également modifié ma partie loop comme ceci :
void loop() {
if (Serial.available()) {
nombre = Serial.parseInt();
if (nombre < 300) {digitalWrite(ledrouge,HIGH);
digitalWrite(ledverte,LOW);}
if (nombre >= 300) {digitalWrite(ledverte,HIGH);
digitalWrite(ledrouge,LOW);}
Serial.flush();
}
}
J'obtiens le même résultat qu'au début mais le code est effectivement allégé.
J'ai aussi passé le débit à 115200 mais je ne crois pas que modifier le port ai une influence sur le programme. Pour ce qui est de l'ordre de grandeur de la variable, il est grand car ma variable varie entre les valeurs 0 et 600.
Je pense que le problème vient peut-être de la valeur de la variable transmise à Arduino. A vrai dire, je n'ai pas compris pourquoi il fallait encoder la valeur en 'str' plutôt que de simplement envoyer la valeur flottante ou entière.