Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Progettazione software per cubo led 4x4x4

Tipologie, strumenti di sviluppo, hardware e progetti

Moderatore: Foto UtentePaolino

0
voti

[71] Re: Progettazione software per cubo led 4x4x4

Messaggioda Foto UtenteGalaxi93 » 27 apr 2009, 19:39

posta10100 ha scritto:
Galaxi93 ha scritto:...quindi li preferirei in inglese...


Infatti quello è in inglese! :mrgreen:


scusa, ma sono malato :mrgreen:
Volevo dire italiano.
Galaxi93.

Visita il mio sito!! E' ancora in costruzione, ma anche tu puoi contribuire a farlo crescere e darmi dei consigli per migliorarlo! Dai prova, provare non costa nulla! Vieni!
Avatar utente
Foto UtenteGalaxi93
3.118 3 7 13
Master
Master
 
Messaggi: 617
Iscritto il: 15 apr 2009, 16:27

0
voti

[72] Re: Progettazione software per cubo led 4x4x4

Messaggioda Foto UtenteGalaxi93 » 27 apr 2009, 19:53

Ho due domandine:
la prima, nella funzione getStato, il valore che devo dare deve essere compreso tra 0 e 3?

La seconda, va bene modificare in questo modo (i -1) in maniera da non sottrarre ogni volta il -1?
Codice: Seleziona tutto
void cambiaStato(unsigned char x, unsigned char y, unsigned char z, unsigned char stato)
     {
     unsigned char index = getIndex(y-1, z-1);
     unsigned char bitIndex = getBitIndex(x-1, y-1);
     unsigned char maschera = getMaschera(bitIndex, stato);
     if (stato)             // Devo mettere a 1 il bit corrispondente.
        {        // Eseguo l'OR logico tra la maschera e il byte dell'array che
        map[index] |= maschera; // equivale a map[index] = map[index] | maschera.
        }
     else        // Devo mettere a 0 il bit corrispondente.
        {        // Eseguo l'AND logico tra la maschera e il byte dell'array.
        map[index] &= maschera; // equivale a map[index] = map[index] & maschera.
        }
    }
Galaxi93.

Visita il mio sito!! E' ancora in costruzione, ma anche tu puoi contribuire a farlo crescere e darmi dei consigli per migliorarlo! Dai prova, provare non costa nulla! Vieni!
Avatar utente
Foto UtenteGalaxi93
3.118 3 7 13
Master
Master
 
Messaggi: 617
Iscritto il: 15 apr 2009, 16:27

0
voti

[73] Re: Progettazione software per cubo led 4x4x4

Messaggioda Foto Utentephylum » 27 apr 2009, 20:02

Scusa ma perche' preferisci modificare una funzione invece di scrivere for i=0;i<4 ? al posto di for i=1;i<5 ? :)
\int_{}tella
Immagine
Avatar utente
Foto Utentephylum
6.191 5 7 12
G.Master EY
G.Master EY
 
Messaggi: 3217
Iscritto il: 9 ott 2007, 12:40

0
voti

[74] Re: Progettazione software per cubo led 4x4x4

Messaggioda Foto Utentec1b8 » 28 apr 2009, 14:48

Ciao,
temo che in quanto all'inglese tu debba rassegnarti, libri/manuali in italiano si trovano sicuramente ma nel mondo del lavoro la documentazione è prevalentemente in inglese.

Il libro consigliato da posta10100 è sicuramente un buon testo, però secondo me dovresti cominciare da qualche cosa di più generico. Lascia stare al momento il linguaggio specifico, devi apprendere le basi.

Ti è chiaro perché sia stata utilizzata l'istruzione a <<= 1; ?
Non il significato dell'istruzione, ma il suo utilizzo nel contesto del programma?
Quali altre tecniche si sarebbero potute adottare per ottenere lo stesso scopo?
Dillo a parole, non con un linguaggio di programmazione.

Non ne sarei del tutto convinto, lo dimostra anche la seguente domanda:
Galaxi93 ha scritto:E ora che mi viene in mente, come faccio a rifare i giochini dell'inizio (quelli che accendevano un piano alla volta)???

L'impressione è che non ti sia chiarissima la struttura del programma, il suo funzionamento.
Non prenderla come una critica, nessuno è nato "imparato" e tutti abbiamo dovuto studiare.

Io ti consiglierei quindi di cominciare dalle fondamenta, capire come si rappresentano i dati e come trattarli per raggiungere gli scopi prefissi. Poi potrai passare ad approfondire il linguaggio che desideri utilizzare.
Conoscere bene il linguaggio è fondamentale, ma non è il primo passo da compiere.

Una delle regole della XP (Extreme Programming) è la 'Pair Programming', ossia la programmazione a coppie.
Ogni volta che la presento rischio il linciaggio, ma è l'esempio lampante di quanto ti sto dicendo. Consiste nel mettere 2 programmatori vicini, uno legge l'altro scrive, proprio come nella barzelletta sull'Arma.
Il problema è capire cosa uno legge e cosa l'altro scrive per comprenderne la forza. Se si leggesse e si scrivesse il codice del programma sarebbero risorse sprecate, ma se il primo legge il problema, il secondo scrive le strutture dati e l'algoritmo ed ancora il primo controlla/contesta/critica/suggerisce, il risultato è la realizzazione di programmi più efficienti in minor tempo e costo con anche minori errori.
Non è quindi fondamentale saper scrivere il linguaggio di programmazione scelto, ma tradurre il problema da risolvere in struttura dati e algoritmo adeguati, in questo 2 programmatori a confronto svolgono un lavoro migliore.

Ti consiglierei quindi di partire da uno di questi:
http://www.librinformatica.it/novita/libri02/aw1518.htm
http://www.libreriauniversitaria.it/fon ... 8838664779

Non ne conosco on line e/o gratuiti, mi spiace.
Fabio
Avatar utente
Foto Utentec1b8
3.595 3 8 13
G.Master EY
G.Master EY
 
Messaggi: 1770
Iscritto il: 15 gen 2009, 15:23

0
voti

[75] Re: Progettazione software per cubo led 4x4x4

Messaggioda Foto UtenteGalaxi93 » 28 apr 2009, 14:52

Bene,
durante la noiosa ora di matematica...emh volevo dire, dopo aver fatto i compiti :mrgreen: ho sfornato questa funzione, che mi serve per fare il gioco di luce "riempi e svuota". Questa funzione controlla se il cubo è tutto acceso (pieno), tutto spento(vuoto) o con alcuni led accesi. Ditemi se può funzionare e se è tutto ok.
Codice: Seleziona tutto
//Funzione che controlla se il cubo è vuoto o pieno oppure nessuno dei due,
//restituendo i valori 0 = vuoto, 1 = pieno, 2 = non pieno e non vuoto.
char fill_empty()
     {
     char i, stato;               //Dichiaro le variabili.
     stato=8;                     //Stato = 8.
     for (i=0;i<8;i++)            //incremente di 1, i, finche non diventa 8.
         {                        //Inizion for.
         if (map[i]==255)         //Controlla map[] se è uguale a 255 (pieno),
            stato++;              //e se è vero, incrementa di uno stato.
         if (map[i]==0)           //Poi controlla se è uguale ad 0 e
            --stato;              //se è vero, decrementa di 1 da stato.
         }                        //Fine for.
     if (stato!=0, stato!=16)     //Se stato è diverso da 0 (vuoto) e 16(pieno).
     stato=2;                     //Mette a stato il valore 2(ne pieno ne vuoto).
     else                         //Altrimenti,
         {
         if (stato==0)            //Se stato è uguale a 0(vuoto),
            stato=0;              //Mette a 0 stato (questo if è inutile).
         if (stato==16)           //Se stato è uguale a 16(pieno),
            stato=1;              //Mette stato a 1.
         }
     return(stato);               //Ritorna stato (0=vuoto, 1=pieno, 2=né pieno,
     }                            //né vuoto).


Intanto faccio la funzione di riempimento e svuotamento vera e propria.

Ciao,
Davide.
Galaxi93.

Visita il mio sito!! E' ancora in costruzione, ma anche tu puoi contribuire a farlo crescere e darmi dei consigli per migliorarlo! Dai prova, provare non costa nulla! Vieni!
Avatar utente
Foto UtenteGalaxi93
3.118 3 7 13
Master
Master
 
Messaggi: 617
Iscritto il: 15 apr 2009, 16:27

0
voti

[76] Re: Progettazione software per cubo led 4x4x4

Messaggioda Foto Utentephylum » 28 apr 2009, 15:37

mmm per approfittare del discorso di c1b8 {beh +/-} O:)
io la vedrei cosi':
Codice: Seleziona tutto
char IsEmpty(char nLimit)
{
   char i=0, n=0;
   for (i;i<nLimit;i++)
   {
     if (map[i]) ++n;
   }
   if (n) return n==nLimit?1:2;
   return 0;
}
\int_{}tella
Immagine
Avatar utente
Foto Utentephylum
6.191 5 7 12
G.Master EY
G.Master EY
 
Messaggi: 3217
Iscritto il: 9 ott 2007, 12:40

0
voti

[77] Re: Progettazione software per cubo led 4x4x4

Messaggioda Foto UtenteGalaxi93 » 28 apr 2009, 15:58

Scusa c1b8, ma non avevo visto il tuo messaggio.

Si in effetti io ho bisogno delle basi, perché non conosco esattamente il funzionamento delle funzioni proposte da posta10100 e da te, ma solo a grandi linee.
Per i libri, sarà un po' difficile averli, ma proverò...

Grazie e ciao,

Davide.
Galaxi93.

Visita il mio sito!! E' ancora in costruzione, ma anche tu puoi contribuire a farlo crescere e darmi dei consigli per migliorarlo! Dai prova, provare non costa nulla! Vieni!
Avatar utente
Foto UtenteGalaxi93
3.118 3 7 13
Master
Master
 
Messaggi: 617
Iscritto il: 15 apr 2009, 16:27

0
voti

[78] Re: Progettazione software per cubo led 4x4x4

Messaggioda Foto UtenteGalaxi93 » 28 apr 2009, 17:19

Ho fatto l'icredibile scoperta che la funzione di prima non mi serve!! :mrgreen:

Ho scritto queste righe, ma provandole praticamente, non ottengo il risultato sperato (mi si accendono alcuni led e lampeggiano in maniera strana)
Ecco il codice:

Codice: Seleziona tutto
//Funzione che date le coordinate x, y, z, ne cambia lo stato solo se è diverso
//dallo stato dato alla funzione e se lo cambia, restituisce 1 altrimenti 0.

char cambia_if(char x, char y, char z, char stato)
     {
     char stato_led =getStato(x,y,z);
     char cambiato = 0;
     if (stato==0)
        {
        if (stato_led!=0)
        cambiaStato(x,y,z,stato);
        cambiato=1;
        }
     if (stato==1)
        {
        if (stato_led==0)
        cambiastato(x,y,z,stato);
        cambiato=1;
        }
     return(cambiato);
     }

//Funzione che accende (stato=1) o spegne (stato=0) tutti i led del cubo
//casualmente.
void fill_empty_led(char stato, char tempo)
     {
     char gioco=0, i;
     for (i = 0; i < 8; i++)
         { map[i] = !stato*255; }
     while (gioco!=64)
           {
           random();
           x_led=random_4;
           random();
           y_led=random_4;
           random();
           z_led=random_4;
           if (cambia_if(x_led,y_led,z_led,stato)==1)
              {
              gioco++;
              check_led(tempo);
              }
           }
     }


Scusate se non è commentato, ma non ho avuto tempo. La prima funzione cambia lo stato di un led solo se lo stesso non è già dello stato in cui lo si vuole cambiare (mazza quanto si sarà capito...). mentre la seconda funzione, per prima cosa resetta il cubo in base se lo si deve accendere o spegnere e poi inizia a riempirlo fino a raggiungere i 64 led accesi.
Galaxi93.

Visita il mio sito!! E' ancora in costruzione, ma anche tu puoi contribuire a farlo crescere e darmi dei consigli per migliorarlo! Dai prova, provare non costa nulla! Vieni!
Avatar utente
Foto UtenteGalaxi93
3.118 3 7 13
Master
Master
 
Messaggi: 617
Iscritto il: 15 apr 2009, 16:27

0
voti

[79] Re: Progettazione software per cubo led 4x4x4

Messaggioda Foto Utenteposta10100 » 28 apr 2009, 17:34

Intanto il codice lo rischiverei così:
Codice: Seleziona tutto
    //Funzione che date le coordinate x, y, z, ne cambia lo stato solo se è diverso
    //dallo stato dato alla funzione e se lo cambia, restituisce 1 altrimenti 0.

    char cambia_if(char x, char y, char z, char stato)
         {
         char stato_led =getStato(x,y,z);
         char cambiato = 0;
         if (stato != statoLed) { // se lo stato è diverso
             cambiaStato(x, y, z, stato); //lo cambio
             return 1; // e restituisco 1
         }
         return 0; // altrimenti restituisco 0
    }

    //Funzione che accende (stato=1) o spegne (stato=0) tutti i led del cubo
    //casualmente.
    void fill_empty_led(char stato, char tempo)
         {
         char gioco=0, i;
         for (i = 0; i < 8; i++) {
             if (stato == 0) {
                 map[i] = 0;
             } else {
                 map[i] = 255;
             }
             // map[i] = !stato*255; così non fa quello che vuoi
         }
         while (gioco<=64)
               {
               random();
               x_led=random_4;
               random();
               y_led=random_4;
               random();
               z_led=random_4;
               if (cambia_if(x_led,y_led,z_led,stato)) { // non è necessario specificare == 1,
                                     //in C è falso se == 0 e vero in tutti gli altri casi
                  gioco++;
                  check_led(tempo);
               }
         }
   }


Prova così... dovrebbe funzionare...
http://millefori.altervista.org
Tool gratuito per chi sviluppa su millefori.

Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (A. Einstein)
Se non c'e` un 555 non e` un buon progetto (IsidoroKZ)

Strumento per formule
Avatar utente
Foto Utenteposta10100
5.550 4 10 13
Master EY
Master EY
 
Messaggi: 4832
Iscritto il: 5 nov 2006, 0:09

0
voti

[80] Re: Progettazione software per cubo led 4x4x4

Messaggioda Foto UtenteGalaxi93 » 28 apr 2009, 18:27

ho dato un occhiata veloce al tuo codice, e ho visto subito una cosa che mi crea un dubbio: ma la funzione getstato, non mi ritorna 0 se è spento e un numero diverso da 0 se è acceso? E proprio per quello che non ho fatto come hai fatto tu. Spero che tu abbia ragione. Per il resto ho capito tutto, tranne quel map[i] = !stato*255; che cosa fa quello che ho scritto io?
Galaxi93.

Visita il mio sito!! E' ancora in costruzione, ma anche tu puoi contribuire a farlo crescere e darmi dei consigli per migliorarlo! Dai prova, provare non costa nulla! Vieni!
Avatar utente
Foto UtenteGalaxi93
3.118 3 7 13
Master
Master
 
Messaggi: 617
Iscritto il: 15 apr 2009, 16:27

PrecedenteProssimo

Torna a Realizzazioni, interfacciamento e nozioni generali.

Chi c’è in linea

Visitano il forum: Nessuno e 7 ospiti