28.11.12

Arduino ja nupp - sissejuhatus

Kõigepealt räägime väljundidest....
Väljund peaks juba kõigil selge olema.
Kõigepealt setup osas pinMode(7, OUTPUT) ja seejärel saab programmis kasutada käsku digitalWrite(7,HIGH) või digitalWrite(7,LOW).
HIGH puhul tekib vastava väljundi peale siis +5V. LOW puhul aga GND. Ja saab näiteks led'i põlema panna (ja väga palju muudki teha).

Nüüd aga tahaks hoopis saada sisendit - mõõta näiteks kas lüliti on vajutatud või mitte parasjagu.
Kõikidel digitaalsetel pin'idel on olemas ka sisendi funktsionaalsus.

Kõigepealt setup osas:
pinMode(3,INPUT);

ja seejärel saab programmis kasutada käsku
int nupuasend;
nupuAsend = digitalRead(3);

Muutuja nupuAsend saab siis endale väärtuseks selle, mida protsessor vastava pin'i peal näeb - kui +5V - siis HIGH, kui GND (0V) - siis LOW (HIGH ja LOW on lihtsalt abinimed väärtustele 0 ja 1).


Elektroonika poole pealt tundub kõik lihtne - võtame 5V, ühendame selle lüliti ühele poole ja lüliti teise poole meile meeldiva Arduino digitaalsisendisse. Sulgeme lüliti ja 5V ühendus tekib sisendile. Siin tekib aga üks väike probleem - kui sisend pole kuhugi ühendatud (nuppu ei vajutata), siis on ta nn. ujuv (floating). Ehk vastav elektriline ühendus lõppeb kuskil õhus. Ja õhk juhib alati natukene elektrit. Tulemuseks on, et protsessor hakkab näitama sisendil juhuslike väärtusi - kord LOW, kord HIGH. Nii aga ei saa ju mõõta, kas nupp on suletud või mitte.
Sellise asja vältimiseks kasutatakse sisendi sidumist 0V läbi suure takisti (10kohm või rohkem). Nüüd sisend enam ei uju - LOW on kogu aeg olemas. Kuid see LOW on tagatud väga väikese koguse GROUND ühendusega - nagu vajutatakse sisse lüliti, siis otseühendus +5V pealt varjutab selle GROUND'i täielikult ja sisendi väärtuseks saab HIGH. Vaatame näiteks kraanist vee laskmist - keerates lati ainult külmavee kraani hästi natuke ja seal all oma kätt hoides võib tõesti tõdeda, et vesi on külm. Kui nüüd keerata juurde lõpuni lahti kuumavekraan, siis natuke avatud külmavee kraan midagi ei muuda ja kraanist tulev vesi on kuum.

Skemaatiliselt ja protoplaadil näeb see välja niimodi:




Paneme siia skeemi veel juurde ka ühe led'i, mida saaks vastavalt nupu asendile põlema panna ja ära kustutada:




Ja hästi lihtne testprogramm:

void setup(){
  pinMode(3,INPUT); // pin3 on sisend
  pinMode(7,OUTPUT); // pin7 on väljund
}


void loop(){
  //loe pin3'e väärtus ja muuda pin7 väljund samaks
  digitalWrite(7,digitalRead(3)); 
}


Kommentaare ei ole:

Postita kommentaar