Go Down

Topic: Digital Light Wand - Striscia led programmabile per light painting (Read 900 times) previous topic - next topic

OWENlab

ciao a tutti!
Sono un newbie di arduino, mi occupo di fotografia e sto cercando di utilizzare questa piattaforma per costruire attrezzatura per far foto, in particolar modo sto seguendo questo tutorial
http://mrossphoto.com/wordpress32/dlwblog/

è una striscia led pilotata da un HL 1606 che spostandosi nello spazio e scattando una foto con tempi relativamente lunghi simula un led wall con un effetto olografico.

stavo provando uno sketch seguendo il tutorial, ma quando provo a verificarlo con arduino mi da errori, ma non riesco a capire dove sia...



e questo è l'errore che genera

sketch_LIGHT_WAND2.cpp: In function 'void PatternA(int)':
sketch_LIGHT_WAND2:184: error: a function-definition is not allowed here before '{' token
sketch_LIGHT_WAND2:189: error: a function-definition is not allowed here before '{' token
sketch_LIGHT_WAND2:197: error: a function-definition is not allowed here before '{' token
sketch_LIGHT_WAND2:252: error: a function-definition is not allowed here before '{' token

da quanto ho capito, qualche funzione è rimasta aperta ... ma non riesco a trovarne l'errore

qualche anima pia riesce a darmi una mano per correggere il codice?

grazie!!!!!

PaoloP

La prima funzione PatternA (linea 119) non è chiusa da una graffa.
Poi ci sono tutte le funzioni duplicate. Due Setup, due loop, ecc ecc.
Così non funzionerà.

EDIT:
Ho tolto le prime 120 righe e adesso compila...
ma --> Dimensione del file binario dello sketch: 123.050 bytes (su un massimo di 32.256 bytes)
il file è troppo grande per Arduino.
Dovresti modificare il codice e inserire dei cicli for
Ogni blocco:
Code: [Select]
mystrip.pushCmd(BL);
 mystrip.pushCmd(BL);
 mystrip.pushCmd(BL);
 mystrip.pushCmd(BL);
 mystrip.pushCmd(BL);
 mystrip.pushCmd(BL);
 mystrip.pushCmd(BL);
 mystrip.pushCmd(BL);
 mystrip.pushCmd(BL);
 mystrip.pushCmd(BL);
 mystrip.pushCmd(BL);
 mystrip.pushCmd(BL);
 mystrip.pushCmd(BL);
 mystrip.pushCmd(BL);
 mystrip.pushCmd(BL);


sostituiscilo con
Code: [Select]
for (int x=1; x >= 15; x++){
   mystrip.pushCmd(BL);
 }

il numero lo modifichi in base a quante volte devi ripetere il comando.

In questo modo la funzione ClearStrip diventa

Code: [Select]
void ClearStrip(int duration)
{
 for (int x=1; x >= 48; x++){
   mystrip.pushCmd(BL);
 }
   mystrip.latch();
 delay(duration);
}

Per contare 48 elementi o vai da 0 a 47 o da 1 a 48. Meglio da 1 a 48 così non ti confondi.

OWENlab

ciao Paolo GRAZIE per l'aiuto velocissimo!!!
il problema della dimensione del file lo conoscevo, infatti consigliano l'utilizzo di arduino mega o arduino due,
il problema è che anche eliminando le prime 120 righe a me continua a non compilare :(

per quanto riguarda i cicli for non posso fare come mi hai consigliato giustamente tu, poichè quei "blocchi" assegnano un colore ad ogni led (BL nel caso che ti ho inviato è il valore del led spento) ma quel valore cambia in base alla grafica che voglio ottenere e potrei torvarmi dei blocchi di questo tipo:
Code: [Select]
mystrip.pushCmd(BL);
  mystrip.pushCmd(BD);
  mystrip.pushCmd(BL);
  mystrip.pushCmd(BL);
  mystrip.pushCmd(BL);
  mystrip.pushCmd(BL);
  mystrip.pushCmd(FDBB);
  mystrip.pushCmd(BL);
  mystrip.pushCmd(BL);
  mystrip.pushCmd(DB);
  mystrip.pushCmd(BL);
  mystrip.pushCmd(BL);
  mystrip.pushCmd(BG);
  mystrip.pushCmd(BL);
  mystrip.pushCmd(BL);


se posso ti chiederei un piccolo favore, se riuscissi ad allegarmi lo sketch che a te compila in modo da conpararlo con il mio e capire dove continuo a sbagliare! :(

grazie 1000 del prezioso aiuto!!!

PaoloP

L'ho provato con l'IDE 1.0.2 scaricabile da --> http://arduino.cc/en/Main/Software
Usa la libreria allegata, l'ho modificata per funzionare con la nuova versione dell'IDE: ho sostituito #include "Wconstant.h" con #include "Arduino.h".

tuxduino

#4
Nov 16, 2012, 10:39 am Last Edit: Nov 16, 2012, 01:44 pm by tuxduino Reason: 1
Non ho letto lo sketch, quindi mi riferisco solo all'elenco di pushCmd() ripetute... Forse si potrebbero definire le sequence come array di comandi e scrivere una routine del tipo:

Code: [Select]

sub pushSequence(array di comandi cmdAry):
    for i = 0 to lungh di cmdAry - 1
       mystrip.pushCmd(cmdAry[i])
    end for
end sub


Le lunghe sequence di pushCmd verrebbero sostituite da una singola chiamata a pushSequence() con la sequence desiderata.

(edit: avevo dimenticato i code tags)

OWENlab

grazie 1000!!!
ora sembra che funzioni!
con la nuova IDE e la tua libreria funziona anche il codice generato da questo software
http://www.wright-online.com/Drupal/?q=node/3

lascio il link nel caso qualcun'altro volesse cimentarsi nell'esperimento!

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy