Go Down

Topic: Snellimento programma (Read 1 time) previous topic - next topic

Lucailvec

Nov 07, 2012, 08:00 pm Last Edit: Nov 07, 2012, 08:31 pm by UweFederer Reason: 1
Ciao a tutti , mi scuso vista la mimina presenza su questo forum ma il tempo a disposizione incomincia a mancare già ora :smiley-eek-blue:
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 :)
A me escono 2554 byte  :smiley-roll-blue:

Code: [Select]
#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;}
 

uwefed

Ciao
Dove hai declarato arrayled[] ?

Per favor incolla il sketch giusto.
Ciao Uwe

Lucailvec

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



lesto

in ogni caso non capisco perchè vuoi snellire, 2kb non sono tantissimi, considera che di base un void loop vuoto usa 446byte
Guida per principianti http://playground.arduino.cc/Italiano/newbie
Unoffical Telegram group https://t.me/genuino

Lucailvec

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

lesto

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?  :smiley-mr-green:

consiglio: inizia a farlo funzionare come vuoi, e poi vedrai che gli snellimenti verranno da sè.
Guida per principianti http://playground.arduino.cc/Italiano/newbie
Unoffical Telegram group https://t.me/genuino

Lucailvec

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

m_ri

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

PaoloP

Usa sempre i tag CODE
e correggi
Code: [Select]
for (i=0;i<130;i++){
    arrayled=0;}
  }

con
Code: [Select]
for (i=0;i<130;i++){
    arrayled[i]=0;}
  }

Go Up