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.
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.
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:
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.
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.
11. Illustrasjon lagd med komponenter fra Fritzing (fritzing.org). CC BY-SA 3.0
Bli medlem og få ekstra bra medlemspriser, poeng på alt du handler og 100 dagers åpent kjøp. Medlemskapet ditt er helt digitalt – praktisk og kortløst!
Les mer