Utilizzare funzioni esterne


ciao ragazzi!
per il mio progettino in cui utilizzo il braccio tinkerkit, sto provando ad utilizzare le funzioni esterne;
dovrebbe funzionare così nei mie pensieri:

il robot fa determinati movimenti in base al proximity che viene attivato, al momento per la prova uso un solo proximity.

lo sketch viene caricato senza problemi, ma all'attivazione del proximity il braccio non si muove

code: [select]
#include <braccio.h>
#include <servo.h>

int releout = 11;         //definisco variabile per relè.
int prox1 = 26;         //definisco variabile per proximity1.
int prox2 = 28;         //definisco variabile per proximity2.

servo base;               //m1   definisco il nome del servo.
servo shoulder;           //m2   definisco il nome del servo.
servo elbow;              //m3   definisco il nome del servo.
servo wrist_rot;          //m4   definisco il nome del servo.
servo wrist_ver;          //m5   definisco il nome del servo.
servo gripper;            //m6   definisco il nome del servo al momento non utilizzato.

void setup()
{
  ///////////////////////////////////////////////imposto pin in modalità ingresso.///////////////////////////////////////////////
 
  braccio.begin();          // inizializzo la comunicazione del braccio.
  serial.begin(9600);       // inizializzo la comunicazione seriale.
 
  pinmode(releout, output);
  pinmode(26, input);
  pinmode(28, input);

}


void f151()
{
   prox1 = high;     
   braccio.servomovement(25,   0, 100, 170, 30, 40, 0);  //posizione 1 (20= delay step, m1, m2, m3, m4, m5, m6)
             delay(2500);
   braccio.servomovement(25,   0, 100, 170, 30, 40, 0);  //posizione 1 (20= delay step, m1, m2, m3, m4, m5, m6)
             delay(2500);           
}

void loop()
{
  f151();
   
}

mi pare stai facendo un pò di confusione. non conosco tinkerkit ne la libreria braccio, ma:

prima di tutto le funzioni esterne (extern) sono un cosa ben precisa in linguaggio c. confermaci che per funzione esterna tu intendi quella funzione void di nome f151() dove il codice "sta fuori" dalla loop().
se così è, allora prova mettere quello che c'e' dentro alla f151 dentro la loop e se non funzionava prima vedrai che non funzionerà comunque, quindi il fatto che hai "spezzato" il programma con una funzione esterna non c'entra nulla.

secondo, se definisci pin usando:
code: [select]
const byte releout = 11;         //definisco variabile per relè.
const byte prox1 = 26;         //definisco variabile per proximity1.
const byte prox2 = 28;         //definisco variabile per proximity2.

usale ovunque, se fai    pinmode(releout,output);   fai anche pinmode(prox1,input);

e inoltre meglio se le dichiari byte e soprattutto const, così vedrai che il programma in compilazione ti da giustamente un bel errore.   dove ?  quando fai prox1=high;   ovvero che senso ha quella istruzione ? nessuna. assegni prox1 (che vale 26) il valore high, ovvero 1.

se di un pin vuoi sapere se è high o low allora devi leggerlo con valore=digitalread(prox1);
presumo che tu vuoi condizionare il movimento quindi presumo che se sul pin 26 ovvero prox1 c'e' high solo allora muovi, quindi:
code: [select]
void f151()
{ if( digitalread(prox1)==high)  // leggo lo stato del pin indicato da prox1
  { braccio.servomovement(25,   0, 100, 170, 30, 40, 0);
     delay(2500);
     braccio.servomovement(25,   0, 100, 170, 30, 40, 0);
     delay(2500);
  }
}


Arduino Forum > International > Italiano > Software (Moderator: leo72) > Utilizzare funzioni esterne


arduino

Comments

Popular posts from this blog

Error compiling for board Arduino/Genuino Uno.

Installation database is corrupt

esp8266 (nodemcu 0.9) client.write très lent ???