Go Down

Topic: Tab Multiple (Read 10068 times) previous topic - next topic

f.schiano

Quindi la cosa migliore probabilmente é tenere il programma semplice in questo caso e definirmi le mie variabili prima del setup e abbandonare questa STRANA idea di libreria che forse non é la migliore idea in questo momento.

Che ne pensi?

Cerco di fare uno schema del progetto che ho in mente su un foglio con tutte le funzioni che devo implementare.
Probabilmente aiuta.

f.schiano

#46
Dec 04, 2013, 10:53 am Last Edit: Dec 04, 2013, 10:55 am by f.schiano Reason: 1
non so quanto aiuti.

Ma ripeto il mio problema.

Ho tante funzioni che posso raggruppare in tante tabs perché ho le funzioni legate al DAC , le funzioni legate alla SD card etc.

Il problema ora é dove mettere l´inizializzazione delle variabili. All´inizio avevo pensato a un file .h perché viene compilato all´inizio (almeno credo).

Astro mi ha detto che non é il modo pulito di farlo e quindi ho cercato di virare verso la creazione di una libreria, ma probabilmente questa non é l´idea migliore. Quindi forse la soluzione é semplicemente aggiungere l´inizializzazione delle variabili in testa al file Controller_v3_2 dove c´é la funzione setup() e loop().

Cosa ne pensate?

Maurotec

Se le funzioni che hai creato sono stabili e non necessitano di modifiche continue conviene pensare ad una libreria.
Quanto detto equivale a dire: se le api sono stabili crea una libreria.

Sicuramente incontrerai alcune difficoltà a creare delle lib, spesso di tende ad usare variabili pubbliche dentro le funzioni, con le lib la variabile pubblica non sarà visibile e dovrai usare extern oppure passarla come parametro.

Purtroppo devi fare una scelta, ho complicarsi la vita usando le lib con tutti i vantaggi che porta, oppure continuare con le tab e fare a meno di header file che porta sia vantaggi che svantaggi.

Ciao.

f.schiano

Penso che per ora lascio l´inizializzazione nel main file cioé prima delle funzioni setup e loop .

In questo modo non ho bisogno del file header.

Forse piú in la creeró una libreria.

Maurotec

Se posti almeno la parte iniziale del ino in cui c'è l'inizializzazione, setup e loop si può parlare nel dettaglio al fine di dargli una sistemata che possa tornare utile alla manutenzione.

Ciao.

f.schiano

Questo sarebbe davvero molto utile :)

Lo allego perché é molto lungo e non mi permette di incollarlo e dovrei fare piú post, spero vada bene :)

Qualunque aiuto é davvero ben accetto :)

Grazie davvero

Maurotec

Prendo un pezzo di codice a caso.

Code: [Select]

// LED DRIVING  /////////////////////////////////////////////
      col=strip.Color(0,  127,  0); //green                      //
      for(i_led=0; i_led<strip.numPixels(); i_led++)             //
      {                                                          //
      strip.setPixelColor(i_led, 0);                     //
      }                                                          //
      lednumber=map(L,0,1010,1,nLEDs);                           //
      for(i_led=0; i_led<lednumber; i_led++) {                   //
      strip.setPixelColor(i_led, col);                   //
      }                                                          //
      strip.show(); // Refresh to turn off last pixel            //
      // end LED Driving //////////////////////////////////////////


i_led è una variabile globale, ma non la usi in modo globale, vero?
Qui la dichiari così int i_led=0; pensi che come di seguito potrebbe funzionare?

Code: [Select]

// LED DRIVING  /////////////////////////////////////////////
{  // apre un blocco tutto quello che viene creato qui scompare alla fine del blocco
        byte i_led = 0; // al termine del blocco i_led viene rimosso dallo stack
      col=strip.Color(0,  127,  0); //green                      //
      for(i_led=0; i_led<strip.numPixels(); i_led++)             //
      {                                                          //
      strip.setPixelColor(i_led, 0);                     //
      }                                                          //
      lednumber=map(L,0,1010,1,nLEDs);                           //
      for(i_led=0; i_led<lednumber; i_led++)
        {                   //
      strip.setPixelColor(i_led, col);                   //
        }                                                          //
      strip.show(); // Refresh to turn off last pixel            //
}  // chiude il blocco
      // end LED Driving //////////////////////////////////////////


Il codice è ben documentato. Ci sono alcune cose che andrebbero sistemate prima di pensare di dividere il codice in funzioni e tab. Potresti creare una tab initialize e dentro metterci delle funzioni che inizializzano le varie parti, funzioni che chiamerai da dentro setup(). Questo snellirebbe la funzione setup e inoltre se hai problemi con l'inizializzazione sai in quale tab cercare.

Vedi di usare sempre meno variabili globali. Quasi sempre le variabili indice del for e meglio che siano locali,
se non vuoi usare i blocchi {} puoi creare e inizializzare una variabile indice anche nella istruzione for: for (int i_led=0; i_led<...

Al momento usi dei rientri per evidenziare del codice che magari scorrendo con la rotella te lo perdi di vista, risolvi parzialmente con l'indentazione, ma non è cosa consueta e alla fine porta confusione. Per il momento continua così, vediamo se è possibile creare qualche function per snellire il codice usando al contempo meno ram, o meglio usando la ram strettamente necessaria.

Qual'è il motivo che ti porta a volere usare le tab? noti una difficoltà nello sviluppo del codice?

Ciao.


Go Up