Arduino Tutorial Bundle.: Arduino experimenterande Kit:. (ARDX) (4 / 13 steg)
Steg 4:.: 8 LED kul:. (Flera LED) - CIRC02
Vad vi gör:
Vi har orsakat en LED att blinka, nu är dags för att upp insatserna. Kan ansluta åtta. Vi har även en möjlighet att sträcka Arduino lite genom att skapa olika belysning sekvenser. Denna krets är också en trevlig setup att experimentera med skriva egna program och få en känsla för hur Arduino fungerar.
Tillsammans med kontrollera lysdioderna börja vi undersöka några enkla programmering metoder att hålla dina program små.
for() slingor - används när du vill köra en bit kod flera gånger.
matriser [] - används för att göra hantera variabler lättare (det är en grupp av variabler)
(du kan också hämta bladet bakbord layout från botten av detta steg)
Delarna:
- CIRC-02 bakbord blad
- 2 stift huvud (x4)
- 5mm grön LED (x8)
- 560 ohm Resistor (grön-blå-brun) (x8)
Kretsen och ansluta allt:
En liten Video av allt att vara inkopplad
Koden:
/* --------------------------------------------------------- * | Arduino experimenterande Kit exempel kod | * | CIRC-02.: 8 LED kul:. (Flera LED) | *---** Några enkla LED animationer ** mer information om denna krets http://tinyurl.com/d2hrud * * ///LED Pin Variablesint ledPins [] = {2,3,4,5,6,7,8,9}. En matris att hålla PIN-koden varje LED är ansluten till / / dvs LED #0 är ansluten till stift 2, LED #1, 3 och så på //to adress använder en array ledPins [0] Detta skulle motsvara 2 //and ledPins [7] skulle motsvara 9 / * * setup() - funktionen körs en gång när du slår din Arduino på * vi tre kontroll stiften till utgångarna * / void setup() {//Set varje pin ansluten till ledde till produktionen läge (dra hög (på) eller låg (av) för (int Jag = 0; Jag < 8. i ++) {//this är en loop och kommer att upprepa åtta gånger pinMode(ledPins[i],OUTPUT); //we används för att ange varje LED stift till utgång} //the kod ersätter understiger / * (kommenterade kod inte körs) * Detta är raderna ersätts av den for-slingan ovan de gör exakt det * samma sak en ovan bara använder mindre skriva pinMode (ledPins [0] OUTPUT); pinMode(ledPins[1],OUTPUT); pinMode(ledPins[2],OUTPUT); pinMode(ledPins[3],OUTPUT); pinMode(ledPins[4],OUTPUT); pinMode(ledPins[5],OUTPUT); pinMode(ledPins[6],OUTPUT); pinMode(ledPins[7],OUTPUT); (End of commented Code) * /} / * * loop() - denna funktion startar när installationen är klar och sedan upprepa * vi anropa en funktion som kallas oneAfterAnother(). Om du vill ha ett annorlunda beteende * avkommentera (ta bort två snedstreck) en av de andra raderna * / void loop() / / kör om och om igen {oneAfterAnotherNoLoop(); //this vilja vända på varje LED en efter en då vända bort / / oneAfterAnotherLoop(); //does samma som oneAfterAnotherNoLoop men med mycket mindre att skriva / / oneOnAtATime(); //this vilja vända en LED på då vända den nästa som på //former du inaktiverar (en LED kommer att se ut som det rulla längs linjen / / inAndOut(); //lights den två medelålders lysdioder då flyttar dem ut sedan tillbaka i igen} / * * oneAfterAnotherNoLoop() - kommer att lysa en LED sedan fördröja för fördröjningstid då ljus * nästa LED tills alla lysdioder är på det kommer sedan stänga av dem en efter en annan ** detta gör det utan att använda en slinga som gör för mycket att skriva. * oneOnAtATimeLoop() gör exakt samma sak med mindre att skriva * / void oneAfterAnotherNoLoop() {int fördröjningstid = 100; //the tid (i millisekunder) ska gå mellan lysdioder //make mindre för snabbare växling och större för långsammare digitalWrite (ledPins [0], hög), //Turns på LED #0 (ansluten till stift 2) delay(delayTime), //waits fördröjningstid millisekunder digitalWrite (ledPins [1], hög), //Turns på LED #1 (ansluten till nåla fast 3) delay(delayTime), //waits fördröjningstid millisekunder digitalWrite (ledPins [2] HÖG); Vänder på LED #2 (ansluten till stift 4) delay(delayTime); Waits fördröjningstid millisekunder digitalWrite (ledPins [3], hög); Tänds lysdiod #3 (ansluten till stift 5) delay(delayTime); Waits fördröjningstid millisekunder digitalWrite (ledPins [4], hög); Vänder på LED #4 (ansluten till stift 6) delay(delayTime); Waits fördröjningstid millisekunder digitalWrite (ledPins [5], hög); Vänder på LED #5 (ansluten till stift 7) delay(delayTime); Waits fördröjningstid millisekunder digitalWrite (ledPins [6], hög); Vänder på LED #6 (ansluten till stift 8) delay(delayTime); Waits fördröjningstid millisekunder digitalWrite (ledPins [7], hög); Vänder på LED #7 (ansluten till pin 9) delay(delayTime); väntar fördröjningstid millisekunder //Turns varje LED av digitalWrite (ledPins [7], låg); Vänder på LED #0 (ansluten till stift 2) delay(delayTime); Waits fördröjningstid millisekunder digitalWrite (ledPins [6], låg); Vänder på LED #1 (ansluten till stift 3) delay(delayTime); Waits fördröjningstid millisekunder digitalWrite (ledPins [5], låg); Vänder på LED #2 (ansluten till stift 4) delay(delayTime); Waits fördröjningstid millisekunder digitalWrite (ledPins [4], låg); Tänds lysdiod #3 (ansluten till stift 5) delay(delayTime); Waits fördröjningstid millisekunder digitalWrite (ledPins [3], låg); Vänder på LED #4 (ansluten till stift 6) delay(delayTime); Waits fördröjningstid millisekunder digitalWrite (ledPins [2], låg); Vänder på LED #5 (ansluten till stift 7) delay(delayTime); Waits fördröjningstid millisekunder digitalWrite (ledPins [1], låg); Vänder på LED #6 (ansluten till stift 8) delay(delayTime); Waits fördröjningstid millisekunder digitalWrite (ledPins [0], låg); Vänder på LED #7 (ansluten till pin 9) delay(delayTime); väntar fördröjningstid millisekunder} / * * oneAfterAnotherLoop() - kommer att lysa en LED sedan fördröja för fördröjningstid då ljus * nästa LED tills alla lysdioder är på det kommer sedan stänga av dem en efter en annan ** detta gör det med hjälp av en slinga som gör för en mycket mindre att skriva. * än oneOnAtATimeNoLoop() gör exakt samma sak med mindre att skriva * / void oneAfterAnotherLoop() {int fördröjningstid = 100; //the tid (i millisekunder) ska gå mellan lysdioder //make mindre för snabbare växling och större för långsammare / / aktivera varje LED efter varandra för (int jag = 0; jag < = 7; i ++) {digitalWrite (ledPins [i], hög), //Turns på LED #i varje gång detta kör jag delay(delayTime), //gets en tillsatt till det så upprepas} //8 gånger första gången jag kommer = 0 den sista //time jag kommer att motsvara 7; //Turn var ledde bort en efter en för (int jag = 7; jag > = 0; i--) {//same som ovan men snarare än början på 0 och räknar upp //we börja vid sju och räkna ner digitalWrite (ledPins [i], låg), //Turns av LED #i varje gång detta kör jag delay(delayTime), //gets en subtraheras från det så upprepas} //8 gånger första gången jag kommer = 7 den sista //time jag kommer att vara lika med 0. } / * * oneOnAtATime() - kommer att lätta ledde sedan nästa stänga av alla andra * / void oneOnAtATime() {int fördröjningstid = 100; //the tid (i millisekunder) ska gå mellan lysdioder //make mindre för snabbare växling och större för långsammare för (int jag = 0; jag < = 7; i ++) {int offLED = i - 1; //Calculate som LED vändes på senaste tiden genom if(i == 0) {//for jag = 1 till 7 detta är jag minus 1 (dvs. om jag = 2 kommer vi att offLED = 7. //turn på LED 2 och av LED 1)} //however om jag = 0 vi inte vill vända på led -1 (inte finns) //instead vi stänga av LED 7, (looping runt) digitalWrite (ledPins [i], hög); slå på LED #i digitalWrite (ledPins [offLED], låg); stänga av lampan vi vände på senaste tid delay(delayTime); }} / * * inAndOut() - Detta kommer att slå på de två mellersta lysdioderna då två ut * att göra en in och ut ser * / void inAndOut() {int fördröjningstid = 100; //the tid (i millisekunder) ska gå mellan lysdioder //make mindre för snabbare växling och större för långsammare //runs LEDs ut från mitten för (int jag = 0; jag < = 3; i ++) {int offLED = i - 1; //Calculate som LED vändes på senaste tiden genom if(i == 0) {//for jag = 1 till 7 är Jag minus 1 (dvs. om jag = 2 kommer vi att offLED = 3; //turn på LED 2 och av LED 1)} //however om jag = 0 vi inte vill vända på led -1 (inte finns) //instead vi stänga av LED 7, (looping runt) int onLED1 = 3 - i. Detta är den första lysdioden gå på dvs. Lysdiod #3 när jag = 0 och LED #0 när jag = 3 int onLED2 = 4 + i. Detta är den första lysdioden gå på dvs. Laddningslysdiod #4 när jag = 0 och LED #7 när jag = 3 int offLED1 = 3 - offLED; släcks LED vi vände på sista tiden int offLED2 = 4 + offLED; släcks LED vi vände på senaste tid digitalWrite (ledPins [onLED1], hög); digitalWrite (ledPins [onLED2], hög); digitalWrite (ledPins [offLED1], låg); digitalWrite (ledPins [offLED2], låg); Delay(delayTime); } //runs lysdioder i mitten för (int jag = 3; jag > = 0; i--) {int offLED = i + 1; //Calculate som LED vändes på senaste tiden genom if(i == 3) {//for jag = 1 till 7 detta är jag minus 1 (dvs. om jag = 2 kommer vi att offLED = 0; //turn på LED 2 och av LED 1)} //however om jag = 0 vi inte vill vända på led -1 (inte finns) //instead vi stänga av LED 7 , (looping runt) int onLED1 = 3 - i. Detta är den första lysdioden gå på dvs. Lysdiod #3 när jag = 0 och LED #0 när jag = 3 int onLED2 = 4 + i. Detta är den första lysdioden gå på dvs. Laddningslysdiod #4 när jag = 0 och LED #7 när jag = 3 int offLED1 = 3 - offLED; släcks LED vi vände på sista tiden int offLED2 = 4 + offLED; släcks LED vi vände på senaste tid digitalWrite (ledPins [onLED1], hög); digitalWrite (ledPins [onLED2], hög); digitalWrite (ledPins [offLED1], låg); digitalWrite (ledPins [offLED2], låg); Delay(delayTime); }}
Inte fungerar?
- Some lysdioder misslyckas med att ljus - det är lätt att infoga en LED bakåt. Kontrollera lamporna som inte fungerar och se till att de på rätt sätt runt.
- Fungerande fel ordning - med åtta trådar är det lätt att passera ett par. Dubbelkolla som första LED är ansluten till stift 2 och varje pin det efter.
- Börjar om från början - det är lätt att oavsiktligt tappar bort en tråd utan att märka. Allt, och den börjar med ett färskt blad är ofta lättare än att försöka spåra upp problemet.
Att göra det bättre:
Byte till loopar:
i funktionen loop() finns 4 rader. Sista tre alla börja med en "/ /" Detta innebär raden behandlas som en kommentar (inte köras). Om du vill växla använda ändra loopar void loop() koden för att:
oneAfterAnotherNoLoop(); oneAfterAnotherLoop(); oneOnAtATime(); inAndOut();
Ladda upp programmet, och märker att ingenting har förändrats. Du kan ta en titt på de två funktionerna, alla gör samma sak, men olika metoder (tips för det andra använder en for-loop)
Extra animeringar:
Trött på denna animering? Försök sedan de andra två animeringsexempel. Avkommentera deras linjer och ladda upp programmet till din styrelse och njuta av de nya ljus animationerna. (ta bort snedstrecken framför rad 3 och 4)
Testa din egen animationer:
Hoppa till den medföljande kod och börja förändra saker. Den viktigaste punkten är att vända en LED på användning digitalWrite (pinNumber, hög); sedan att stänga av användning digitalWrite (pinNumber, låg);. Skriv bort, oavsett vad du ändrar du inte kommer att bryta något.