1 – Lauflicht mit Neopixeln programmieren
Lauflicht mit Neopixeln programmieren
Das lernst du hier
Programmiere ein einfaches Lauflicht auf einer Neopixel Matrix oder auf einem Stripe. Verwende dazu eine For-Schleife oder auf Deutsch: Eine zähle-von-bis Schleife.
Neopixel Matrix anschliessen
Für das Anschliessen, gehe auch zur Seite: PGLU > Bau > Neopixel > Für Bauanleitung hier klicken
Eine Pixelgruppe in einer Farbe leuchten lassen
Wie geht das?
Egal, ob du mit einer Matrix oder einem Stripe arbeitest, bei Neopixeln sind die Pixel der Reihe nach nummeriert. In deinem Sketch kannst du diese Nummern nutzen, um jede einzelne LED in einer eigenen Farbe leuchten zu lassen. Bei der Matrix sind die Pixel in einer Schlangenlinie angeordnet.
Lasse vier Pixel ab Pixel Nr.5 in “aqua” leuchten und verwende die Farben in º aus diesem Farbkreis:
Challenge:
<xml xmlns="https://developers.google.com/blockly/xml"><block type="basic_comment" id="XjX.XnAUE($w%aeQ%=F3" x="-505" y="-85"><field name="COMMENT">Dieser Block muss nicht in den Hauptloop eingesetzt werden. &#10;Hier kannst du die Anzahl Pixel einstellen, die deine Matrix oder dein Stripe hat.</field></block><block type="set_neo_pixel" id="I`^biUhO1LmL1hH1oz-/" x="12" y="-78"><value name="NUM_LEDS"><block type="math_number" id=";w$YmxxVz2X7P-I}c08d"><field name="NUM">16</field></block></value><value name="BRIGHTNESS"><block type="math_number" id="QUQ`.VUj%Y]+XS@JxovV"><field name="NUM">50</field></block></value><value name="OUTTURN"><block type="led_pin" id="VNE?$S@C9E*CH9+A1P?}"><field name="LED">LED1</field></block></value></block><block type="basic_main_loop" id="KlJsKVB#*Pt72$iMt?Kg" deletable="false" x="10" y="10"><value name="BLINK"><block type="basic_blinkcode" id="Fg`kPuq`MbnaEqeK*|rR"><field name="SHORT">1</field><field name="LONG">1</field></block></value></block><block type="basic_comment" id=":kgG`H2-%JCRVWHEgqy=" x="-271" y="133"><field name="COMMENT">Setze diese Blöcke in den Hauptloop ein</field></block><block type="set_pixel_color" id="/:k]f~MIBX(Tz~ek(Jj_" x="11" y="129"><field name="MODE">MODE1</field><value name="S"><block type="math_number" id="jGE{4{@_uo-.A6V)5.|n"><field name="NUM">100</field></block></value><value name="B"><block type="math_number" id="KfOet:4ZOIMWE*7cJu?;"><field name="NUM">100</field></block></value></block><block type="math_number" id="0gceFb|S!=DA)Egolg{s" x="8" y="218"><field name="NUM">1</field></block><block type="math_number" id="yEi$yzF/lNg%VwxsY2F}" x="7" y="274"><field name="NUM">1</field></block><block type="math_number" id="Z/G9S::`^~:#[6k^.1wV" x="7" y="332"><field name="NUM">1</field></block></xml>
Mögliche Lösung:
<xml xmlns="https://developers.google.com/blockly/xml"><block type="set_neo_pixel" id="I`^biUhO1LmL1hH1oz-/" x="12" y="-78"><value name="NUM_LEDS"><block type="math_number" id=";w$YmxxVz2X7P-I}c08d"><field name="NUM">16</field></block></value><value name="BRIGHTNESS"><block type="math_number" id="QUQ`.VUj%Y]+XS@JxovV"><field name="NUM">50</field></block></value><value name="OUTTURN"><block type="led_pin" id="]`a=,^_pYB`G?r@@eT(V"><field name="LED">LED1</field></block></value></block><block type="basic_main_loop" id="KlJsKVB#*Pt72$iMt?Kg" deletable="false" x="10" y="10"><value name="BLINK"><block type="basic_blinkcode" id="Fg`kPuq`MbnaEqeK*|rR"><field name="SHORT">1</field><field name="LONG">1</field></block></value><statement name="CODE"><block type="set_pixel_color" id="/:k]f~MIBX(Tz~ek(Jj_"><field name="MODE">MODE1</field><value name="FROM"><block type="math_number" id="0gceFb|S!=DA)Egolg{s"><field name="NUM">5</field></block></value><value name="TO"><block type="math_number" id="yEi$yzF/lNg%VwxsY2F}"><field name="NUM">4</field></block></value><value name="H"><block type="math_number" id="Z/G9S::`^~:#[6k^.1wV"><field name="NUM">180</field></block></value><value name="S"><block type="math_number" id="jGE{4{@_uo-.A6V)5.|n"><field name="NUM">100</field></block></value><value name="B"><block type="math_number" id="KfOet:4ZOIMWE*7cJu?;"><field name="NUM">100</field></block></value></block></statement></block></xml>
Einfaches Lauflicht mit Schleife programmieren
Wie geht das?
Ein Lauflicht ist eine Abfolge leuchtender Pixel, die der Reihe nach kurz aufleuchten. Dafür setzest du anstelle einer fixen Pixel-Nummer eine Variable ein. Diese wird dann langsam von 1 bis 16 hochgezählt, damit die entsprechende LED leuchtet.
Was ist eine Variable? Stelle sie dir als Gefäss vor, in das du bei jedem Durchlauf eine andere Zahl legen kannst.
Challenge:
<xml xmlns="https://developers.google.com/blockly/xml"><variables><variable id="eS}{?g:(Q8zcKD7tz;^h">Pixel</variable></variables><block type="set_neo_pixel" id="I`^biUhO1LmL1hH1oz-/" x="14" y="-76"><value name="NUM_LEDS"><block type="math_number" id=";w$YmxxVz2X7P-I}c08d"><field name="NUM">16</field></block></value><value name="BRIGHTNESS"><block type="math_number" id="QUQ`.VUj%Y]+XS@JxovV"><field name="NUM">50</field></block></value><value name="OUTTURN"><block type="led_pin" id="da]KMv`?5()wDn[~`bi{"><field name="LED">LED1</field></block></value></block><block type="basic_main_loop" id="KlJsKVB#*Pt72$iMt?Kg" deletable="false" x="13" y="9"><value name="BLINK"><block type="basic_blinkcode" id="Fg`kPuq`MbnaEqeK*|rR"><field name="SHORT">1</field><field name="LONG">1</field></block></value></block><block type="flow_for" id="C`:g9J~_4f8:G!N,,b~v" x="15" y="157"><field name="VAR" id="eS}{?g:(Q8zcKD7tz;^h">Pixel</field><value name="FROM"><block type="math_number" id="?v;%OwL1=+@!4)u;neeV"><field name="NUM">1</field></block></value><value name="TO"><block type="math_number" id="JK(r)N`W2m9lfmFq9`~5"><field name="NUM">16</field></block></value><value name="BY"><block type="math_number" id="*psy*PHx}?`NTk8{^)(:"><field name="NUM">1</field></block></value></block><block type="set_pixel_color" id="/:k]f~MIBX(Tz~ek(Jj_" x="14" y="277"><field name="MODE">MODE1</field><value name="TO"><block type="math_number" id="yEi$yzF/lNg%VwxsY2F}"><field name="NUM">1</field></block></value><value name="H"><block type="math_number" id="Z/G9S::`^~:#[6k^.1wV"><field name="NUM">180</field></block></value><value name="S"><block type="math_number" id="jGE{4{@_uo-.A6V)5.|n"><field name="NUM">100</field></block></value><value name="B"><block type="math_number" id="KfOet:4ZOIMWE*7cJu?;"><field name="NUM">100</field></block></value></block><block type="basic_comment" id="#Mcf2pjukt%MCJSZn5n/" x="-457" y="375"><field name="COMMENT">Dies ist eine Variable, wie ein Gefäss, in das du eine Zahl legen kannst</field></block><block type="variables_get" id="5e)1Rnoy,)jXA!k^{SHe" x="9" y="372"><field name="VAR" id="eS}{?g:(Q8zcKD7tz;^h">Pixel</field></block><block type="basic_comment" id="D#%mV,H[FT{1kgaa)`}[" x="-257" y="461"><field name="COMMENT">Verlangsame damit dein Lauflicht ></field></block><block type="flow_delay" id="KOS:*.dN7CtqtSSneb*^" x="15" y="455"><value name="DELAY"><block type="math_number" id="i)69haVI]].um(;@T~vS"><field name="NUM">50</field></block></value></block></xml>
Mögliche Lösung:
<xml xmlns="https://developers.google.com/blockly/xml"><variables><variable id="eS}{?g:(Q8zcKD7tz;^h">Pixel</variable></variables><block type="set_neo_pixel" id="I`^biUhO1LmL1hH1oz-/" x="14" y="-76"><value name="NUM_LEDS"><block type="math_number" id=";w$YmxxVz2X7P-I}c08d"><field name="NUM">16</field></block></value><value name="BRIGHTNESS"><block type="math_number" id="QUQ`.VUj%Y]+XS@JxovV"><field name="NUM">50</field></block></value><value name="OUTTURN"><block type="led_pin" id="p=zJE4axQ3MilowGiqp_"><field name="LED">LED1</field></block></value></block><block type="basic_main_loop" id="KlJsKVB#*Pt72$iMt?Kg" deletable="false" x="13" y="9"><value name="BLINK"><block type="basic_blinkcode" id="Fg`kPuq`MbnaEqeK*|rR"><field name="SHORT">1</field><field name="LONG">1</field></block></value><statement name="CODE"><block type="flow_for" id="C`:g9J~_4f8:G!N,,b~v"><field name="VAR" id="eS}{?g:(Q8zcKD7tz;^h">Pixel</field><value name="FROM"><block type="math_number" id="?v;%OwL1=+@!4)u;neeV"><field name="NUM">1</field></block></value><value name="TO"><block type="math_number" id="JK(r)N`W2m9lfmFq9`~5"><field name="NUM">16</field></block></value><value name="BY"><block type="math_number" id="*psy*PHx}?`NTk8{^)(:"><field name="NUM">1</field></block></value><statement name="DO"><block type="set_pixel_color" id="/:k]f~MIBX(Tz~ek(Jj_"><field name="MODE">MODE1</field><value name="FROM"><block type="variables_get" id="5e)1Rnoy,)jXA!k^{SHe"><field name="VAR" id="eS}{?g:(Q8zcKD7tz;^h">Pixel</field></block></value><value name="TO"><block type="math_number" id="yEi$yzF/lNg%VwxsY2F}"><field name="NUM">1</field></block></value><value name="H"><block type="math_number" id="Z/G9S::`^~:#[6k^.1wV"><field name="NUM">180</field></block></value><value name="S"><block type="math_number" id="jGE{4{@_uo-.A6V)5.|n"><field name="NUM">100</field></block></value><value name="B"><block type="math_number" id="KfOet:4ZOIMWE*7cJu?;"><field name="NUM">100</field></block></value><next><block type="flow_delay" id="KOS:*.dN7CtqtSSneb*^"><value name="DELAY"><block type="math_number" id="i)69haVI]].um(;@T~vS"><field name="NUM">50</field></block></value></block></next></block></statement></block></statement></block></xml>
Experimentiere mit eigenen Zeiten und Farben oder lasse mehr als einen Pixel laufen. Schaffst du es, die Pixel vor- und wieder zurücklaufen zu lassen?
<xml xmlns="https://developers.google.com/blockly/xml"><variables><variable id="eS}{?g:(Q8zcKD7tz;^h">Pixel</variable></variables><block type="set_neo_pixel" id="I`^biUhO1LmL1hH1oz-/" x="14" y="-76"><value name="NUM_LEDS"><block type="math_number" id=";w$YmxxVz2X7P-I}c08d"><field name="NUM">16</field></block></value><value name="BRIGHTNESS"><block type="math_number" id="QUQ`.VUj%Y]+XS@JxovV"><field name="NUM">50</field></block></value><value name="OUTTURN"><block type="led_pin" id="u1dc+oGaTTaM/5y~GQ?6"><field name="LED">LED1</field></block></value></block><block type="basic_main_loop" id="KlJsKVB#*Pt72$iMt?Kg" deletable="false" x="13" y="9"><value name="BLINK"><block type="basic_blinkcode" id="Fg`kPuq`MbnaEqeK*|rR"><field name="SHORT">1</field><field name="LONG">1</field></block></value><statement name="CODE"><block type="flow_for" id="C`:g9J~_4f8:G!N,,b~v"><field name="VAR" id="eS}{?g:(Q8zcKD7tz;^h">Pixel</field><value name="FROM"><block type="math_number" id="?v;%OwL1=+@!4)u;neeV"><field name="NUM">1</field></block></value><value name="TO"><block type="math_number" id="JK(r)N`W2m9lfmFq9`~5"><field name="NUM">16</field></block></value><value name="BY"><block type="math_number" id="*psy*PHx}?`NTk8{^)(:"><field name="NUM">1</field></block></value><statement name="DO"><block type="set_pixel_color" id="/:k]f~MIBX(Tz~ek(Jj_"><field name="MODE">MODE1</field><value name="FROM"><block type="variables_get" id="5e)1Rnoy,)jXA!k^{SHe"><field name="VAR" id="eS}{?g:(Q8zcKD7tz;^h">Pixel</field></block></value><value name="TO"><block type="math_number" id="yEi$yzF/lNg%VwxsY2F}"><field name="NUM">1</field></block></value><value name="H"><block type="math_number" id="Z/G9S::`^~:#[6k^.1wV"><field name="NUM">180</field></block></value><value name="S"><block type="math_number" id="jGE{4{@_uo-.A6V)5.|n"><field name="NUM">100</field></block></value><value name="B"><block type="math_number" id="KfOet:4ZOIMWE*7cJu?;"><field name="NUM">100</field></block></value><next><block type="flow_delay" id="KOS:*.dN7CtqtSSneb*^"><value name="DELAY"><block type="math_number" id="i)69haVI]].um(;@T~vS"><field name="NUM">50</field></block></value></block></next></block></statement><next><block type="flow_for" id="dTtV8yodx_oKCULNNWpw"><field name="VAR" id="eS}{?g:(Q8zcKD7tz;^h">Pixel</field><value name="FROM"><block type="math_number" id="D_jneI8d}[j7B+d`rL1h"><field name="NUM">16</field></block></value><value name="TO"><block type="math_number" id="K%`ggB/oc9$5f0gZ^)Ou"><field name="NUM">1</field></block></value><value name="BY"><block type="math_number" id="xENq+^2]rylSgL__iPi4"><field name="NUM">1</field></block></value><statement name="DO"><block type="set_pixel_color" id="e52RPHLK|Dk6BrfdF~$!"><field name="MODE">MODE1</field><value name="FROM"><block type="variables_get" id="dOGG]+}1s3dEam?rQAFl"><field name="VAR" id="eS}{?g:(Q8zcKD7tz;^h">Pixel</field></block></value><value name="TO"><block type="math_number" id="!8m?QA4gYM#]NA_Ly?)H"><field name="NUM">1</field></block></value><value name="H"><block type="math_number" id="#tTV0zw#4frp_td5^pkU"><field name="NUM">180</field></block></value><value name="S"><block type="math_number" id="[4pX#s;l(VXYfphVg)X="><field name="NUM">100</field></block></value><value name="B"><block type="math_number" id="faL)P3sS$#iFwb3,sLbs"><field name="NUM">100</field></block></value><next><block type="flow_delay" id="%OdQ?I/^#d==M^EH$029"><value name="DELAY"><block type="math_number" id="tJY0{k3}O6hc%H_g*2:{"><field name="NUM">50</field></block></value></block></next></block></statement></block></next></block></statement></block></xml>
Lauflicht Dimmeffekt programmieren
Wie geht das?
Auf der Seite Coding Neopixel findest du in den Videos 6 (Matrix) und 12 (Stripe) ein weiteres Lauflicht, mit einem tollen Dimmeffekt. Kannst du dieses Programm verstehen und so anpassen, dass es zu deinem Projekt passt?
Erweitere den Sketch so, dass das Lauflicht vorwärts- und wieder zurückläuft!
Challenge:
<xml xmlns="https://developers.google.com/blockly/xml"><variables><variable id="eS}{?g:(Q8zcKD7tz;^h">Pixel</variable><variable id="v)J6M+dOHkmkfEQYcH*e">zu dimmende Pixel</variable></variables><block type="set_neo_pixel" id="I`^biUhO1LmL1hH1oz-/" x="14" y="-76"><value name="NUM_LEDS"><block type="math_number" id=";w$YmxxVz2X7P-I}c08d"><field name="NUM">16</field></block></value><value name="BRIGHTNESS"><block type="math_number" id="QUQ`.VUj%Y]+XS@JxovV"><field name="NUM">50</field></block></value><value name="OUTTURN"><block type="led_pin" id="G!2B[1b1*Q(Ei]r_.3;T"><field name="LED">LED1</field></block></value></block><block type="basic_main_loop" id="KlJsKVB#*Pt72$iMt?Kg" deletable="false" x="13" y="9"><value name="BLINK"><block type="basic_blinkcode" id="Fg`kPuq`MbnaEqeK*|rR"><field name="SHORT">1</field><field name="LONG">1</field></block></value><statement name="CODE"><block type="flow_for" id="C`:g9J~_4f8:G!N,,b~v"><field name="VAR" id="eS}{?g:(Q8zcKD7tz;^h">Pixel</field><value name="FROM"><block type="math_number" id="?v;%OwL1=+@!4)u;neeV"><field name="NUM">1</field></block></value><value name="TO"><block type="math_number" id="JK(r)N`W2m9lfmFq9`~5"><field name="NUM">16</field></block></value><value name="BY"><block type="math_number" id="*psy*PHx}?`NTk8{^)(:"><field name="NUM">0.05</field></block></value><statement name="DO"><block type="set_pixel_color" id="/:k]f~MIBX(Tz~ek(Jj_"><field name="MODE">MODE2</field><value name="FROM"><block type="variables_get" id="5e)1Rnoy,)jXA!k^{SHe"><field name="VAR" id="eS}{?g:(Q8zcKD7tz;^h">Pixel</field></block></value><value name="TO"><block type="math_number" id="yEi$yzF/lNg%VwxsY2F}"><field name="NUM">1</field></block></value><value name="H"><block type="math_number" id="Z/G9S::`^~:#[6k^.1wV"><field name="NUM">170</field></block></value><value name="S"><block type="math_number" id="jGE{4{@_uo-.A6V)5.|n"><field name="NUM">100</field></block></value><value name="B"><block type="math_number" id="KfOet:4ZOIMWE*7cJu?;"><field name="NUM">100</field></block></value><next><block type="flow_for" id="{@G{.Dqtcy6^v$NmDG/o"><field name="VAR" id="v)J6M+dOHkmkfEQYcH*e">zu dimmende Pixel</field><value name="FROM"><block type="math_number" id="c*C^o}]fOxn=B4}KEyjj"><field name="NUM">1</field></block></value><value name="TO"><block type="math_number" id="MkT,Os)0O28yfq)uqqx)"><field name="NUM">16</field></block></value><value name="BY"><block type="math_number" id="ySs:_q7y?{`#nWi^?yRT"><field name="NUM">1</field></block></value><statement name="DO"><block type="set_dimming_pixels" id="Q5[}Q?T,np2NpY)2pu,4"><value name="PIXEL"><block type="variables_get" id="/)Q4#,0U7!fij#ck_DpM"><field name="VAR" id="v)J6M+dOHkmkfEQYcH*e">zu dimmende Pixel</field></block></value><value name="PERCENT"><block type="math_number" id="1~p$|QwJwGb.vFoK~VrD"><field name="NUM">2</field></block></value></block></statement><next><block type="fast_led" id="39yO4t2m%SJq/6|.8)RO"><next><block type="flow_delay" id="KOS:*.dN7CtqtSSneb*^"><value name="DELAY"><block type="math_number" id="i)69haVI]].um(;@T~vS"><field name="NUM">10</field></block></value></block></next></block></next></block></next></block></statement></block></statement></block><block type="basic_comment" id="I]01l~^hbZDTYz,XAeG~" x="-274" y="38"><field name="COMMENT">Weil die Schrittweite nur 0.05 ist, leuchtet&#10;erst nach 20 Durchläufen der nächste Pixel</field></block><block type="basic_comment" id="ELn%?50j`,Vwas3bh4(l" x="-259" y="125"><field name="COMMENT">Jeder der 16 Pixel wird um 2% gedimmt.&#10;Egal, wie hell er gerade ist!</field></block><block type="basic_comment" id="8)R?q$JJ)m#%N:DhMU8Z" x="-246" y="250"><field name="COMMENT">Diese Pause verlangsamt den Vorgang</field></block></xml>
Anforderung:
✓ Einfach bis Mittel
✓ Bauen ohne Werkstatt
Thema:
> Programm steuert Zahlen
> Programmablauf mit verschachtelten Bedingungen
Werkzeug:
> Lötstation
Material:
> Controller: pglu.ch/shop > Mikrocontroller KOMFORT oder PIXEL
> Neopixel: pglu.ch/shop > Elektronik > MATRIX
Anleitung Neopixel:
> Neopixel bauen: pglu.ch > BAU > NEOPIXEL
> Neopixel programmieren: pglu.ch > CODING > NEOPIXEL
> Matrix Designer: pglu.ch > CODING > MATRIX
3D-Modell:
> Hier anschauen
Videos:
> Neopixel: pglu.ch > CODING > NEOPIXEL
Basics:
> Lernumgebung aufbauen: pglu.ch > ANLEITUNG
> XML in Editor importieren: pglu.ch > ANLEITUNG > EDITOR
Editor:
> Online: mach.pglu.ch
> Teacher’s Box: mach.pglu.box
Erweiterungen:
> Matrix Designer: pglu.ch > CODING > MATRIX Designer
> Weiteres: pglu.ch > HILFREICHE DOKUMENTE
Arduino Uno:
> Diese Challenge mit dem Arduino Uno