Ülesanne #1

Komponendid

  • Arduino UNO plaat (1tk)
  • Arendusplaat (1tk)
  • Juhtmed (3tk)
  • 330 Ω takisti (1tk)
  • LED (1tk)
void setup() {
  // pinMode() määrab töörežim
  pinMode(12, OUTPUT); // 13-pini number, INPUT/OUTPUT(Sisend/Väljund).
}

void loop() {
  digitalWrite(12, HIGH); // Lülita sisse
  delay(1000); // Ootab 1 sek  
  digitalWrite(12, LOW); // Lülita välja
  delay(1000); // Ootab 1 sek
}

Ülesanne #2

Komponendid

  • Arduino UNO plaat (1tk)
  • Arendusplaat (1tk)
  • Juhtmed (5tk)
  • 330 Ω takisti (3tk)
  • RGB LED (1tk)
const int RED_PIN = 11;
const int GREEN_PIN = 9;
const int BLUE_PIN = 10;
int DISPLAY_TIME = 100; // värvimuutuse kiirus

void setup() {
  pinMode(RED_PIN, OUTPUT);
  pinMode(GREEN_PIN, OUTPUT);
  pinMode(BLUE_PIN, OUTPUT);
}

void loop() {
  mainColors();
  showSpectrum();
}

void mainColors() {
  // Kõik LEDid on välja lülitatud
  digitalWrite(RED_PIN, LOW);
  digitalWrite(GREEN_PIN, LOW);
  digitalWrite(BLUE_PIN, LOW);
  delay(1000);
  
  //Põleb punane
  digitalWrite(RED_PIN, HIGH);
  digitalWrite(GREEN_PIN, LOW);
  digitalWrite(BLUE_PIN, LOW);
  delay(1000);
  
  // Põleb roheline
  digitalWrite(RED_PIN, LOW);
  digitalWrite(GREEN_PIN, HIGH);
  digitalWrite(BLUE_PIN, LOW);
  delay(1000);
  
  // Sinine on sisse lülitatud
  digitalWrite(RED_PIN, LOW);
  digitalWrite(GREEN_PIN, LOW);
  digitalWrite(BLUE_PIN, HIGH);
  delay(1000);
  
  // Kollane
  digitalWrite(RED_PIN, HIGH);
  digitalWrite(GREEN_PIN, HIGH);
  digitalWrite(BLUE_PIN, LOW);
  delay(1000);
  
  // Lilla
  digitalWrite(RED_PIN, LOW);
  digitalWrite(GREEN_PIN, HIGH);
  digitalWrite(BLUE_PIN, HIGH);
  delay(1000);
  
  //Roosa
  digitalWrite(RED_PIN, HIGH);
  digitalWrite(GREEN_PIN, LOW);
  digitalWrite(BLUE_PIN, HIGH);
  delay(1000);
  
  //Valge ehk kõik on sisse lülitatud
  digitalWrite(RED_PIN, HIGH);
  digitalWrite(GREEN_PIN, HIGH);
  digitalWrite(BLUE_PIN, HIGH);
  delay(1000);
}

// Vikerkaar.
void showSpectrum() {
  int x;
  for (x = 0; x < 768; x++) {
    showRGB(x);
    delay(10); // paus 0,001 sek
  }
}

// ShowRGB()  põhivärvid:
// 0 = punane
// 255 = roheline
// 511 = sinine
// 767 = jälle punane

void showRGB(int color) {
  int redIntensity;
  int greenIntensity;
  int blueIntensity;
  if (color <= 255) {
    redIntensity = 255 - color; // lülitakse välja punane
    greenIntensity = color; // lülitakse sisse roheline
    blueIntensity = 0; // sinine on välja lülitatud
  }

  else if (color <= 511) {
    redIntensity = 0; // punane on välja lülitatud
    greenIntensity = 255 - (color - 256);
    blueIntensity = (color - 256);
  }

  else if (color >= 512) {
    redIntensity = (color - 512);
    greenIntensity = 0;
    blueIntensity = 255 - (color - 512);
  }

  analogWrite(RED_PIN, redIntensity); // punase LED´i sujuv ümberlülitamine
  analogWrite(BLUE_PIN, blueIntensity);
  analogWrite(GREEN_PIN, greenIntensity);
}

Valgusfoor

Video

https://drive.google.com/file/d/1Iix44vsfV2uSWuDFGBG9gElIJYqSiI9V/view?usp=sharing

Kirjeldus

Selles ülesandes on vaja luua valgusfoor autojuhtidele ja jalakäijatele. See peaks töötama kahes režiimis: päevarežiimis ja öörežiimis. Süsteem peaks saama nende režiimide vahel automaatselt vahetada.

Päevarežiim

  • kui autojuhtidel põleb punane, põleb jalakäijate roheline;
  • kui autojuhtidel on roheline tuli, süttib jalakäijate punane tuli;
  • kui autojuhtidel on kollane sisse lülitatud, põleb jalakäijate punane.

Öörežiim

  • jalakäijatel on valgusfoor välja lülitatud ja autojuhtidel vilgub kollane.

Komponendid

  • Arduino UNO plaat (1tk)
  • Arendusplaat (1tk)
  • Juhtmed (6tk)
  • 220 Ω Takisti (5tk)
  • LED (5tk: 2 punane, 2 roheline, 1 kollane)

Selgitus

Alustuseks peame deklareerima tihvtide konstandid, millega Arduino plaadil olevad LED-id on ühendatud (nt. const int RED = 11 – määrab pin 11 punase signaali jaoks):

const int RED = 11;
const int YELLOW = 10;
const int GREEN = 9;
const int GREEN1 = 5;
const int RED1 = 6;

Lisame funktsiooni setup(), et Arduino teaks, milliseid tihvte kasutatakse LED-ide signaalide väljastamiseks ja saaks neid juhtida (nt. pinMode(RED, OUTPUT) – ütleb Arduinole, et pin-i, millega punane LED on ühendatud (pin 11), kasutatakse signaali väljastamiseks, st. seda juhitakse väljundina):

void setup() {
  pinMode(RED, OUTPUT);
  pinMode(GREEN, OUTPUT);
  pinMode(YELLOW, OUTPUT);
  pinMode(RED1, OUTPUT);
  pinMode(GREEN1, OUTPUT);
}

pinMode() kasutatakse selleks, et teha kindlaks, kas pin töötab sisendina (andmete lugemiseks näiteks nupust) või väljundina (seadmete, näiteks LED-ide juhtimiseks).


Päevarežiim

Kõigepealt teeme nii, et autojuhtidel põleb punane ning jalakäijatel roheline (nt. digitalWrite(YELLOW, LOW) – määrab autojuhtidele kollase signaali pin (YELLOW) madalasse olekusse, mis tähendab, et kollane tuli on välja lülitatud):

digitalWrite(YELLOW, LOW); // kollane välja lülitatud
digitalWrite(GREEN, LOW);
digitalWrite(RED, HIGH); // punane sisse lülitatud
digitalWrite(GREEN1, HIGH);
digitalWrite(RED1, LOW);
delay(3000);

delay() kasutatakse programmi täitmise viivitamiseks teatud aja jooksul. See peatab koodi täitmise etteantud arvu millisekundite jaoks (nt. delay(3000) – seab ootamise 3000 millisekundiks, see tähendab, et autojuhtidele on sel ajal punane tuli ja jalakäijatele roheline tuli).

digitalWrite() on funktsioon, mida kasutatakse väärtuste (HIGH või LOW) kirjutamiseks Arduino plaadi digitaalsetele tihvtidele. See võimaldab juhtida tihvtide olekut, näiteks lülitada sisse või välja valgusdioodid.


Nüüd teeme üleminekurežiim – autojuhtidel põleb punane ja kollane ning jälakäijatel punane:

digitalWrite(YELLOW, HIGH);
digitalWrite(GREEN, LOW);
digitalWrite(RED, HIGH);
digitalWrite(GREEN1, LOW);
digitalWrite(RED1, HIGH);
delay(1000);

Nüüd on autojuhtidel valgusfoor roheline ja jalakäijatel punane:

digitalWrite(YELLOW, LOW);
digitalWrite(GREEN, HIGH);
digitalWrite(RED, LOW);
digitalWrite(GREEN1, LOW);
digitalWrite(RED1, HIGH);
delay(3000);

Loome vilkumise efekti:

for (int i=0; i<3; i++) {
    digitalWrite(GREEN, LOW);
    delay(700);
    digitalWrite(GREEN, HIGH);
    delay(700);
}

int i = 0 – antakse muutuja i algväärtusega 0
i < 3 – tingimus, tsükkel töötab seni, kuni i on väiksem kui 3
i++ – suurendab muutuja i väärtust 1 võrra pärast iga käivitamist

See kood loob vilkuva rohelise tule efekti, mis vilgub 3 korda, sisse-ja väljalülitamise vahel on 700 millisekundiline paus.


Edasi süttib autojuhtidel kollane, jalakäijatel põleb endiselt punane:

digitalWrite(YELLOW, HIGH);
digitalWrite(GREEN, LOW);
digitalWrite(RED, LOW);
digitalWrite(GREEN1, LOW);
digitalWrite(RED1, HIGH);
delay(1000);

Jalakäijatel on roheline, autojuhtidel punane:

digitalWrite(YELLOW, LOW);
digitalWrite(GREEN, LOW);
digitalWrite(RED, HIGH);
digitalWrite(GREEN1, HIGH);
digitalWrite(RED1, LOW);
delay(3000);

Öörežiim

Loome kollase valguse vilkumise efekti:

void night() {
  for (int i=0; i<5; i++) {
    digitalWrite(YELLOW, HIGH); // lülita sisse kollane
    digitalWrite(GREEN, LOW);
    digitalWrite(RED, LOW);
    digitalWrite(GREEN1, LOW);
    digitalWrite(RED1, LOW);
    delay(700);
    digitalWrite(YELLOW, LOW); // lülita välja kollane
    digitalWrite(GREEN, LOW);
    digitalWrite(RED, LOW);
    digitalWrite(GREEN1, LOW);
    digitalWrite(RED1, LOW);
    delay(700);
  }  
}

Kood loob vilkuva kollase tule efekti, mis vilgub 5 korda – kõigepealt põleb see 700 millisekundit, seejärel lülitub välja 700 millisekundit, pärast mida funktsioon kordub kuni i < 5.


Tsükkel

Loome tsükli, et kõik toimiks automaatselt:

void loop() {
  day();
  delay(1000);
  night();
  delay(1000);
}

Kood

const int RED = 11;
const int YELLOW = 10;
const int GREEN = 9;
const int GREEN1 = 5;
const int RED1 = 6;

void setup() {
  pinMode(RED, OUTPUT);
  pinMode(GREEN, OUTPUT);
  pinMode(YELLOW, OUTPUT);
  pinMode(RED1, OUTPUT);
  pinMode(GREEN1, OUTPUT);
}

// valgusfoori töö tsükkel
void loop() {
  day();
  delay(1000);
  night();
  delay(1000);
}

// päevarežiim
void day() {
  digitalWrite(YELLOW, LOW);
  digitalWrite(GREEN, LOW);
  digitalWrite(RED, HIGH);
  digitalWrite(GREEN1, HIGH);
  digitalWrite(RED1, LOW);
  delay(3000);
  
  digitalWrite(YELLOW, HIGH);
  digitalWrite(GREEN, LOW);
  digitalWrite(RED, HIGH);
  digitalWrite(GREEN1, LOW);
  digitalWrite(RED1, HIGH);
  delay(1000);
  
  digitalWrite(YELLOW, LOW);
  digitalWrite(GREEN, HIGH);
  digitalWrite(RED, LOW);
  digitalWrite(GREEN1, LOW);
  digitalWrite(RED1, HIGH);
  delay(3000);
  
  for (int i=0; i<3; i++) {
    digitalWrite(GREEN, LOW);
    delay(700);
    digitalWrite(GREEN, HIGH);
    delay(700);
  }
  
  digitalWrite(YELLOW, HIGH);
  digitalWrite(GREEN, LOW);
  digitalWrite(RED, LOW);
  digitalWrite(GREEN1, LOW);
  digitalWrite(RED1, HIGH);
  delay(1000);
  
  digitalWrite(YELLOW, LOW);
  digitalWrite(GREEN, LOW);
  digitalWrite(RED, HIGH);
  digitalWrite(GREEN1, HIGH);
  digitalWrite(RED1, LOW);
  delay(3000);
}

// öörežiim
void night() {
  for (int i=0; i<5; i++) {
    digitalWrite(YELLOW, HIGH); // lülita sisse kollane
    digitalWrite(GREEN, LOW);
    digitalWrite(RED, LOW);
    digitalWrite(GREEN1, LOW);
    digitalWrite(RED1, LOW);
    delay(700);
    digitalWrite(YELLOW, LOW); // lülita välja kollane
    digitalWrite(GREEN, LOW);
    digitalWrite(RED, LOW);
    digitalWrite(GREEN1, LOW);
    digitalWrite(RED1, LOW);
    delay(700);
  }  
}