Snellimento programma

Ciao a tutti , mi scuso vista la mimina presenza su questo forum ma il tempo a disposizione incomincia a mancare già ora :fearful:
L'oggetto in questione è un programma che fa fare uno scan ad un braccio e poi si va a posizionare a "metà" dell oggetto ...in ogni caso il programma è questo , vi ringrazio in anticipo :slight_smile:
A me escono 2554 byte :roll_eyes:

#include <Servo.h> 
Servo polso;
int sens=3;    
int contatoresens; 
boolean abilitazione;
int posbraccio;
int posfinale;
int val;



void setup() {
    pinMode(sens,INPUT);
int i;    
  for (i=0;i<130;i++){
    arrayled[i]=0;}
  }


void loop() {
  
 azzeramento(); //azzero
           //parto con la scannerizzata    
        for(val=0;val<130;val++){  //se arriva a 130 non fa nulla ovviamente ed esce dal loop
          if(sens=0){              //sensore non interrotto
             if (abilitazione=1)   //se c'è stata l abilitazione vuol dire che ha sorpassato l'oggetto una volta e può posizionarsi
                posizionamento();   //chiama 
             polso.write(val);    //fintanto che il sensore non si è interrotto si muove
             delay(40);   
          }
          
        if  (sens=1){               //sensore interrotto
          if(abilitazione=0){       //fintanto che abbiamo azzerato i valori registriamo la prima posizione dove viene interrotto il sens
          posbraccio=polso.read();//registriamo la posizione
          abilitazione=1;}           //diciamo che abbiamo incontrato un ostacolo
          polso.write(val);          //si muove fintanto che il sensore è interrotto dal ciclo if         
          contatoresens++;           //contiamo i passi che fa prima di interrompersi
        delay(40);}
        }
}

//-----------------------------------------------POSIZIONAMENTO----------------------------------------------------

  void  posizionamento() {

    posfinale=posbraccio+(contatoresens/2);
      for(val=polso.read();val<posfinale;val--){//verificare i menomeno(del val-- e il segno < o >) sarà sempre prima della posattuale)
        polso.write(val);
      delay(40);}
  }
//-----------------------------------------------AZZERAMENTO------------------------------------------------------------
  void azzeramento() {
 for(val=polso.read();val>0;val--){
            polso.write(val);
          delay(40);}
          abilitazione=0;
          contatoresens=0;}

Ciao
Dove hai declarato arrayled[] ?

Per favor incolla il sketch giusto.
Ciao Uwe

così è giusto ?

#include <Servo.h>
Servo polso;
int sens=3;
int contatoresens;
boolean abilitazione;
int arrayled[130];
int posbraccio;
int posfinale;
int val;

void setup() {
pinMode(sens,INPUT);
int i;
for (i=0;i<130;i++){
arrayled*=0;}*

  • }*
    void loop() {

azzeramento(); //azzero

  • //parto con la scannerizzata *

  • for(val=0;val<130;val++){ //se arriva a 130 non fa nulla ovviamente ed esce dal loop*

  • if(sens=0){ //sensore non interrotto*

  • if (abilitazione=1) //se c'è stata l abilitazione vuol dire che ha sorpassato l'oggetto una volta e può posizionarsi*

  • posizionamento(); //chiama*

  • polso.write(val); //fintanto che il sensore non si è interrotto si muove*

  • delay(40); *

  • }*

  • if (sens=1){ //sensore interrotto*

  • if(abilitazione=0){ //fintanto che abbiamo azzerato i valori registriamo la prima posizione dove viene interrotto il sens*

  • posbraccio=polso.read();//registriamo la posizione*

  • abilitazione=1;} //diciamo che abbiamo incontrato un ostacolo*

  • polso.write(val); //si muove fintanto che il sensore è interrotto dal ciclo if *

  • contatoresens++; //contiamo i passi che fa prima di interrompersi*

  • delay(40);}*

  • }*
    }
    //-----------------------------------------------POSIZIONAMENTO----------------------------------------------------

  • void posizionamento() {*

  • posfinale=posbraccio+(contatoresens/2);*

  • for(val=polso.read();val<posfinale;val--){//verificare i menomeno(del val-- e il segno < o >) sarà sempre prima della posattuale)*

  • polso.write(val);*

  • delay(40);}*

  • }*
    //-----------------------------------------------AZZERAMENTO------------------------------------------------------------

  • void azzeramento() {*
    for(val=polso.read();val>0;val--){

  • polso.write(val);*

  • delay(40);}*

  • abilitazione=0;*

  • contatoresens=0;} *

in ogni caso non capisco perchè vuoi snellire, 2kb non sono tantissimi, considera che di base un void loop vuoto usa 446byte

D: così tanto ? o.O sinceramente chiedo come posso snellire perchè magari c'erano (non ripetizioni) ma altri modi di scrivere alcune funzioni che mi permettono di salvare un po' di byte e comunque perchè questo è solo una prova per fargli fare uno scan e far prendere al braccio un oggettino , quindi nel codice manca tutta la parte dove riceve le istruzioni via seriale e tutte quelle istruzioni per far muovere il tutto quindi in previsioni di grandi sconvolgimenti del programma pensavo che prevenire, snellendolo da subito fosse meglio che curare tutto alla fine :slight_smile:

mai ottimizzare prima di avere il codice completo, se no sulla base di cosa ottimizzi?
è vero che srivendo cose in determinati modi risparmi spazio, ma se poi aggiungi altro codice chi ti dice che alla fine tutto sommato quello precedente non ti faceva risparmiare? :grin:

consiglio: inizia a farlo funzionare come vuoi, e poi vedrai che gli snellimenti verranno da sè.

mi hai convinto haha andrò avanti per la mia strada poi se è piena si vedrà XD grazzzzzzie

non mi son letto bene il codice..ma negli if,il singolo = è voluto,o ti sei dimenticato du usare il == ?

Usa sempre i tag CODE
e correggi

for (i=0;i<130;i++){
    arrayled=0;}
  }

con

for (i=0;i<130;i++){
    arrayled[i]=0;}
  }