Nyheter i Android, Telefoner, Prylar Och Recensioner

An Arduino Project: How To Make Flashy Christmas Lights Ornaments

Detta är nästa del i vår lärande Arduino-serie, och den här gången kommer vi att lära oss 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 sysselsatta om du vill lära dem grundläggande lödning – montera bara lysdioderna på en bit kort så kan du få ström från ett standard 9V-batteri.

Det är också en nyckellektion i Arduino-programmering för nybörjare, men om du inte planerar att faktiskt använda det här som en prydnad skulle jag starkt föreslå att du tar bort det i alla fall.

Obs: Det här är en handledning på mycket nybörjarnivå och vi kommer verkligen inte att bryta någon ny mark – det är det? bara en enhet för att lära ut begreppen att använda Arrayer och För slingor att ta itu med en stort antal lysdioder (eller andra utgångsenheter).

Om du inte redan har gjort det, skulle nu vara ett bra tillfälle att följa med de andra artiklarna i serien:

För det här projektet behöver du å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 anslutningskablar. Startpaketet från Ooomlout, som jag nyligen köpte själv och är avbildat i denna handledning, erbjuder bra valuta för pengarna och har fler lysdioder och motstånd än du någonsin kommer att behöva, samt kommer med en snygg breadboard och Arduino-fodral för att hålla saker och ting städa.

Här är det sista:

Och en video av det i aktion.

Här ser du kablarna från Fritzing. Det är väldigt grundläggande – koppla bara den positiva ledningen på lysdioderna till stiften 2-> vad som helst (upp till stift 13), och anslut de negativa benen till jorden inline med ett motstånd. Värdet jag har använt här är 560 ohm. Det är det för ledningar.

Relaterad  Ragnarök Online Prime har en ny ras av krigskatter

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

int led1 = 2; // first LED on pin 2

int led2 = 3; // second on pin 3

// etc etc

void loop(){

digitalWrite(led1,HIGH);

delay(100);

digitalWrite(led1,LOW);

delay(100);

digitalWrite(led2,HIGH);

// etc

}

Du borde kunna se att med 9 lysdioder kommer detta snabbt att bli tröttsamt. Svaret ligger hos Arrayer, som om du inte kommer ihåg vår programmering 101 om grundläggande datatyper – är i princip bara listor.

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

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

De fyrkantiga parenteserna indikerar att ?leds? variabel kommer att vara en Array. De lockiga hängslen omsluter listan med pin-nummer som vår array kommer att hålla.

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

Du skriver så här:

leds[0]

Vilket i vårt fall skulle hämta siffran 2, för det är vad som står vid index 0 i vår array.

Följer du hittills? Bra. Det ensamma är dock inte tillräckligt för oss – vi behöver också ett sätt att iterera över varje element i vår 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:

for(initial variable; condition under which we repeat again; change to variable each iteration)

Till exempel:

for(int i = 0; i<9; i++)

Vilket säger

starta denna loop med en variabel, i, som har ett värde av noll- fortsätt bara loopa medan i är mindre än 9?(alltså: 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)

Relaterad  35 cykel bakgrundsbilder hd för skrivbordet gratis nedladdning

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

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

void setup(){

for(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 kod för att deklarera varje enskild stift som utdata, skapar vi en ‘för’-slinga som upprepar sig själv 9 gånger, varje gång du sätter en annan stift.

Nu borde du kunna se hur vi kunde göra exakt samma sak i huvudprogramslingan för att tända varje lysdiod i sekvens:

void loop(){

for(int i = 0;i< 9;i++){

digitalWrite(leds[i],HIGH);

delay(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 hellre inte vill skriva ut den igen (även om jag uppmuntrar dig att göra det, eftersom det hjälper inlärningsprocessen).

Okej, så nu har vi en ganska tråkig ljussekvens. Låt oss programmera en till. Bara för skojs skull, låt oss göra det helt slumpmässigt. Byt ut huvudslingkoden med denna:

void loop(){

int randomLed = random(0,8);

digitalWrite(leds[randomLed],HIGH);

delay(50);

randomLed = random(0,8);

digitalWrite(leds[randomLed],LOW);

}

Istället för att använda en “för”-slinga för att iterera över varje lysdiod, väljer vi ett slumpmässigt tal från 0-9 istället och blinkar det på.

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

Relaterad  Se videon från 1972 års Apollo 16 månrovertur i 4K och färgad

Frågor, förslag, problem – vänligen kontakta i kommentarerna.

Om författaren

James Bruce (720 publicerade artiklar)

James har en BSc i artificiell intelligens och är CompTIA A+ och Network+ certifierad. När han inte är upptagen som Hardware Review Editor, gillar han LEGO, VR och brädspel. Innan han började på MakeUseOf var han ljustekniker, engelskalärare och datacenteringenjör.

Mer från James Bruce

Prenumerera på vårt nyhetsbrev

Gå med i vårt nyhetsbrev för tekniska tips, recensioner, free e-böcker och exklusiva erbjudanden!

Klicka här för att prenumerera