Øvelsesvejledning

Introduktion


I denne øvelse skal vi få en LED til at blinke, når man trykker på en knap. Selvom det lyder simpelt, er der nogle vigtige færdigheder at lære. Formålet med øvelsen er at give dig en forståelse for digitalt input og output, pull-down kredsløb, og simpel opbygning af kredsløb på breadboardet.


Udstyr


Til denne øvelse skal du bruge

  • Arduino
  • Breadboard
  • Lysdiode (LED)
  • 220 ohms modstand
  • 10 kiloohms modstand
  • Trykknap
  • 5 ledninger

Kredsløbene


I videoen ses to separate kredsløb; ét med en lysdiode og en 220 ohms modstand, og ét med en trykknap og en 10 kiloohms modstand. I kredsløbet med lysdioden skal der anvendes en modstand for at begrænse strømmen som løber gennem dioden. Hvis ikke modstanden var der, ville dioden højst sandsynligt brænde ud. I værste tilfælde kunne det også skade Arduinoen, så modstanden er vigtig. Som der bliver sagt i videoen kan man variere modstanden en smule, alt efter hvor meget dioden skal lyse.

Kredsløbet til højre består af en trykknap og en 10 kiloohms modstand, som bliver brugt som en såkaldt pull-down modstand. Begrebet pull-down beskriver, at signalet er logisk lavt, når knappen ikke er aktiveret, og logisk højt når knappen trykkes i bund. Når knappen ikke er aktiveret, er pin D7 kun forbundet til ground, som altid er 0V, hvilket svarer til logisk lavt. Når knappen aktiveres, er der et spændingsfald på 5V over modstanden, hvilket sikrer at der også er 5V på pin D7.

For at kredsløbet skal virke, skal komponenterne forbindes korrekt. Se på kredsløbsdiagrammet nedenunder, og forbind komponenterne på samme måde. Vær opmærksom på at 5V forbindes til den røde bane, og ground til den sorte.

HUSK: Dioden skal vende rigtigt. Det lange ben skal forbindes til D13.

Koden


Når Arduinos IDE åbnes, er der allerede skrevet to funktioner; Setup og Loop. Setup er en funktion som køres en enkelt gang når arduinoen tændes, og Loop er en funktion, som køres igen og igen.

Til at starte med definerer vi variablerne led, button, og buttonState. Variablene skal defineres uden for funktionerne, så de kan bruges gennem hele programmet.

Når vi definerer en variabel, fortæller vi Arduinoen, at hver gang vi i fremtiden skriver led, skal den forstå det som værdien 13. Vi definerer variable for at spare tid og arbejde i fremtiden. Hvis man har et stort program med mange pins og talværdier, skal man ikke selv huske hvilken værdi hver pin har, men i stedet kun navnet på variablen. Det betyder også, at hvis vi i fremtiden vil bruge pin D11 i stedet for D13 skal vi ikke gå hele koden igennem for at erstatte hvert 13 med 11. Vi kan i stedet bare ændre led til at være lig med 11.

Foran variablerne vi definerer her skriver vi int. Dette betyder at det tal som variablen holder på, er hvad der kaldes en integer. En integer er et helt, reelt tal. Det betyder at 1, 2, 3, 4, -1 og -3 alle er integers, mens 1.4, 5.4, 9.7 ikke er. Når vi definerer en variabel skal vi altid fortælle hvilket slags tal det indeholder. Senere i forløbet skal vi se på hvordan man kan bruge kommatal i en variabel.

I funktionen setup fortæller vi Arduinoen at pin D13 skal være et OUTPUT, altså en udgang, og D7 et INPUT, indgang. Det betyder, at D13, hvor LEDen sidder, skal udsende enten 5V eller 0V, og at man på D7 kan aflæse om knappen er tændt. Det gør vi ved at skrive

pinMode(led, OUTPUT);
pinMode(button, INPUT);

I loop funktionen skal vi tjekke om knappen er trykket ned. Vi starter med at aflæse knappen ved at bruge digitalRead() funktionen. Den her funktion giver enten et 1 eller 0, alt efter hvad man putter i paranteserne. Hvis vi skriver:

buttonState = digitalRead(button);

tjekker vi altså om button er HØJ (5V) eller LAV (0V) og gemmer resultatet i variablen buttonState.

Herefter bruger vi et såkaldt if-statement. If betyder "hvis", og man bruger den til at tjekke om en betingelse er sand. Det vil sige, at hvis buttonState er HØJ, skal dioden blinke. Vi skriver det på følgende måde:

if (buttonState == HIGH) {

}

Inde i de krøllede paranteser skriver vi hvad vi vil have programmet til at gøre, hvis betingelsen er sand. I det her tilfælde vil vi have dioden til at blinke. Det gør vi ved at skrive

digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);

delay(1000);

I det her kodestykke skriver vi først logisk høj til LEDen. Det betyder at vi sender 5V gennem den, hvilket får den til at lyse. Herefter venter programmet i 1000 millisekunder (1 sekund), og slukker for LEDen igen. Der ventes igen et sekund og så gentages loop funktionen.

Det vil sige, at hver gang loop funktionen genstarter, tjekkes det om knappen er trykket ned. Hvis den er det, så blinker dioden. Hvis ikke, så springer den hele blinkekoden over, indtil knappen trykkes.

Færdiggør og fortsæt