Go Down

Topic: CUBO 3X3X3 info e consigli (Read 2343 times) previous topic - next topic

pablos


Io non ho studiato elettronica, ci arrivo per intuizione...


:D :D :D
no comment

superlol

impara bene gli array e con 5 righe ne scrivi 50 ;)

sinceramente se memorizzassi le sequenze in array potresti aver qualche problema di ram :P però poi tutto verrà gestito con 2-3 cicli di for conenuti uno nell'altro, un delay e in totale il loop() ti verrebbe di circa... 10 righe ma avresti infinite possibilità.

ricorda che puoi mettere degli array come singolo valore degli array, quindi esistono array di array  :P ed anche array di array di array e così via fino alla saturazione della ram...
Il nuovo forum italiano sull'elettronica: http://www.electroit.tk/ <--- Nuovamente online!

tuxduino

L'intuizione serve... ma solo se supportata da un minmo di nozioni  8)

Spack


Come hai collegato i pin dell'arduino alla base dei transistor ? Immagino con una resistenza...

Per quanto riguarda il programma, beh direi che è il momento di imparare ad usare gli array :P

Nel frattempo potresti dichiarare una variabile d, assegnarle 200 e sostituire delay(200) con delay(d). In questo modo puoi variare la velocità della sequenza semplicemente modificando il valore assegnato a d (una sola volta invece di n) e ricaricare lo sketch.


Genius! Lo faccio appena arrivo a casa.

Si, i transistor arrivano ai pin dell'Arduino passando da una resistenza ma come anticipato sostituirò i transistor con un ULN2803 perchè i livelli (piani o chiamali come vuoi) mi si accendono a random. Farò un video per postarvelo :)

Questa cosa degli array ci piace, questa sera do una bella sbirciata alla guida di c.

for(int pluripin=28; pluripin<=51; pluripin++)
    pinMode (pluripin,OUTPUT);

Questo per ora è il miglior riuscito, quello per il lampeggio non funziona, sarà dovuto sicuramente a qualche errore post mmm

Una volta finito con la programmazione ci sarà da trasferire tutto su un microcontrollore dedicato che salderò sulla millefori, così che il cubo possa essere autonomo senza l'Arduino. Ho già 4 micro tra cui scegliere.

Ah e ovviamente qualcosa per la corrente, anche se credo che le batterie siano meno dispendiose e più semplici da "introdurre" a livello di componenti e codice.


Io non sapevo neanche accendere un led prima di imbarcamenarmi in quest'impresa e aver fatto un cubo, ora che l'ho quasi portato a termine è una vera soddisfazione, lo consiglio a tutti a prescindere.



tuxduino

:-)

Solo una precisazione (mi scuso in anticipo se ho capito male).

In questo frammento:
Code: [Select]
for(int pluripin=28; pluripin<=51; pluripin++)
    pinMode (pluripin,OUTPUT);

gli array non c'entrano.
Ti faccio un esempio con un array... Il vantaggio è che l'indice del ciclo for() è slegato dal numero dei pin, quindi puoi modificare i numeri di pin senza toccare il codice del for() e senza che debbano essere per forza consecutivi.
(ps: ho scritto solo alcuni pin per far prima :P )
Code: [Select]

// questa è una macro che calcola il numero di elementi in un array
#define ARY_LEN(a) (sizeof(a)/sizeof(a[0]))
// dichiarazione e inizializzazione di un array contenente il numero di ogni pin utilizzato
byte pins[] = { 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42 };
// calcolo automatico di quanti pin sono contenuti nell'array; da usare nei cicli for(); si aggiorna automaticamente se aggiungiamo elementi all'array qui sopra
const byte NUM_PIN = ARY_LEN(pins);

// pinMode di cascun pin:
for (byte i = 0; i < NUM_PIN; i++) {
    pinMode(pins[i], OUTPUT);
}


Se per ora non ti è chiaro, lo sarà di sicuro tra poco... :) Guarda qui, ad esempio: http://www.cplusplus.com/doc/tutorial/arrays/

superlol

il bello è che potresti fare un array nell'array in cui sono contenuti in sequenza i pin da accendere :P

ad esempio
Code: [Select]
byte pins[][] = {
  {20, 30, 40},
  {20, 30, 50},
  {10, 20, 30, 50},
  {10, 20, 30, 40, 50}
  }

è un array che contiene altri array. viene chiamato multidimensionale (in questo caso bidimensionale)
ho scritto dei pin alla cavolo non so nemmeno se esistono devo ammette ma ora ti faccio capire il trucchetto :P
riprendo la macro scritta da tuxduino e la trasformo in funzione, la differenza è che la funzione è calcolata durante lo svolgimento del programma mentre la macro durante la compilazione (o almeno io la sapevo così :P )
Code: [Select]
void array_length(byte a) {
  return (sizeof(a)/sizeof(a[0]));
  }

ok fatto questo puoi sapere ogni volta quanti valori hai in ogni array

ora pensiamo al ciclo ;)

quando vuoi richiamare il valore di un array multidimensionale hai necessità di 2 indici. gli indici sono dei numeri che vanno a "selezionare" il valore, vedile come le righe di un programma.
però noi abbiamo delle righe e delle colonne quindi abbiamo 2 indici per poter leggere 1 solo valore ;) spero tu mi segua
ricorda che gli indici partono da 0
Code: [Select]

for (byte i = 0; i < array_lenght(pins); i++) {
  for (byte z = 0; z < array_lenght(pins[i]); z++) {
    Serial.print(pins[i][z]);
    Serial.print(" ");
  }
  Serial.println();
}

se aprirai il monitor seriale con questo codice nel setup (o stamperà all'infinito) vedrai che dovrebbe riportarti il tuo array

unico dubbio che mi è sorto:
noi calcoliamo il numero di elementi dell'array come un rapporto tra grandezza dell'array e grandezza del primo valore, ma in un array dimensionale i cui "sotto-array" sono di grandezza variabile è attendibile come sistema? quindi ogni sotto-array è grande (in questo caso) un byte o ogni suo valore all'interno è un byte?
perchè in tal caso sballerebbe la lunghezza sull'intero array...
Il nuovo forum italiano sull'elettronica: http://www.electroit.tk/ <--- Nuovamente online!

Go Up