Bibliotek

Bibliotek

I detta kapitel ska vi se hur det med hjälp av bibliotek går snabbt att åstadkomma storverk.

Bibliotekens funktion

Det bästa med Arduino-plattformen är den hängivna skaran av utvecklare som frikostigt delar med sig av sin kod. Erfarna programmerare löser ofta komplexa problem och paketerar sina lösningar i så kallade "bibliotek". Det gör att andra programmerare kan dra nytta av lösningarna som biblioteketen erbjuder utan att behöva skriva eller förstå all den bakomliggande koden. Biblioteken ger oss kort och gott tillgång ökad funktionalitet. 

I Variabler och strängar skrev vi en sketch som höll koll på statusen i en äppel­plockartävling (FruitPickers2.ino). I den sketchen skrev vi direkt i koden hur många äppelkorgar Alice respektive Bob hade plockat. Nu vill vi bygga ett räkneverk där mängden äpplen räknas upp när Alice och Bob trycker på knappar. 

Räkneverket ska ha fyra knappar totalt: två knappar för Alice och två knappar för Bob. Den ena knappen ska användas för att räkna upp en liten korg och den andra knappen ska användas för att räkna upp en stor korg. Så fort Alice eller Bob har plockat en full korg ska de trycka på den tillhörande knappen, så håller vårt räkneverk koll på hur många äpplen de har plockat. 

För att åstadkomma detta behöver vi fysiska tryckknappar och ett bibliotek för tryckknappar. 

För att förstå nyttan med biblioteket måste vi först förstå vad ett tryck på en knapp egentligen är. Ett klassiskt tangentbordstryck på datorn är när en brytare växlar läge från opåverkad till påverkad. Under förutsättning att tangenten släpps upp igen inom några millisekunder (går från påverkad till opåverkad) registrerar operativsystemet det som inmatning av ett tecken. Om tangenten däremot hålls nedtryckt mer än några milli­sekunder börjar operativsystemet skriva ut upprepade versioner av tecknet till dess att tangenten släpps upp. 

I exemplet med brytaren i Användning av digitala ingångar (SwitchTrigger.ino) visades tydligt hur Arduino reagerar när simpla brytare påverkas. Varje millisekund brytaren påverkas registrerar Arduino ett nytt knapptryck (i SwitchTrigger.ino lade vi en fördröjning på 100 ms för att göra det lättare att se). Denna lösning fungerar inte i vårt räkneverk eftersom Alice och Bob hade fått flera nya korgar registrerade varje gång de hade tryckt på knappen. 

Hur en vanlig brytare hade fungerat i räkneverket.

Våra knappar måste fungera som tangenter och inte som simpla brytare. Som tur är kan vi lösa det med hjälp av ett bibliotek.

Hur vi vill att våra knappar ska fungera.

Installera bibliotek

Biblioteket Button av Michael Adams löser problemet åt oss. Vi installerar det genom att öppna menyn Sketch, gå till Inkludera bibliotek och klicka på Hantera bibliotek

I sökrutan skriver vi Button och väljer Button av Michael Adams. Om biblioteket inte skulle visas i listan kan det laddas ned manuellt från Github. Läs mer om detta i Manuell biblioteksinstallation

När biblioteket har installerats startar vi om utvecklingsmiljön.

Nästan alla bibliotek levereras med exempelsketcher för att underlätta förståelsen av hur biblioteken ska användas. Så är även fallet med Button. Det biblioteket levereras med exempelsketchen Basic_usage som finns bland exemplen på Fil-menyn.

Koppling

För att bygga räkneverket till tävlingen behöver vi fyra knappar. Vi väljer två röda (för Alice) och två blå (för Bob). Vi kopplar knapparna direkt mot jord. Detta är möjligt eftersom biblioteket använder ett internt återkopplande motstånd i mikrokontrollern. Kretsen blir i slutänden densamma som i Användning av digitala ingångar.

Kopplingen för vårt räkneverk.11

Knapparnas funktioner kommer att bli följande:

  • Lägg till en liten korg åt Alice (GPIO-stift 5).
  • Lägg till en liten korg åt Bob (GPIO-stift 4).
  • Lägg till en stor korg åt Alice (GPIO-stift 3).
  • Lägg till en stor korg åt Bob (GPIO-stift 2).

Inkludera och använda bibliotek

För att kunna dra nytta av biblioteket måste det först inkluderas i vår sketch. Vi kopierar därför sketchen från Variabler och strängar, sparar den som en ny sketch (FruitPickers3.ino) och lägger till följande kod längst upp. 

Del 1/5 av FruitPickers3.ino

Sedan skapar vi fyra knappar (Button-objekt) på sättet som biblioteksskaparen visar att det ska göras i exemplet.

Del 2/5 av FruitPickers3.ino

Siffran inom parentes syftar på vilket GPIO-stift som knapparna är kopplade till.

Vi kan plocka bort variablerna littleBasketAlice, bigBasketAlice, littleBasketBob och bigBasketBob då de inte behövs längre. 

Del 3/5 av FruitPickers3.ino

I setup-funktionen måste vi starta samtliga knappar. Det gör vi på samma sätt som vi startar Serial, men vi behöver inte skriva något inom parenteserna.

Del 4/5 av FruitPickers3.ino

I loop-funktionen börjar vi med att plocka bort delay-funktionen. Den behövs inte efter­som vi nu kan använda knapparna som trigger för när något ska skrivas. Vi tar också bort den gamla uträkningen för antalet plockade äpplen.

Sedan skriver vi if-satser för respektive knapptryck (alltså vad som ska hända när någon trycker på knapparna). Den färdiga sketchen kommer att se ut på följande vis. 

Del 5/5 av FruitPickers3.ino

Manuell biblioteksinstallation

De mest populära biblioteken går att lägga till på sättet som vi har beskrivit, men på Github finns ett ännu större utbud än det som går att hitta via sökfunktionen. De biblioteken måste dock installeras manuellt.

Ett exempel på bibliotek som måste installeras manuellt är SSD1306Ascii, vilket kommer till användning i Bygg en internetuppkopplad ­klocktermometer. När vi vill installera det börjar vi med att ladda ned den senaste versionen av biblioteket från Github.

Bibliotek kan laddas ned manuellt från Github.

Biblioteket kommer i Zip-format och vi måste därför packa upp det innan vi kan göra något mer. 

Sedan flyttar vi bibliotekets huvudmapp till vår bibliotekssamling (huvudmappen är generellt mappen som har en undermapp vid namn examples). Standardplatsen för bibliotekssamlingen (libraries) är i den lokala användarens dokumentmapp inuti undermappen Arduino (gäller både Windows och Mac OS). 

Det finns även en färdig funktion i Arduino IDE för att importera bibliotek i Zip-format. Den funktionen förutsätter att filerna ligger korrekt organiserade i Zip-arkiven, vilket de inte alltid gör.

Tips! I Klasser och bibliotek visar vi hur det går att skapa egna bibliotek.

Referenser

11. Illustration gjord med komponenter från Fritzing (fritzing.org). CC BY-SA 3.0

Senast ändrad: 2017-01-23