Go Down

Topic: Snellimento programma (Read 624 times) 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
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

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è.
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

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