Servocomandi e pulsanti

Ciao, da molti esempi proposti non si impara il modo più efficiente di scrivere un programma.
Adesso dirti tutto quello che si può cambiare nel tuo programma diventa un po lunga, comunque i tuoi non sono errori è solo un modo di programmare non ottimale :slight_smile:

Ti do alcuni consigli

  1. Quando vuoi incrementare di uno il valore di una variabile, non scrivere variabile=++variabile, ma
    scrivi semplicemente variabile++;

  2. Non c'è bisogno di salvare il valore restituito da digitalRead() in una varibile, puoi usare direttamente
    digitalRead() in un if(), il valore che restituisce poi sarà valutato

  3. Arduino è velocissimo :slight_smile: quindi quando premi un pulsate lui leggerà tante volte lo stesso stato,
    per evitare ciò esistono diversi sistemi, in questo caso io userei un semplice delay() che attende
    che tu tolga il dito dal pulsante.

  4. Non c'è bisogno a mio avviso di controllare se stai premendo due pulsanti contemporaneamente, male che vada arduino eseguirà una delle due azioni in successione e non ci saranno grossi problemi.

Riordinando un po il tuo codice senza fargli troppe modifiche.

#include <Servo.h> 

//Dichiariamo le costanti e le variabili.
Servo myservoDx;//Impostiamo il servomotore con il nome myservoDx.

int Posizione_Servo=90;

void setup() {
  myservoDx.attach(3);//Impostiamo il pin 3 come pin pwm per il controllo del servomotore.
  pinMode(4, INPUT);//Impostiamo il pin 4 collegato al pulsante sinistro come ingresso.
  pinMode(5, INPUT);//Impostiamo il pin 5 collegato al pulsante destro come ingresso.
  myservoDx.write(Posizione_Servo);//Posiziona il servomotore ad ogni avvio nella posizione 0.
}
//Il programma si ripete in un loop infinito.
void loop() {
        
    
    
    if(digitalRead(4)){// Se pin pulsante è nello stato HIGH

        Posizione_Servo--; 
        mysevoDx.write(Posizione_Servo);
        delay(200); // Attendo che il dito si sposti dal pulsante

        // Tendendo premuto il pulsante incrementa con intervalli di 200 millisecondi
      
    }else if(digitalRead(5)){// Se pin pulsante è nello stato HIGH

        Posizione_Servo++; 
        mysevoDx.write(Posizione_Servo);
        delay(200); // Attendo che il dito si sposti dal pulsante

        // Tendendo premuto il pulsante incrementa con intervalli di 200 millisecondi
      
    }else if( digitalRead(6)){ // Se premo un pin specifico

         mysevoDx.write(90); // porto a posizione 90
          // se ho due servi copio la riga sopra con un nome diverso per il servo
        delay(200); // Attendo che il dito si sposti dal pulsante
  

    }

    
}