Unire sketch per servomotori

Buongiorno, sto lavorando per un progetto con Arduino UNO, devo creare un braccio meccanico con diversi servomotori da 13 Kg. L’idea era quella di realizzare un braccio meccanico che potesse essere comandato in tre diversi modi premendo tre diversi pulsanti, uno per ogni modo(se in tre modi è troppo complicato, almeno due se fattibile), ora mi spiego meglio.
modo 1 : attraverso un comando bluetooth con smartphone
modo 2 : attraverso dei potenziometri
modo 3 : il braccio meccanico esegue sempre lo stesso movimento “all’infinito” (spostare un oggetto).
Premetto che i tre sketch li ho già, anche tutte le varie parti ecc… Il mio problema è questo dunque: come fare a dire ad Arduino che se premo un pulsante deve eseguirmi un certo sketch, se ne premo un altro deve eseguire un altro sketch e stesso discorso per il terzo sketch. Mi basta una sola scheda di Arduino UNO? Come faccio a mettere tutto in un unico sketch? Grazie mille in anticipo :slight_smile:

Come già spiegato ogni pulsante deve riprodurre uno sketch, ma non so come inserire i tre pulsanti per unire tutto il programma. Sul web non ce nulla di simile a parte i soliti led comandati da un pulsante. Se mi dareste una mano ne sarei davvero grato. Grazie in anticipo a chiunque mi darà una mano. Di seguito gli sketch

1° pulsante

#include <Servo.h>
 Servo mioservo1;
Servo mioservo2;
void setup() {
   mioservo1.attach(9); 
  mioservo2.attach(10); }
  void loop() {
  mioservo1.write(180);
   delay(1000);
   mioservo2.write(170);
   delay(1000);
   mioservo1.write(150);
   delay(1000);
   mioservo2.write(20);
   delay(1000);
   }



 2° pulsante

#include <SoftwareSerial.h>   
#include <Servo.h> 
Servo mioservo1, mioservo2; 
int bluetoothTx = 11; 
int bluetoothRx = 12; 
SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);
void setup()
{  mioservo1.attach(9); 
  mioservo2.attach(10);
   Serial.begin(9600);
  bluetooth.begin(9600);  }
void loop()
{  if(bluetooth.available()>= 2 )
  {  unsigned int servopos = bluetooth.read();
    unsigned int servopos1 = bluetooth.read();
    unsigned int realservo = (servopos1 *256) + servopos;
    Serial.println(realservo);
  if (realservo >= 1000 && realservo <1180) {
      int servo1 = realservo;
      servo1 = map(servo1, 1000, 1180, 0, 180);
      mioservo1.write(servo1);
      Serial.println("Servo 1 ON");
      delay(10);    }
     if (realservo >= 2000 && realservo <2180) {
      int servo2 = realservo;
      servo2 = map(servo2, 2000, 2180, 0, 180);
      mioservo2.write(servo2);
      Serial.println("Servo 2 ON");

      delay(10);    }    }    }



 3°  pulsante

#include <servo.h>;
 Servo mioservo1;
Servo mioservo2;
const int pot1 = A0;
const int pot2 = A1;
void setup() {
   mioservo1.attach(9);
    mioservo2.attach(10);
     pinMode(pot1, INPUT);
    pinMode(pot2, INPUT);
    }
 void loop() {
    mioservo1.write( map(analogRead(pot1), 0, 1023, 0, 179) );
    mioservo2.write( map(analogRead(pot2), 0, 1023, 0, 179) );
}

Buona sera,
essendo il tuo primo post, nel rispetto del regolamento (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie.

Guglielmo

P.S.: Qui una serie di link utili, NON necessariamente inerenti alla tua domanda:
- serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections
- pinout delle varie schede by xxxPighi: Pinout
- link generali utili: Link Utili

Ok mi sono presentato, scusatemi ma non trovo nulla inerente al mio problema

Marco99:
... Il mio problema è questo dunque: come fare a dire ad Arduino che se premo un pulsante deve eseguirmi un certo sketch, se ne premo un altro deve eseguire un altro sketch e stesso discorso per il terzo sketch. Mi basta una sola scheda di Arduino UNO? Come faccio a mettere tutto in un unico sketch? Grazie mille in anticipo :slight_smile:

Facile da fare, difficile da spiegare.

Innanzitutto devi uniformare le variabili in modo da poter avere un unico void setup() ed una unica impostazione delle variabili globali e delle direttive del compilatore come gli include.

Per maggiore eleganza ma anche per avere un codice più compatto, sarebbe meglio ove possibile creare delle funzioni per quelle operazioni che sono in comune fra i tre programmi, in modo da evitare inutili ripetizioni degli stessi blocchi di codice.

Crei tre loop nei quali metti quello che c'era nei void loop dei tre programmi di partenza, richiamando ove servissero le funzioni create precedentemente.

Fatto questo, nel void loop metti una lettura dei pulsanti, a seconda di quale pulsante è premuto, richiami uno dei tre loop che contengono i tre programmi di partenza.

Se vuoi poter passare dall'uno all'altro, puoi inserire nei tre loop la lettura dei pulsanti.

> Marco99: … ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post qui sopra (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More → Modify che si trova in basso a destra del tuo post) e racchiudere il codice all’interno dei tag CODE (… sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra). Grazie.

Guglielmo

ok fatto scusatemi

Marco99:
ok fatto scusatemi

emmmm … veramente NON c’è più il tuo post … cosa hai fatto ? Invece di editarlo e mettere il codice tra i tag CODE lo hai eliminato ? ? ? :o :o :o

Guglielmo

Ho scritto tutto nel primo post dall'inizio. Qualcuno puo aiutarmi? Grazie

aiutarti non è facile, dovresti studiare come prima cosa come è strutturato un programma per arduino, in linea di massima all'inizio del programma definisci le variabili globali che ti servono in tutto il listato, poi specifichi le librerie che devi usare, si impostano i vari pin e i parametri richiesti dalle librerie con void setup, e infine il void loop che è il ciclo principale, da qui devi monitorare i pulsanti e quando viene premuto uno dirotti il flusso del programma in altre void con le funzioni che vuoi ottenere, una volta terminato ritori nel loop principale in attesa di altri input.....

Prova a fare diversi void