Sketch Movimento servo tramite pulsante (0->90°) e al rilascio ritorna a 0°

Salve a tutti! come dicevo sopra nel titolo mi servirebbe una funzione da inserire dentro un button nel loop che esegua questi movimenti: -Alla pressione di un pulsante faccia muovere un servo da un posizione 0°(Stato1) a 90°(stato2) -Al rilascio di tale pulsante faccia ritornare il servo da 90°(stato2) a 0° (stato2)

purtroppo non ho le conoscenze per scrivere uno sketch del genere visto che mi sono addentrato da poco in questo mondo!

Ringrazio in anticipo tutti!! e Buona giornata!

non credo riceverai risposta, al massimo si controllano scketch con errori ma non si scrivono da zero :wink:

Testato: al massimo si controllano scketch con errori ma non si scrivono da zero ;)

Possiamo istituire un servizio realizzazione sketch a pagamento con compenso versato, come donazione, a arduino.cc :)

ecco questa e' una bella idea :)

Ottima idea.

Vediamo come si potrebbe tariffare.

x centesimi/byte del file .hex

...

LOL

x centesimi / carattere ...

Cent * byte RAM ?

e' importante decidere, in modo che uno scrive lo sketch per occupare lo spazio target il piu' possibile :grinning:

Passiamo ora a dare qualche suggerimento per la richiesta iniziale. :D

Conviene agire per step successivi.

1 - impara a muovere il servo. Impara i comandi per posizionarlo ad un certo angolo x.

2 - crea un programma che quando premi un pulsante, porta il servo alla posizione x

3 - crea un programma che parte con il servo in posizione 0 e mentre tieni premuto un pulsante lo porta verso la posizione 90 ad una certa velocità, se rilasci il pulsante, il servo si ferma. Già qui è tutt'altro che banale. Infatti, come vedrai in 1 e 2, il servo ha una sua velocità. Se dai il comando per portarlo da 0 a 90, eseguirà lo spostamento con questa velocità. Ovvio che puoi solo rallentarlo. Ma come... ... suddividendo lo spostamento in spostamenti più piccoli e mettendo un ritardo fra gli spostamenti intermedi. Così durante questi intervalli potrai verificare se il pulsante è ancora premuto. Ma se usi il delay come fai a verificare... ops... ci vuole la tecnica del millis()... guarda un po' quanti suggerimenti. :grin:

4 - a questo punto ti verrà semplice fare in modo che quando rilasci il pulsante, il servo invece di fermarsi venga riportato alla posizione 0.

Grazie per le burlonate dell’inzio, ma soprattuto per la lista di consigli dati che mi hanno portato ad un risultato ottimale!
Grazie ancora e buona giornata

Ehm… mi sono imbattuto in un’altro problemino…

questo codice fa muovere i servi di 90 gradi a pressione e se non premo non succede nulla…
Come potrei fare per fare in modo che premuto memorizzi la posizione ed dopo una seconda pressione torni alla posizione primaria?

  //BOTTONI REACT
    //BOTTONE 1
  if (buttonState1 == HIGH) {
    Serial.println("non va un cazzo1");
    for (pos1 = 0; pos1 <= 90; pos1 += 1) // goes from 0 degrees to 90 degrees
    { // in steps of 1 degree
      int    pos1 = 90;
      myservo1.write(pos1);              // tell servo to go to position in variable 'pos'
      delay(15);                       // waits 15ms for the servo to reach the position
    }
  }
  else {
    for (pos1 = 90; pos1 >= 0; pos1 -= 1);
    myservo1.write(pos1);              // tell servo to go to position in variable 'pos'
    delay(15);// waits 15ms for the servo to reach the position
  }
  //BOTTONE 2
  if (buttonState2 == HIGH) {
    Serial.println("non va un cazzo2");
    for (pos2 = 0; pos2 <= 90; pos2 += 1) // goes from 0 degrees to 90 degrees
    { // in steps of 1 degree
      int    pos2 = 90;
      myservo2.write(pos2);              // tell servo to go to position in variable 'pos'
      delay(15);                       // waits 15ms for the servo to reach the position
    }
  }
  else {
    for (pos2 = 90; pos2 >= 0; pos2 -= 1);
    myservo2.write(pos2);              // tell servo to go to position in variable 'pos'
    delay(15);// waits 15ms for the servo to reach the position
  }

  //BOTTONE 3
  if (buttonState3 == HIGH) {
    Serial.println("non va un cazzo3");
    for (pos3 = 0; pos3 <= 90; pos3 += 1) // goes from 0 degrees to 90 degrees
    { // in steps of 1 degree
      int    pos3 = 90;
      myservo3.write(pos3);              // tell servo to go to position in variable 'pos'
      delay(15);
    }

  }
  else {
    for (pos3 = 90; pos3 >= 0; pos3 -= 1);
    myservo3.write(pos3);              // tell servo to go to position in variable 'pos'
    delay(15);// waits 15ms for the servo to reach the position
  }
  //BOTTONE 4
  if (buttonState4 == HIGH) {
    Serial.println("non va un cazzo4");
    for (pos4 = 0; pos4 <= 90; pos4 += 1) // goes from 0 degrees to 90 degrees
    { // in steps of 1 degree
      int    pos4 = 90;
      myservo4.write(pos4);              // tell servo to go to position in variable 'pos'
      delay(15);                       // waits 15ms for the servo to reach the position
    }

  }
  else {
    for (pos4 = 90; pos4 >= 0; pos4 -= 1);
    myservo4.write(pos4);              // tell servo to go to position in variable 'pos'
    delay(15);

  }

Grazie in anticipo

Bello questo sistema di debug...

Serial.println("non va un cazzo1");

Ehm… perdonami mi sono dimenticato di cambiare quella parte…

nei for dove vai da 0 verso 90° setti poi a 90° la posizione internamente al for, quindi il for stesso non serve. Quei for servono per poter regolare la velocita', se a te serve arrivare a 90° a massima velocita', ed a 0° a massima velocita' allora puoi togliere tutti i for

per il discorso della doppia pressione devi creare un contatore sulla pressione del tasto, in modo che solo quando e' a 1 vai a 90° e ci resti anche se lasci il pulsante, quando e' a 2 (hai contato due volte la pressione del tasto) va a 0° ed azzeri la variabile contatore