Arduino digitaalsisend ja nupuvajutuste lugemine02. Jun '14

Sissejuhatus

Digitaalsisendeid on Arduino Uno-l ning Arduino Mega-l vastavalt 14 ning 54. Analoogsisendite jalgu saab kasutada digitaalsete sisendite ning väljunditena, mis teeks maksimaalseks võimalikuks pesade arvuks vastavalt 20 ning 70 2. Samas tuleks tähele panna seda, et TX0 ning RX0 pesad, mis kuuluvad digitaalsisendite/väljundite hulka, on vaikimisi seadistatud Arduino USB-UART silla koosseisu. Nende kasutamine Arduino koodis võib põhjustada suurt peavalu järgmisel korral Arduinosse tarkvara üles laadimisel.

Pesade seadistamine

Digitaalse sisendi/väljundi pesad on vaikimisi seadistatud digitaalsisendi režiimi ning pinMode funktsiooniga pole vaja pesasid ümber seadistada. Digitaalsisend on vaikimisi ka kõrge takistusega olekus (high-impediance state), mis tähendab seda, et pesa ei ole ühendatud ei maaga (0V) ega toitepingega (5V). Sisendi rajad trükkplaadil korjavad üles elektromagnetmüra lähedalasuvatelt radadelt ja keskkonnast ning digitalRead() funktsioon tagastab näiliselt suvalisi väärtusi. Säärast nähtust nimetatakse "ujuvaks jalaks" (floating pin).

Kõrge takistusega olek on täiesti sobiv, kui sisendile antud pingenivoo on alati 0V või 5V, näiteks kui liidestatakse mõne teise mikrokontrolleri, sensori või muu elektroonikakomponendiga. Tihtipeale on tarvis sisend tüürida teatud oleku suunas, kui sisend on ühendamata, näiteks kõige tavalisema nupu või lüliti puhul. Selleks kasutakse pull-up või pull-down takisteid, mis on ühendatud vastavalt kas toitepingega (5V) või maaga (0V).

Pull-up takistid

Arduino puhul on pull-up takistid sisse-ehitatud ning neid saab tarkvaraliselt sisse lülitada. Praktikas tähendab see seda, nupp ühendatakse maa ning digitaalsisendiga. Kui nupp on lahtises olekus, on pesa läbi sisemise ~1.5kΩ pull-up takisti justkui Arduino toitepingega ühendatud. ning digitaalsisendit lugedes on väärtus sellel kõrge (5V). Nupu alla vajutades lühistatakse digitaalsisend maaga ja pingenivoo pesal muutub madalaks (0V). Senikaua kui nupp on alla vajutatud voolab läbi sisemise pull-up takisti 3mA vool toitepingelt maha ning nupu lahti lastes vool katkeb.

Koodinäide

Kõige lihtsamas näites seadistame 13-nda pesa digitaalväljundiks, kuna selle pesa külge on ühendatud ka Arduino plaadil olev valgusdiood. Lüliti ühendame 2-nda pesa ning maa külge 1.

int led = 13;
int button  = 2;

void setup() {
    pinMode(led, OUTPUT);         // Seadista 13 jalg digitaalväljundiks
    pinMode(button, INPUT);       // Seadista 2 jalg digitaalsisendiks
    digitalWrite(button, HIGH);   // Lülita sisse pull-up takisti
}

void loop() {
    if (digitalRead(button) == HIGH) {
        digitalWrite(led, HIGH);
    } else {
        digitalWrite(led, LOW);
    }
}

Visuaalseld aitab hädast välja järgnev Fritzing skeem:

layer 21012345678910111213text:0A0text:1A1text:2A2text:3A3text:4A4text:5A5text:66text:7A7text:8A8text:9A9text:10A10text:11A11text:12A12text:13A13text:14A14text:15A15text:2222text:2424text:2626text:2828text:3030text:3131text:3232text:3333text:3434text:3535text:3636text:3737text:3838text:3939text:4141text:4040text:4343text:4242text:4545text:4747text:4949text:5151text:4444text:4646text:5050text:4848text:5353text:5252element:C1package:C0603-ROUNDelement:C2package:C0603-ROUNDelement:C3package:C0603-ROUNDelement:C4package:C0603-ROUNDelement:C5package:C0603-ROUNDelement:C6package:C0603-ROUNDelement:C7package:C0603-ROUNDelement:C8package:C0603-ROUNDelement:C9package:C0603-ROUNDelement:C10package:C0603-ROUNDelement:C11package:C0603-ROUNDelement:C12package:C0603-ROUNDelement:C13package:C0603-ROUNDelement:C14package:C0603-ROUNDelement:C15package:C0603-ROUNDelement:F1package:L1812element:FD1package:FIDUCIA-MOUNTelement:FD2package:FIDUCIA-MOUNTelement:FD3package:FIDUCIA-MOUNTelement:FD4package:FIDUCIA-MOUNTelement:GROUNDpackage:SJelement:Ltext:LLelement:R1package:R0603-ROUNDelement:R2package:R0603-ROUNDelement:RN1package:CAT16element:RN2package:CAY16element:RN3package:CAY16element:RN4package:CAY16element:RN5package:CAT16element:RXtext:RXRXelement:TXtext:TXTXelement:Z1package:CT/CN0603element:Z2package:CT/CN0603layer 25text:ANALOG INANALOG INCOMMUNICATIONtext:ANALOG INPOWERAREFGNDTX0RX0RESET3V35Vtext:VINVINtext:GNDGNDtext:GNDGNDSDA 20SCL 21TX2 16RX2 17RX3 15text:TX3TX3 14RX1 19TX1 18text:MADE INMADE INtext:ITALYITALYPWMtext:5V5Vtext:GNDGNDtext:DIGITALDIGITALtext:MEGA 2560MEGAtext:M.Banzitext:D.Cuartiellestext:D.Mellistext:G.Martinotext:T.IgoeIOREFtext:SDAtext:SCLelement:C1package:C0603-ROUNDelement:C2package:C0603-ROUNDelement:C3package:C0603-ROUNDelement:C4package:C0603-ROUNDelement:C5package:C0603-ROUNDelement:C6package:C0603-ROUNDelement:C7package:C0603-ROUNDelement:C8package:C0603-ROUNDelement:C9package:C0603-ROUNDelement:C10package:C0603-ROUNDelement:C11package:C0603-ROUNDelement:C12package:C0603-ROUNDelement:C13package:C0603-ROUNDelement:C14package:C0603-ROUNDelement:C15package:C0603-ROUNDelement:D1package:SMBelement:D2package:MINIMELFelement:D3package:MINIMELFelement:F1package:L1812element:FD1package:FIDUCIA-MOUNTelement:FD2package:FIDUCIA-MOUNTelement:FD3package:FIDUCIA-MOUNTelement:FD4package:FIDUCIA-MOUNTelement:GROUNDpackage:SJelement:IC3package:TQFP100element:IC4package:MLF32element:IC6package:SOT23-DBVelement:IC7package:MSOP08element:Lpackage:CHIP-LED0805element:L1package:0805element:ONtext:ONONelement:R1package:R0603-ROUNDelement:R2package:R0603-ROUNDelement:RN1package:CAT16element:RN2package:CAY16element:RN3package:CAY16element:RN4package:CAY16element:RN5package:CAT16element:RXpackage:CHIP-LED0805element:T1package:SOT-23element:TXpackage:CHIP-LED0805element:XIOpackage:2X18text:XIOelement:Y1package:RESONATORelement:Y2package:QSelement:Z1package:CT/CN0603element:Z2package:CT/CN0603

Arduino ühendatud nupuga pessa number 2

Näitest annab parema variandi luua katkestuste (interrupts) abil

1

Arduino - Button

2

Arduino - Digital Pins

Arduino GPIO Tiigriülikool Estonian IT College