Arduino Pin Library

Fra Holstebro HTX Wiki
Skift til: navigering, søgning

Biblioteket er udviklet som et eksempel på hvordan man opbygger et bibliotek.

For at anvende biblioteket skal man hente og installere biblioteket, der kan hentes i denne ZIP-fil og installeres som beskrevet i Arduinos Biblioteker

Ideen bag biblioteket

Den grundlæggende ide er at kunne få pins til at lave nogle ting der sker mere eller mindre automatisk, og så lade biblioteket håndtere om pins er input eller output.

Det betyder at metoderne selv finder ud af om en pin skal være input eller output ud fra hvilken metode der anvendes på den. Samtidigt betyder det at metoderne stopper det sidste man har gjort ved en pin, hvis man kalder en anden metode.

Det betyder også at der skal ligge noget software "bagved", som kan opdatere en udgang "automatisk". Dette er løst ved at bruge Timer 2[1] til at opdatere hvert millisekund. Det betyder at biblioteket ikke kan fungere sammen med andre biblioteker, som anvende timer 2.

Anvendelse af biblioteket

For at kunne bruge biblioteket skal man include det i starten og definere nogle objekter fra klassen Pin, som det vises her:

#include <Pin.h>

Pin blink1(3);
Pin blink2(4);

Simple output metoder

For at kunne tænde og slukke udgange er der to metoder:

blink1.on();
blink1.off();

Disse metoder sætter benet op som output og tænder eller slukke for udgangen.

Output metoder med delay

For at kunne få en udgang til at lave noget efter et stykke tid, så er der 3 metoder til det:

demoDelayOn.delayedON(2000);
demoDelayOff.delayedOFF(3000);
demoDelayPulse.delayedOnePulse(1000, 500);

delayedON() vil tænde udgangen det angivne antal millisekunder efter metoden er aktiveret. Den slukker udgangen når den kaldes.

delayedOFF() vil slukke udgangen det angivne antal millisekunder efter metoden er aktiveret. Den tænder udgangen når den kaldes.

delayedOnePulse() vil starte med at slukke udgangen, så vil den vente det første antal millisekunder og tænde udgangen i det andet antal millisekunder, hvorefter den slukkes igen.

Fordelen ved disse metoder er at de returnerer umiddelbart efter at de er kaldt, så de ikke venter inde i rutinen på at tiden er gået, men at man kan lave andre ting umiddelbart efter.

Metoder med fortsat aktivitet

Hvis man vil have en pin til at lave noget periodisk, som den bare bliver ved med, så er der to metoder:

blink1.startBlink(300);
blink2.pulsing(200, 2800);

Metoden startBlink() sætter udgangen i gang med at blinke med en angivet periodetid.

Metoden pulsing() gør stort set det samme, men med puls-tiden og pausetiden angivet hver for sig.

Fordelen ved disse metoder er at de kun skal kaldes én gang (fx i setup()) og så fortsætter de.

De kan også anvendes til at gøre mere opmærksom på en LED ved at man fx starter en alarm ved at den blinker, og når alarmen skal afstilles, så kan man blot kalde off() metoden.

Test

Test af softwaren viser at biblioteket med den beskrevne software virker efter hensigten.

Testen er lavet ved hjælp af de eksempler der kommer med biblioteket.

Output eksempel

Eksemplet med output viser kombinationen af to output der er styret af tidsfunktionen i biblioteket og et output der styres direkte fra loop().

/*
  Pin_Output.ino - Example showing output Pin action using Pin library.
  The library uses Timer 2 for timing
  Created by Bent Arnoldsen october 2019.
  Released into the public domain.
 */
#include <Pin.h>

Pin blink1(3);
Pin blink2(4);
Pin manual(5);

void setup() {
  // put your setup code here, to run once:
  blink1.startBlink(300);   // Start blink1 LED with a period of 300ms
  blink2.pulsing(200, 2800);  // Start blink2 LED with 200ms on and 2800ms off
}

void loop() {
  // put your main code here, to run repeatedly:
  manual.on();  // Simple turn on method
  delay(500);
  manual.off(); // Simple turn off method
  delay(500);
}

Input eksempel

Eksemplet med input anvender to forskellige input, både normalt og med pullup og inverteret. Begge output forbinders med software til et output i loop().

/*
  Pin_Input.ino - Example showing input Pin action using Pin library.
  The library uses Timer 2 for timing
  Created by Bent Arnoldsen october 2019.
  Released into the public domain.
 */
#include <Pin.h>

Pin simpleKontact(8);
Pin pullUpKontact(9);
Pin showSimple(3);
Pin showPullUp(4);

void setup() {
  // put your setup code here, to run once:
}

void loop() {
  // put your main code here, to run repeatedly:
  if (simpleKontact.getIn()) {  // Are the contact pressed
    showSimple.on();
  } else {
    showSimple.off();
  }
  if (! pullUpKontact.getInPullUp()) {  // Are the contact pressed (low signel)
    showPullUp.on();
  } else {
    showPullUp.off();
  }
}

Delay eksempel

Eksemplet med delays viser de muligheder der er i biblioteket hvor et enkelt input aktiverer 3 forskellige delay-funktioner tilknyttet 3 forskellige 3 output, som kan lave en forsinket on-funktion, en forsinket off-funktion og en forsinket puls.

/*
  Pin_Delayed.ino - Example showing delayed Pin action using Pin library.
  The library uses Timer 2 for timing
  Created by Bent Arnoldsen october 2019.
  Released into the public domain.
 */
#include <Pin.h>

Pin contact(8);
Pin reset(9);
Pin demoDelayOn(3);
Pin demoDelayOff(4);
Pin demoDelayPulse(5);

void setup() {
  // put your setup code here, to run once:
  demoDelayOn.off();
  demoDelayOff.on();
  demoDelayPulse.off();
}

void loop() {
  // put your main code here, to run repeatedly:
  if (contact.getRisingEdge()) {  // Find the start of a button click
    // The following 3 methods will seem to be activated at the same time
    // The required action happens after the time wanted
    demoDelayOn.delayedON(2000);
    demoDelayOff.delayedOFF(3000);
    demoDelayPulse.delayedOnePulse(1000, 500);
  }
  if (reset.getFallingEdge()) {  // Find the end of a button click
    demoDelayOn.off();
    demoDelayOff.on();
    demoDelayPulse.off();
  }
}

Referencer