Biblioteker
Bibliotekenes funksjon
Det beste med Arduino-plattformen er den hengivne skaren av utviklere som generÞst deler kode med andre. Erfarne programmerere lÞser ofte kompliserte problemer og pakker lÞsningene sine i sÄkalte "biblioteker". Det gjÞr at andre programmerere kan dra nytte av lÞsningene som bibliotekene tilbyr, uten Ä mÄtte skrive eller forstÄ koden som ligger bak. Bibliotekene gir oss rett og slett tilgang til Þkt funksjonalitet.
I Variabler og strenger skrev vi en skisse som holder rede pÄ statusen i en konkurranse i epleplukking (FruitPickers2.ino). I den skissen skrev vi direkte i koden hvor mange eplekurver henholdsvis Alice og Bob hadde plukket. NÄ skal vi lage et telleverk der mengden epler regnes ut nÄr Alice og Bob trykker pÄ knapper.
Telleverket skal ha totalt fire knapper: to for Alice og to for Bob. Den ene knappen skal brukes til Ä telle en liten kurv, og den andre skal brukes til Ä telle en stor kurv. SÄ snart Alice eller Bob har plukket en full kurv, skal de trykke pÄ tilhÞrende knapp, sÄ holder telleverket vÄrt rede pÄ hvor mange epler de har plukket.
For Ä fÄ til dette trenger vi fysiske trykknapper og et bibliotek for trykknapper.
For Ä forstÄ nytten av biblioteket mÄ vi fÞrst forstÄ hva et trykk pÄ en knapp egentlig er. Et vanlig tastaturtrykk pÄ datamaskinen er nÄr en bryter skifter status fra upÄvirket til pÄvirket. Under forutsetning av at tasten slippes opp igjen innen noen millisekunder (gÄr fra pÄvirket til upÄvirket) registrerer operativsystemet det som innmating av et tegn. Hvis tasten derimot holdes nedtrykket i mer enn noen millisekunder, begynner operativsystemet Ä skrive tegnet gjentatte ganger helt til tasten slippes opp.
I eksempelet med bryteren i Bruk av digitale innganger (SwitchTrigger.ino) viste vi tydelig hvordan Arduino reagerer nÄr enkle brytere pÄvirkes. Hvert millisekund bryteren pÄvirkes, registrerer Arduino et nytt knappetrykk (i SwitchTrigger.ino la vi inn en forsinkelse pÄ 100 ms for Ä gjÞre det enklere Ä se). Denne lÞsningen fungerer ikke i telleverket vÄrt, siden Alice og Bob hadde fÄtt flere kurver registrert hver gang de trykket pÄ knappen.

Knappene vÄre mÄ fungere som taster, ikke enkle brytere. Heldigvis kan vi lÞse dette ved hjelp av et bibliotek.

Installere bibliotek
Biblioteket Button av Michael Adams lĂžser problemet for oss. Vi installerer det ved Ă„ gĂ„ til menyen Skisse, velge Inkluder bibliotek og deretter klikke pĂ„ Administrer bibliotek.Â

I sĂžkeboksen skriver vi Button og velger Button by Michael Adams. Hvis biblioteket ikke vises i listen, kan det lastes ned manuelt fra Github. Les mer om dette i kapittel Manuell biblioteksinstallasjon.Â
NÄr biblioteket er installert, starter vi utviklingsmiljÞet.

Nesten alle biblioteker leveres med eksempelskisser, slik at det blir enklere Ä forstÄ hvordan bibliotekene skal brukes. Dette gjelder ogsÄ Button. Det biblioteket leveres med eksempelskissen Basic_usage som du finner blant eksemplene pÄ Fil-menyen.
Kobling
For Ä lage telleverket trenger vi fire knapper. Vi velger to rÞde (for Alice) og to blÄ (for Bob). Vi kobler knappene direkte mot jord. Dette er mulig fordi biblioteket bruker en intern tilbakekoblende motstand i mikrokontrolleren. Kretsen blir til slutt den samme som i Bruk av digitale innganger.

Knappenes funksjoner blir fĂžlgende:
- Legg til en liten kurv for Alice (GPIO-pinne 5).
- Legg til en liten kurv for Bob (GPIO-pinne 4).
- Legg til en liten kurv for Alice (GPIO-pinne 3).
- Legg til en liten kurv for Bob (GPIO-pinne 2).
Inkludere og bruke biblioteker
For Ă„ kunne dra nytte av biblioteket mĂ„ det fĂžrst inkluderes i skissen vĂ„r. Vi kopierer derfor skissen fra Variabler og strenger, lagrer den som en ny skisse (FruitPickers3.ino) og legger til fĂžlgende kode Ăžverst.Â
Del 1/5 av FruitPickers3.ino
Deretter lager vi fire knapper (Button-objekt) pÄ den mÄten som biblioteksutvikleren viser at det skal gjÞres i eksempelet.
Del 2/5 av FruitPickers3.ino
Sifrene i parentes viser til hvilken GPIO-pinne som knappene er koblet til.
Vi kan fjerne variablene littleBasketAlice, bigBasketAlice, littleBasketBob og bigBasketBob, siden de ikke behĂžves lenger.
Del 3/5 av FruitPickers3.ino
I setup-funksjonen mÄ vi starte samtlige knapper. Det gjÞr vi pÄ samme mÄte som vi starter Serial, men vi trenger ikke skrive noe i parentesene.
Del 4/5 av FruitPickers3.ino
I loop-funksjonen begynner vi med Ä fjerne delay-funksjonen. Den er ikke nÞdvendig fordi vi nÄ kan bruke knappene som triggere for nÄr noe skal skrives. Vi fjerner ogsÄ den gamle utregningen for antall plukkede epler.
Deretter skriver vi if-setninger for knappetrykkene (altsÄ hva som skal skje nÄr noen trykker pÄ en knapp). Den ferdige skissen vil se slik ut:
Del 5/5 av FruitPickers3.ino
I loop-funksjonen begynner vi med Ă„ fjerne delay-funksjonen. Den er ikke nĂždvendig fordi vi nĂ„ kan bruke knappene som triggere for nĂ„r noe skal skrives. Vi fjerner ogsĂ„ den gamle utregningen for antall plukkede epler.Â
Manuell biblioteksinstallasjon
De mest populÊre bibliotekene kan legges til pÄ samme mÄte som vi har beskrevet, men pÄ Github er det mange flere enn de du finner ved hjelp av sÞkefunksjonen. Bibliotekene pÄ Github mÄ imidlertid installeres manuelt.
Et eksempel pÄ et bibliotek som mÄ installeres manuelt er SSD1306Ascii, som vi skal bruke i Bygge et internettilkoblet klokketermometer. NÄr vi vil installere det, begynner vi med Ä laste ned den nyeste versjonen av biblioteket fra Github.

Biblioteket kommer i Zip-format, og vi mÄ derfor pakke det ut fÞr vi kan gjÞre noe mer.
Deretter flytter vi bibliotekets hovedmappe til biblioteksamlingen vÄr (hovedmappen er generelt sett mappen som har en undermappe med navnet examples. Standardplasseringen for biblioteksamlingen (libraries) er den lokale brukerens dokumentmappe i undermappen Arduino (gjelder bÄde Windows og Mac OS).

Det finnes ogsÄ en ferdig funksjon i Arduino IDE for Ä importere biblioteker i Zip-format. Den funksjonen forutsetter at filene ligger korrekt organisert i Zip-arkivet, noe de ikke alltid gjÞr.
Tips! I Klasser og biblioteker viser vi hvordan du kan lage egne biblioteker.
Referanser
11. Illustrasjon lagd med komponenter fra Fritzing (fritzing.org). CC BY-SA 3.0