Pages: [1]   Go Down
Author Topic: Digital Light Wand - Striscia led programmabile per light painting  (Read 622 times)
0 Members and 1 Guest are viewing this topic.
Turin
Offline Offline
Newbie
*
Karma: 0
Posts: 20
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 (288.73 KB - downloaded 6 times.)
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 104
Posts: 6607
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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:
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:
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.
« Last Edit: November 15, 2012, 11:46:33 am by PaoloP » Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Turin
Offline Offline
Newbie
*
Karma: 0
Posts: 20
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-sad

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:
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! smiley-sad

grazie 1000 del prezioso aiuto!!!
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 104
Posts: 6607
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 - downloaded 4 times.)
* sketch_LIGHT_WAND2.ino (285.96 KB - downloaded 4 times.)
« Last Edit: November 16, 2012, 04:39:54 am by PaoloP » Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Edison Member
*
Karma: 26
Posts: 1339
You do some programming to solve a problem, and some to solve it in a particular language. (CC2)
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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)
« Last Edit: November 16, 2012, 07:44:12 am by tuxduino » Logged

Turin
Offline Offline
Newbie
*
Karma: 0
Posts: 20
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Pages: [1]   Go Up
Jump to: