Pages: [1]   Go Down
Author Topic: Snellimento programma  (Read 392 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 3
Posts: 113
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley
A me escono 2554 byte  smiley-roll-blue

Code:
#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;}
 
« Last Edit: November 07, 2012, 02:31:34 pm by UweFederer » Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 235
Posts: 20221
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao
Dove hai declarato arrayled[] ?

Per favor incolla il sketch giusto.
Ciao Uwe
Logged

Offline Offline
Full Member
***
Karma: 3
Posts: 113
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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


Logged

0
Offline Offline
Shannon Member
****
Karma: 117
Posts: 10106
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Full Member
***
Karma: 3
Posts: 113
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley
Logged

0
Offline Offline
Shannon Member
****
Karma: 117
Posts: 10106
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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è.
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Full Member
***
Karma: 3
Posts: 113
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

mi hai convinto haha andrò avanti per la mia strada poi se è piena si vedrà  smiley-lol grazzzzzzie
Logged

Offline Offline
God Member
*****
Karma: 8
Posts: 550
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 103
Posts: 6588
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Pages: [1]   Go Up
Jump to: