Sincronizzare 2 servomotori

Buon giorno come da titolo dovrei sincronizzare due servomotori, mi spiego meglio la sequenza dovrebbe essere: 1servo parte da 0 arriva a 180, si ferma parte secondo servo fa una serie ripetuta di cicli alla fine del contatore si ferma e il servo 1 torna a 0 sosta 2 secondi e riparte ciclo, i due servo separatamente fatto cosa serve ma incastrale le due operazioni sono in alto mare non riesco trovare la funzione ideale, c'è chi mi può mettere in strada per la soluzione? grazie

Intanto metti qui il codice che hai prodotto e il tentativo di unire i due programmi spiegando cosa non funziona, così possiamo aiutarti a completare il lavoro

al momento o fatto separatamente le due funzioni uno classico che va da 0 a 180 con un tempo di sosta ai due punti da arrivo, il secondo fa il suo ciclo di cinque volte da 0 a 50 gradi poi si ferma il problema è che funzione usare per fermare il primo e fare partire il secondo che funzione usare

Senza vedere il codice si può solo sparare a caso...
Hai provato banalmente a mettere in sequenza i 2 codici? Adeguando eventualmente i pin.

Sono tornato perso un po di tempo con altro, provo caricare cosa sono riuscito a combinare

/* Descrizione funzionamento
 *  il servo uno deve partire da 0 e arrivare a 180, fermarsi
 *  il servo due deve effetuare una sequenza di 5 movimeni 0 60,fermarsi 
 *  il servo uno riparte arriva 0 sosta un secondo, parte
 *  questo dovrebbe essere il ciclo della routine
 */
#include <Servo.h>

Servo Servo1;
Servo Servo2;

int pos = 0;

void setup() {
   Servo1.attach ( 9 ); //servo1 rotazione
   Servo2.attach ( 11 ); //servo2 battito

   pinMode ( 9, OUTPUT );
   pinMode ( 11, OUTPUT );


   Serial.begin ( 9600 ); //ciclo loop battito

   Serial.println ( "WHILE - uso di break " ); //ferma ciclo servo1
   int i = 0;
   while ( i < 10 ) {
      Serial.print ( "i: " );
      Serial.println ( i );
      if ( i == 5 ) break;
      i++;
   }
   Serial.print ( "uscito con i: " );
   Serial.println ( i );

   i = 0; //azzerato contatore
   Serial.print ( "WHILE - uso continue " );
   while ( i < 10 ) {
      if ( i == 5 ) {
         i++;
         continue;
      }
      Serial.print ( "i: " );
      Serial.println ( i );
      i++;
   }

}

void servo1 ( int pin, 9 ) {
   for ( int i = 0; i < 180; i++ );
   Servo1.write ( i );
   for ( int i = 180; break );
   for ( Servo2 = 0; continue );
}

for ( int i = 180; i > 0 i -- ) {
   delay ( 1000 );
}
void Servo2 ( int pin, 11 ) {
   for ( int a = 0; a < 60; a++ );
   Servo2.write ( i );
   delay ( 50 );
}
for ( int a = 60 > 0; a-- ) {
   Servo2.write ( i );
   for ( Servo2, ( a = 0 ), Servo2, continue );
   delay ( 50 );
}

Non dovrei nemmeno risponderti, perché non hai racchiuso il codice tra i tag code
E non hai formattato

Ma quello che hai scritto è senza senso
Fai di gran lunga più bella figura a cancellarlo , studiare il problema ed il linguaggio e poi scrivere di nuovo
Questa volta ben formattato e tra i giusti tag

A proposito: impara anche a leggere l'output del compilatore, il programma che hai messo non compila

grazie

Posta i due codici funzionanti (racchiusi nei tag codice). Usa anche Ctrl+T nell'IDE
Poi passiamo aiutarti a metterli insieme.
L'ultima cosa che hai postato è un pasticcio.

Come ti è stato già segnalato ... ... fosse anche per una sola riga, come richiesto al punto 7 del REGOLAMENTO, il codice va racchiuso tra i tag CODE, per cui, cortesemente edita il tuo post qui sopra (quindi NON scrivendo un nuovo post, ma utilizzando il bottone a forma di piccola matita :pencil2: che si trova in basso del tuo post), seleziona la parte di codice e premi l'icona <code/> nella barra degli strumenti per contrassegnarla come codice. Inoltre, così com'è, non è molto leggibile ... assicurati di averlo correttamente indentato nell'IDE prima di inserirlo (questo lo si fa premendo ctrlT su un PC o cmd T su un Mac, sempre all'interno del IDE).

Grazie,

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà sistemato il codice come indicato, nel rispetto del regolamento nessuno ti risponderà (eventuali risposte o tuoi ulteriori post, verrebbero temporaneamente nascosti), quindi ti consiglio di farlo al più presto. :wink:

Ok grazie per la descrizione domani ci provo

Buon giorno come consigliato allego codice fino a dove sono riuscito, vediamo se si riesce a cucire il tutto

/*funzionamento
* primo servomotore parte da "0" arriva a "180" si ferma
* secondo servomotore comincia un ciclo di 5 loop da "0 a 50" si ferma e fa ripartire
* servo1 fino a "0" pausa di 2 secondi, rilarte loop
*/

#include <Servo.h>

Servo Servo1;
Servo Servo2;

int pos = 0; //posizione di partenza

void setup() {
Servo1.attach(9); //pin di collegamento
Servo2.attach(11);
}

void loop() {
for (pos = 0; pos <= 180; pos += 1) { //partenza servo1
Servo1.write(pos);
delay(15); //qui dovrebbe fermare il ciclo
}
for (pos = 180; pos >= 0; pos -= 1) { //riparte servo 1 dopo la sequenza di servo2
Servo1.write(pos);
delay(2000);
}

void loop(){
for (pos = 0; pos <= 50; pos += 1){ //inizia il ciclo servo2
Servo2.write(pos);
delay(30);
}
for (pos = 50; pos >= 0
}
}

P:S: Vediamo se a questo giro o fatto meno pasticci del solito😌

Spezza la prima loop() in due, e dagli 2 nomi utili, esempio Servo1Avanti() e Servo1Indietro()
Anche la loop() del servo 2 dagli un nome diverso da loop() esempio Servo2Sequenza()

void Servo1_Avanti()
{ for (pos = 0; pos <= 180; pos++)  
  { Servo1.write(pos);
    delay(15);  // a che serve ?!?
  }
}

void Servo1_Indietro()
{ for (pos = 180; pos >= 0; pos--) 
  { Servo1.write(pos);
    // delay(15);  // e qui non serve ?!?
  }
}

void Servo2_Sequenza()
{ for (pos = 0; pos <= 50; pos++)
  { Servo2.write(pos);
    delay(30);            // a che serve ? su servo1 pausa 15 qui 30 ??
  }
  ...  // boh non si capisce che deve fare di preciso Sevo2
}

Ora hai delle funzioni/comandi che puoi chiamare nel loop() (non ho capito le pause che vuoi fare con delay, dove e quanto lunghe, io ho messo 2 secondi per ogni sequenza)

void loop() 
{
  Servo1_Avanti();          //partenza servo1
  delay(2000);              //qui dovrebbe fermare il ciclo
  Servo2_Sequenza();        //inizia il ciclo servo2
  delay(2000);
  Servo1_Indietro();        //riparte servo 1 dopo la sequenza di servo2
  delay(2000);
}

P.S. cancella il post#5 tanto è solo un pasticcio

Emmm ... ma lo avevi letto CON ATTENZIONE il mio post #9 ?

devi EDITARE il post ORIGINALE non scriverne altri ... grazie.

Guglielmo

Guglielmo in nuovo post lo scritto perche mi era stato detto che non era recuperabile per niente ora o pubblicato anche il vecchio post, dal secondo mi sono arrivate informazioni interessanti.
P:S: tento di fare meno pasticci un futuro :shushing_face:

... NON ci capiamo ... il tuo primo post contiene del codice che NON è messo come si deve. Che esso sia corretto o sbagliato NON mi interessa, mi interessa invece che esso sia marcato come codice come hai fatto in seguito ... è quello che sto aspettando che tu faccia ... :roll_eyes:

Grazie.

Guglielmo

Guglielmo sono riuscito a sistemare? ora lo posso cancellare che non serve a nulla?
grazie

Sembra che possa funzionare solo che devo collegare servo2 al contatore per fermare dopo il ciclo, ti spiego la funzione reale, sono due statue per presepe, la prima è sulla fucina si gira e va all'incudine e li parte il 2 che martella dopo 5 martellate si ferma e uno torna alla fucina e via di seguito, (e questo è solo l'inizio)

... scusa, guarda il tuo post #5 ... ti sembra sistemato come ti ho chiesto di fare?

Prova a rileggere quanto ho scritto a post #9 ... :roll_eyes:

Guglielmo

Buon giorno, o seguito le istruzioni che mi erano state segnalate ma quando premevo il comando "Crtl e t mi apriva un altra pagina invece di modificare cosa avevo pubblicato, considerando che la prima pagina di programma non era utilizzabile lo cancellata non credevo fosse cosi grave buttare una cosa che non serviva, va be pazienza è andata cosi, lezione per la prossima volta buona giornata e buon lavoro

Ma perché NON leggete mai con attenzione quello che uno vi scrive ... :roll_eyes:

... NELL'IDE va fatto il ctrlT NELL'IDE non nel browser !!!

Ecco ... l'ho fatto io ... altrimenti non ne usciamo più fuori ... :grimacing:

Guglielmo