Lese digitale verdier

Utskrift

Når vi skal lese, eller sjekke det digitale nivået på en pinne må vi også bruke pinMode for å forsikre oss om at den aktuelle pinnen er satt opp som inngang. I Atmel mikrokontrollere er alle pinner satt opp som innganger i utgangspunktet, så vi kan få en krets til å fungere selv om vi glemmer å bruke pinMode. Det er uansett viktig å ta det med, om ikke annet for at programmet skal bli lettere å forstå.

Her har vi to forskjellige muligheter, som vi kommer tilbake til under: INPUT eller INPUT_PULLUP

Eksempel:

pinMode(2, INPUT);  //Setter digital pinne 2 som inngang
pinMode(3, INPUT_PULLUP); //Setter digital pinne 3 som inngang, og aktiverer intern pullup-motstand

 

Funksjonen vi bruke til å lese en digital verdi er digitalRead():

int nivaa;
nivaa=digitalRead(2);  //Lagrer verdien lest fra pinne 2 i variabelen nivaa

Koden over lager en variabel med navn nivaa, leser verdien på pinne 2 og lagrer resultatet i variabelen. Vi kan også bruke digitalRead direkte i en logisk test f.eks. på denne måten:

if(digitalRead(2)==1){
     //Utfør noe kode her...
}

Som nevnt tidligere, har vi to muligheter når vi definerer en pinne som inngang: INPUT og INPUT_PULLUP.
INPUT_PULLUP aktiverer en motstand internt i mikrokontrolleren, koblet fra pinnen og til Vcc, som "tvinger" nivået på pinnen høyt.
Hvis pinnen skal brukes til å sjekke om en knapp er trykt inn, kan vi gjerne bruke den siste muligheten. På skjemaet under vises hvordan koblingen kan gjøres, på tre forskjellige måter.  Koblingen til venstre viser knappen koblet aktiv høy, i midten samme kobling aktiv lav og den siste aktiv lav med INPUT_PULLUP. 

IO2 og IO3 refererer til de digitale pinnene 2 og 3 på Arduino Uno. Her har vi brukt pullup-motstander på 10 kohm, men når vi kobler i praksis kan de gjerne være større. Jo større motstand vi bruker, jo mindre strøm bruker kretsen. Helt opp i 50 kohm går som oftest fint. (Hvis motstanden blir for stor, vil ikke kretsen greie å holde signalet stabilt høyt eller lavt).

Eksempel-kode for de 3 koblingene:

Venstre:

if(digitalRead(2)==1){  //  Evt: if (digitalRead(2)){
     //Utfør noe kode her...
}

Midten:

if(digitalRead(2)==0){  //  Evt: if (!digitalRead(2)){
     //Utfør noe kode her...
}

Høyre:

if(digitalRead(3)==0){   //  Evt: if (!digitalRead(3)){
     //Utfør noe kode her...
}

Neste artikkel -->