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

#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 i 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 a 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 i pin usando:

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 a 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:

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);
  }
}

Grazie per i consigli!

Una piccola domanda, quando tu di ci questo

valore=digitalRead(prox1);

valore si riferisce al mio pin 26, oppure valore lo dichiaro come una variabile nominata appunto valore.

#include <Braccio.h>
#include <Servo.h>

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

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 i pin in modalità ingresso.///////////////////////////////////////////////
 
  Braccio.begin();          // inizializzo la comunicazione del braccio.
  Serial.begin(9600);       // inizializzo la comunicazione seriale.
  
  pinMode(releout, OUTPUT);
  pinMode(prox1, INPUT);
  pinMode(prox2, INPUT);

}


void F151(void)
{   
  if(digitalRead(prox1)==HIGH);
  {    
    Braccio.ServoMovement(25,   0, 100, 170, 30, 40, 0);  //Posizione 1 (20= delay step, M1, M2, M3, M4, M5, M6)
             delay(2000);
    Braccio.ServoMovement(25,   0, 100, 45, 30, 90, 0);  //Posizione 1 (20= delay step, M1, M2, M3, M4, M5, M6)
             delay(2000);      
   }         
}

void loop() 
{  
  valore=digitalRead(prox1);
  Serial.println(valore);     
  F151();    
}

andreaTECHE:
... oppure valore lo dichiaro come una variabile nominata appunto valore.

Quello ... valore nel senso di nome della variabile (che dovrai aver dichiarato prima ovviamente) ... il nome non e' necessario che sia "valore", puo essere qualsiasi nome che non sia un comando del C++

Scusa il qui-pro-quo. Intendo al valore di prox1

Poi, si può fare in due passaggi:
byte val=digitalRead(prox1); // byte oppure int, int=2 byte sprechi solo un pochino di memoria in +
if ( val==HIGH)

** io ed @eteme in contemporanea ^-^

Grazie ancora ragazzi!
Avevo cominciato a fare delle prove, ed ero riuscito a capire.
adesso il comportamento del sensore è strano, sembra che memorizza la presenza o assenza dell'oggetto, cambiando il suo stato da 0 a 1 e viceversa in ritardo, vi posto il codice

const byte releout = 11;         //definisco variabile per relè.
const byte prox1 = 26;         //definisco variabile per proximity1.
const byte prox2 = 28;         //definisco variabile per proximity2.
int valore;
void setup() 
{
  ///////////////////////////////////////////////imposto i pin in modalità ingresso.///////////////////////////////////////////////
 
  Braccio.begin();          // inizializzo la comunicazione del braccio.
  Serial.begin(9600);       // inizializzo la comunicazione seriale.
  
  pinMode(releout, OUTPUT);
  pinMode(prox1, INPUT);
  pinMode(prox2, INPUT);

}
void loop() 
{    
  valore=digitalRead(prox1);   
  delay(1000);
  Serial.println(valore);    
}

Beh, intanto nel tuo test devi mettere la delay di 1 secondo DOPO la serial.print

Per il ritardo, purtroppo io non conosco il prodotto che usi.
Hai un link che spiega che roba è ?

il sensore è un un IY5036 della ifm

il partitore di tensione l'ho realizzato io, arduino è il 2560 r3, la scheda del braccio e il braccio li ho comprati sul sito di arduino.