This is an old revision of the document!


TTU Summer School programming

Projekt 1 LED-i juhtimine nupuga

Arduino ühendusskeem

Näide #1.1 Nuppu all hoides LED põleb

https://www.arduino.cc/en/Tutorial/DigitalPins.

/*
Nimetus: Näide #1.1
Kirjeldus: Nuppu all hoides LED põleb 
*/
 
/* Konstandid */
// Viik kuhu on ühendatud nupp
const int nupp = A0; 
 
// Viik kuhu on ühendatud LED
const int led = 13; 
 
/* Globaalsed muutujad */
// Nupu muutuja oleku salvestamine ja selle algväärtustamine
int nupuOlek = 0; 
 
void setup() 
{ 
  // LED viigu väljundi seadistamine 
  pinMode(led, OUTPUT); 
  // Nupu viigu sisendi seadistamine ja sisemise "pull-up" takisti aktiveermine
  pinMode(nupp, INPUT_PULLUP); 
}
 
void loop()
{
  // Nupu muutuja hetkeväärtuse salvestamine
  nupuOlek = digitalRead(nupp); 
  // Kui nupp on alla vajutatud, siis seadistame LED viigu kõrgeks ehk LED süttib
  if (nupuOlek == LOW) 
  { 
    digitalWrite(led, HIGH);
  } 
  // Muul juhul seadistame LED viigu madalaks ehk LED ei põle
  else 
  { digitalWrite(led, LOW);
  }
}

Näide #1.2 Nupule vajutades LED süttib 1 sekundiks

/*
Nimetus: Näide #1.2
Kirjeldus: Nupule vajutades süttib LED 1 sekundiks
*/
 
// Algus identne näitega #1.1 (kommenteeritud koodi vaata sealt)
const int nupp = A0; 
const int led = 13; 
 
int nupuOlek = 0; 
 
void setup() 
{ 
  pinMode(led, OUTPUT); 
  pinMode(nupp, INPUT_PULLUP); 
}
 
void loop()
{
  // Nupu muutuja hetkeväärtuse salvestamine
  nupuOlek = digitalRead(nupp); 
 
  /* Kui nupp on alla vajutatud, siis seadistame LED viigu kõrgeks ehk LED süttib,
     programm seisab 1 sekund ja pärast seda seatakse viik tagasi madalaks */
  if (nupuOlek == LOW) 
  { 
    digitalWrite(led, HIGH);
    delay(1000); // 1000 millisekundit ehk 1 sekund
  } 
  digitalWrite(led, LOW);
}

Näide #1.3 Nupule vajutades muudab LED oma olekut

/*
  Nimetus: Näide #1.3
  Kirjeldus: Nupule vajutades muudab LED oma olekut püsivalt
*/
 
// Algus identne näitega #1.1 (kommenteeritud koodi vaata sealt)
const int nupp = A0; 
const int led = 13; 
 
int nupuOlek = 0; 
 
void setup() 
{ 
  pinMode(led, OUTPUT); 
  pinMode(nupp, INPUT_PULLUP); 
}
 
void loop() 
{
  // Programm ei tee midagi kuni vajutatakse nuppu
  if (digitalRead(nupp) == LOW) 
    {
   // Lüliti kontaktide värelemise (debounce) efekti mõju vähendamiseks väike viide
    delay(50); 
    while (digitalRead(nupp) == LOW)
     { //Tsükkel hoiab programmi kinni kuni nupu viigu olek muutub kõrgeks
     }
    /* LED viigu olek inverteeritakse ehk seatakse
       vastupidiseks kasutades hetkeväärtust */
    digitalWrite(led, !digitalRead(led)); 
 
   // Lüliti kontaktide värelemise (debounce) efekti mõju vähendamiseks väike viide
    delay(50); 
    }
}

Harjutused

Harjutus #1.1

Modifitseerida näiteprogrammi nii, et nupule vajutades vilgub LED kolm korda.

Harjutus #1.2

Modifitseerida näiteprogrammi nii, et nupule vajutades hakkab LED konstantselt vilkuma 1 sekundilise intervalliga ja teine nupule vajutus lõpetab vilkumise.

Harjutus #1.3

Modifitseerida näiteprogrammi nii, et nupule vajutades LED vilgub nii mitu korda, kui on nuppu programmi töötamise jooksul kokku vajutatud. Pärast igat vajutust suureneb vilkumiste arv ühe võrra.

 

Projekt 2 LED-i juhtimine potentsiomeetriga

Näide #2.1 Potentsiomeetri pööramisel üle nivoo süttib LED

/*
Nimetus: Näide #2.1
Kirjeldus: Potentsiomeetri pööramisel üle nivoo süttib LED
*/
 
// Viik kuhu on ühendatud potentsiomeeter
const int pote = A1; 
 
// Viik kuhu on ühendatud LED
const int led = 13; 
 
// Potentsiomeetri muutuja väärtuse salvestamine ja selle algväärtustamine
int poteOlek = 0; 
 
void setup()
{
  /* Mikrokontrolleri viigud on tavaolekus sisendid ja seega ei pea
  potentsiomeetri sisendit eraldi seadistama */
  pinMode(led, OUTPUT); // Seadistame LED viigu väljundiks
}
 
void loop() 
{
  // Viigu muutuja hetkeväärtuse salvestamine
  poteOlek = digitalRead(pote); 
 
  // Kui sisendviik on kõrge, siis seame LED viigu kõrgeks
  if(poteOlek > 0)
  {
    digitalWrite(led, HIGH);
  }
  // Muul juhul seame led viigu madalaks
  else
  {
    digitalWrite(led, LOW);
  }
}

Näide #2.2 LED-i vilkumise sagedus sõltub potentsiomeetri asendist

/* Nimetus: Näide #2.2
   Kirjeldus: LED-i vilkumise sagedus sõltub potentsiomeetri asendist
*/
// Algus identne näitega #2.1 (kommenteeritud koodi vaata sealt)
const int pote = A1; 
const int led = 13; 
 
int poteOlek = 0; 
 
void setup()
{
  pinMode(led, OUTPUT);
}
 
void loop() 
{
  // Potentsiomeetri muutuja hetkeväärtuse salvestamine 
  poteOlek = analogRead(pote); 
 
  // LED viigu oleku kõrgeks seadmine
  digitalWrite(led, HIGH); 
 
  // Viite tekitamine, mille pikkus on võrdne potentsiomeetri sisendi väärtusega
  delay(poteOlek);  
 
  // LED viigu oleku madalaks seadmine
  digitalWrite(led, LOW); 
 
  // Viite tekitamine, mille pikkus on võrdne potentsiomeetri sisendi väärtusega
  delay(poteOlek); 
}

Näide #2.3 LED-i ereduse juhtimine potentsiomeetri asendi järgi

/* Nimetus: Näide #2.3
   Kirjeldus: LED-i ereduse juhtimine potentsiomeetri asendi järgi */
// Algus identne näitega #2.1 (kommenteeritud koodi vaata sealt)
 
const int pote = A1; 
const int led = 13; 
int poteOlek = 0; 
 
void setup()
{
  pinMode(led, OUTPUT);
}
 
void loop() 
{
  // Potentsiomeetri muutuja hetkeväärtuse salvestamine
  poteOlek = analogRead(pote); 
 
/* Kui potentsiomeetri väärtus on suurem kui 0, siis seame LED viigu kõrgeks,
   seejärel programm ootab potentsiomeetri väärtusega võrdse arvu mikrosekundeid */
  if (poteOlek > 0) 
  {
    digitalWrite(led, HIGH);
    delayMicroseconds(poteOlek); 
  }
 
  // Seame LED viigu madalasse olekusse
  digitalWrite(led, LOW); 
 
  // Programm ootab ülejäänud arvu mikrosekundeid perioodist 
  delayMicroseconds(1023 - poteOlek); 
}

Harjutused

Harjutus #2.1

Modifitseerida näitekoodi nii, et LED läheb põlema viigu kõrgest olekust madalasse olekusse minekul. Potentsiomeetri kogu pöördenurk vastab pingevahemikule 0-5 V. Leida ligilähedane pinge väärtus, mille juures Arduino sisend muutub madalast olekust kõrgesse olekusse ja vastupidi. Kas esineb hüsterees lülitumiste vahel? Tulemuse saamiseks võib kasutada potentsiomeetri nurka või jadapordi monitori.

Harjutus #2.2

Modifitseerida näiteprogrammi nii, et potentsiomeetri keskpunktist (väärtus ~512) ühele poole reguleeritakse LED-i põlemas oleku viidet ja teisele poole kustus oleku viidet. Viite pikkuse reguleerimisel peab maksimaalne viite väärtus olema keskpunkti lähedal ja minimaalne lõpp-punktides. Fikseeritud viite pikkus peab olema 512 millisekundit. Seejuures reguleeritav viite pikkus peab jääma vahemikku 0 kuni 511. Tulemusena peaks ühes potentsiomeetri äärmuses LED olema püsivalt põlemas ja teises püsivalt kustus ning keskel võrdselt põlemas ja kustus.

Harjutus #2.3

Modifitseerida näiteprogrammi nii, et LED põleb ainult potentsiomeetri pööramise ajal. LED-i põlemise eredus sõltub potentsiomeetri pööramise kiirusest.

en/arduino/examples.1500959418.txt.gz · Last modified: 2020/07/20 09:00 (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0