Digital Light Wand - Striscia led programmabile per light painting

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!!!!!

sketch_LIGHT_WAND2.ino (289 KB)

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:

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

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

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.

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 :frowning:

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:

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! :frowning:

grazie 1000 del prezioso aiuto!!!

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".

LedStrip.zip (3.89 KB)

sketch_LIGHT_WAND2.ino (286 KB)

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:

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)

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!