Annons

arduino julbelysningDet här är nästa del i vår lärande Arduino-serie, och den här gången vi? Jag ska lära mig om och använda arrayer att göra en liten julgransprydnad med olika blinkande sekvenser. Detta skulle vara ett idealiskt projekt för att hålla barnen upptagna om du vill lära dem grundläggande lödning - montera bara lysdioderna på ett kort och du kan få ström från ett standard 9v-batteri.

Det är också en viktig lektion i Arduino-nybörjsprogrammering, men om du inte planerar att använda det här som prydnad skulle jag starkt föreslå att du gör det.

Obs! Detta är en väldigt nybörjare och vi vann verkligen? t bryter någon ny mark - det? s? bara en enhet för att lära sig begreppen att använda arrayer och För öglor att hantera en stort antal lysdioder (eller andra utgångsenheter).

Om du inte har det? t redan, nu skulle det vara en bra tid att följa med de andra artiklarna i serien:

  • Vad är Arduino och vad kan du göra med det Vad är Arduino och vad kan du göra med det?Arduino är en anmärkningsvärd liten elektronikapparat, men om du aldrig har använt en förut, precis vad är de exakt och vad kan du göra med en?
    instagram viewer
    Läs mer
    ?
  • Vad är ett Arduino-startpaket och vad innehåller det? Vad ingår i ett Arduino-startpaket? [MakeUseOf Explains]Jag har tidigare introducerat Arduino-open source-hårdvaran här på MakeUseOf, men du kommer att behöva mer än bara själva Arduino för att bygga något ur det och faktiskt komma igång. Arduino "startpaket" är ... Läs mer
  • Fler coola komponenter att köpa med din startpaket 8 fler coola komponenter för dina Arduino-projektSå du funderar på att få ett Arduino-startpaket, men undrar om några grundläggande lysdioder och motstånd kommer att räcka för att hålla dig upptagen till helgen? Antagligen inte. Här är ytterligare 8 ... Läs mer
  • Komma igång med ditt Arduino-startpaket? Installera drivrutiner och ställa in styrelsen och porten Komma igång med ditt Arduino-startpaket - Installera drivrutiner och ställa in styrelsen och portenSå du har köpt dig ett Arduino-startpaket och eventuellt andra slumpmässiga coola komponenter - vad nu? Hur kommer du faktiskt igång med att programmera den här Arduino-saken? Hur ställer du in det ... Läs mer
  • Fritzing, ett gratis verktyg för ritning av kretsscheman Fritzing - det ultimata verktyget för att skissa ut elektronikprojekt [Cross Platform]Trots att det låter som en alcopop är Fritzing faktiskt en otrolig lite gratis programvara du kan använda för att skapa krets- och komponentdiagram för användning med snabbprototyper av elektronikbrädor som den fantastiska open-source Arduino ... Läs mer
  • En närmare titt på strukturen i en Arduino-app och Blink-programmet Exempel Första steg med Arduino: En närmare titt på kretskortet och strukturen i ett programFörra gången lämnade jag dig efter att ha konfigurerat din Arduino för att fungera med Mac eller Windows, och ha laddat upp en enkel testapp som blinkade ombord-LED. Idag ska jag förklara koden ... Läs mer

För det här projektet, du? Jag behöver åtminstone 8 eller 9 lysdioder i antingen rött eller grönt, a motstånd för var och en av dem, a bakbord och några kopplingsledningar. Startpaketet från Ooomlout, som jag nyligen köpte själv och avbildas i den här självstudien, erbjuder stort värde för pengarna och har fler lysdioder och motstånd än du? Jag kommer någonsin att behöva, liksom att ha en snygg brödskiva och Arduino-fodral för att hålla saker snygga.

Här? det sista:

arduino julbelysning

Och en video av det i aktion.

Här? s en vy över ledningarna från Fritzing. Den? är väldigt grundläggande - anslut bara LED: s positiva ledning till stift 2-> oavsett (upp till stift 13) och anslut de negativa benen till marken i linje med ett motstånd. Värdet jag? vi har använt här är 560 Ohms. Det där? s det för ledningar.

arduino julbelysning

Tänk på mjukvarusidan hur du kan skriva till alla dessa lysdioder i koden. Du kan göra det så här:

int led1 = 2; // första LED på stift 2. int led2 = 3; // sekund på stift 3. // etc etc void loop () {digitalWrite (led1, HIGH); fördröjning (100); digitalWrite (led1, LOW); fördröjning (100); digitalWrite (led2, HIGH); // etc. }

Du borde kunna se att med 9 lysdioder kommer detta snabbt att bli trött. Svaret ligger hos arrayer, vilket om du kan? t minns vår Programmera 101 om grundläggande datatyper Grunderna i datorprogrammering 101 - variabler och datatyperEfter att ha introducerat och pratat lite om objektorienterad programmering innan och var dess namngivare kommer från, jag trodde att det är dags att vi går igenom de absoluta grunderna i programmering på ett icke-språkspecifikt sätt. Detta... Läs mer - är i princip bara listor.

Syntaxen ser så här ut (placera den som den första raden i din kod):

int leds [] = {2,3,4,5,6,7,8,9,10};

De fyrkantiga parenteserna indikerar att "ledsen"? variabel kommer att bli en Array. De lockiga hängslen inkluderar listan över stiftnummer som vår matris kommer att innehålla.

För att använda en array måste vi adressera det med indexnumret. De indexet börjar vid 0, och kommer därför alltid att gå upp till 1 mindre än det totala antalet saker inuti det (så med 9 artiklar skulle den sista ha ett index på 8).

Du skriver det så här:

lysdioder [0]

Vilket i vårt fall skulle hämta nummer 2, för det? s vad? s vid index 0 i vårt sortiment.

Följer hittills? Bra. Den ensamma är det inte? Men det är tillräckligt för oss - vi behöver också något sätt att iterera över varje element i våra LED-array. För det kommer vi att använda en för slinga. Syntaxen för att göra det är så här:

för (initial variabel; tillstånd under vilket vi upprepar igen; ändra till variabel varje iteration)

Till exempel:

för (int i = 0; i <9; i ++)

Som säger

  • starta den här slingan med en variabel, jag, som har ett värde av noll
  • fortsätt loopa bara medan jag är mindre än 9? (så: 0,1,2,3,4,5,6,7,8)
  • varje gång, lägg till 1 till i (i ++ är ett kort sätt att säga i = i + 1)

Så i princip kommer slingan att upprepas så många gånger som vi har lysdioder, och varje gång det? upprepas kommer vi att ha en variabel, jag, som vi kan använda hur vi än vill.

Vi? Jag kommer att använda den här strukturen två gånger till att börja med. Väl inne i installationsfunktionen för att få alla våra stift att vända sig till utgångsläget, så här:

void setup () {för (int i = 0; i <9; i ++) {pinMode (leds [i], OUTPUT); } }

Kan du se vad vi gjorde där? Istället för att skriva 9 rader med kod för att deklarera varje enskild stift som utgång, skapar vi en "för" -slinga för att upprepa sig själv 9 gånger, varje gång vi ställer in en annan pin.

Nu bör du kunna se hur vi kan göra exakt samma sak i huvudprogramslingan för att slå på varje lysdiod i följd:

void loop () {för (int i = 0; i <9; i ++) {digitalWrite (leds [i], HIGH); fördröjning (100); digitalWrite (leds [i], LOW); } }

Försök med det. Du kan ladda ner hela koden för dagens projekt härifrån om du? d snarare inte skriva ut det igen (även om jag uppmuntrar dig att, eftersom det hjälper inlärningsprocessen)

Okej, så nu har vi en ganska tråkig belysningssekvens. Låta? s program en annan. Bara för skojs skull, låt? s gör det helt slumpmässigt. Byt ut huvudslingkoden med den här:

void loop () { int randomLed = slumpmässigt (0,8); digitalWrite (leds [randomLed], HIGH); fördröjning (50); randomLed = random (0,8); digitalWrite (leds [randomLed], LOW); }

I stället för att använda en 'för' -slinga för att iterera över varje lysdiod väljer vi ett slumpmässigt nummer från 0-9 istället och blinkar det på.

Jag kommer att lämna det där idag, eftersom du nu bör vara beväpnad med tillräckligt med kunskap för att programmera alla nya sekvenser och experimentera med slingor. För att bevisa hur lätt det här är, utmanade jag min fru att tänka på en sekvens hon? gillar jag att se, och sedan fick?henne att programmera det själv, med bara koden och lektioner du? vi har hittills. Hon kom med detta, så se om du kan matcha det för läxor!

Frågor, förslag, problem - kontakta kommentarerna.

James har en kandidatexamen i artificiell intelligens och är CompTIA A + och Network + certifierad. Han är ledande utvecklare av MakeUseOf och tillbringar sin fritid med att spela VR-paintball och brädspel. Han har byggt datorer sedan han var liten.