3.1. Katse Nuppude ja Slideswitch’i kasutamise võimalus

const int button1Pin = 2;  //viik kunu on ühebdatud nupp1
 
const int button2Pin = 3; //viik kuhu on ühendatud nupp2
 
const int ledPin =  13;   
 
void setup()
 
{
 
  pinMode(button1Pin, INPUT); //algväärtuse nupu viigu sisendiks
 
  pinMode(button2Pin, INPUT); //algväärtuse nupu viigu sisendiks
 
  pinMode(ledPin, OUTPUT);   //algväärtuse LED viigu väljundiks
  
 
}
 
void loop()
 
{
 
  int button1State, button2State;  //nupu oleku muutujad
 
  button1State = digitalRead(button1Pin);// salvestame muutujasse nupu hetke väärtuse(HIGH või LOW)
 
  button2State = digitalRead(button2Pin);
 
  if (((button1State == LOW) || (button2State == LOW))   // kui nupu on alla vajutatud
 
      && !
 
      ((button1State == LOW) && (button2State == LOW))) // kui nupude on alla vajutatud
 
  {
 
    digitalWrite(ledPin, HIGH);  // lülitame LED sisse
 
  }
 
  else                          
 
  {
 
    digitalWrite(ledPin, LOW);  // lülitame LED välja
 
  }     
 
  }

Kuidas kood töötab

Kood juhib LED-tuld, mis süttib ainult siis, kui on vajutatud üks kahest nupust, aga mitte mõlemad korraga.

Funktsionid

  • pinMode() – määrab pordi töörežiimi (sisend või väljund)
  • digitalRead() – loeb pordi hetkeoleku (HIGH või LOW)
  • digitalWrite() – määrab pordi väärtuse (lülitab sisse või välja)
  • setup() – algfunktsioon, mida käivitatakse üks kord programmi käivitamisel
  • loop() – peatsükkel, mis kordub pidevalt

Kuidas elus kasutada

  • Seda programmi saab kasutada lihtsa turvasüsteemi loomiseks, kus LED-tuli süttib, kui vajutatakse ainult ühte nuppu näiteks ukse juures.
  • Seda saab kasutada ka õppematerjalina elektroonika ja programmeerimise alustamiseks, õpetades loogikat ja sisendite/väljundite kasutamist.

3.2. Katse Photoresistor

const int sensorPin = 0;
 
const int ledPin = 9;
 
int lightLevel, high = 0, low = 1023; 
 
void setup()
 
{
 
  pinMode(ledPin, OUTPUT);
 
  Serial.begin(9600); // //Serial monitori seadistamine
 
}
 
void loop()
 
{
 
  // AnalogRead() kasutab väärtused vahemikus 0 (0 вольт) и 1023 (5 вольт).
 
  // AnalogWrite(),  kasutatakse, et LEDi sujuvalt sisselülitada 0(ei põle) kuni 255(põleb maksimalselt).
 
  lightLevel = analogRead(sensorPin); //loeme mõõdetud analoogväärtuse
  // Map() teisendab sisendi väärtused ühest vahemikust teisse. Näiteks, "from" 0-1023 "to" 0-255.
 
  // Constrain() saed muutujale kindlad piirväärtused.
 
  // Näiteks:  kui constrain() kohtub arvudega 1024, 1025, 1026.., siis ta teisendab need 1023, 1023, 1023..). Kui arvud vähem kui 0, siis teisendab need 0:. 
 
  // lightLevel = constrain(lightLevel, 0, 255);
 
  manualTune();  //
 
  //autoTune();  //
 
  analogWrite(ledPin, lightLevel);
 
  // Выражение выше, будет изменять яркость светодиода вместе с уровнем освещенности. Чтобы сделать наоборот, заменить в analogWrite(ledPin, lightLevel) "lightLevel" на "255-lightLevel". Теперь у нас получился ночник!
 
  Serial.print(lightLevel);     // prindime tulemused Serial Monitori (вывод данных с фоторезистора (0-1023))
 
  Serial.println("");          
 
  delay(1000);                
 
}
 
void manualTune()
 
{
 
  lightLevel = map(lightLevel, 300, 800, 0, 255); // kaardistame selle analoogväljundi vahemikku (будет от 300 темно, до 800 (светло)). 
 
  lightLevel = constrain(lightLevel, 0, 255);
 
} 
 
void autoTune()
 
{
 
   if (lightLevel < low)  
 
  {                      
 
    low = lightLevel;   
 
  }
 
  if (lightLevel > high)
 
  {
 
    high = lightLevel;
 
  }
 
  lightLevel = map(lightLevel, low+10, high-30, 0, 255);
 
  lightLevel = constrain(lightLevel, 0, 255);
 
}

Kuidas kood töötab

See kood juhib LED-tule eredust sõltuvalt valguse tasemest, mida mõõdab fotorresistor. Mida eredam on valgus, seda eredamalt särab LED-tuli.

Funktsionid

  • pinMode() – määrab pordi töörežiimi (sisend või väljund)
  • Serial.begin() – alustab järjestikuse andmete edastamise alustamist
  • analogRead() – loeb analoogväärtust pordilt (vahemikus 0 kuni 1023)
  • map() – teisendab arvu ühest vahemikust teise
  • constrain() – piirab väärtuse kindlatesse piiridesse
  • analogWrite() – määrab PWM signaali väärtuse (vahemikus 0 kuni 255)
  • Serial.print() – kuvab andmeid järjestikuses monitoris
  • Serial.println() – kuvab andmeid järjestikuses monitoris uue reale
  • delay() – teeb programmile pausi
  • setup() – seadistamise funktsioon, mida käivitatakse üks kord käivitamisel
  • loop() – peamine tsükkel, mis täidetakse pidevalt
  • manualTune() – kasutaja loodud funktsioon käsitsi ereduse seadistamiseks
  • autoTune() – kasutaja loodud funktsioon automaatseks ereduse seadistamiseks

Kuidas elus kasutada

  • Seda programmi saab kasutada automaatse valgustuse süsteemi loomiseks, kus LED-tuli kohandub keskkonna valgustusega, näiteks öösel, et muuta ruumide valgustust mugavamaks.
  • Seda saab rakendada kasulike rakenduste jaoks, nagu näiteks kodu aiavalgustuse juhtimine, kus tuled süttivad ja heledust reguleeritakse vastavalt päevasest valgusest sõltuvalt.

Ülesanne 3.1 Öölamp

// Пины
const int ldrPin = A0;
const int potPin = A1;
 
const int ledPins[] = {8, 9, 10};
const int ledCount = 3;
 
void setup() {
  for (int i = 0; i < ledCount; i++) {
    pinMode(ledPins[i], OUTPUT);
    digitalWrite(ledPins[i], LOW);
  }
 
  Serial.begin(9600);
}
 
void loop() {
  int lightLevel = analogRead(ldrPin);
  int potValue = analogRead(potPin);
 
  // Разделим значение потенциометра на 5 зон
  int mode = map(potValue, 0, 1023, 1, 5);
 
  Serial.print("Режим: ");
  Serial.print(mode);
  Serial.print(" | Освещение: ");
  Serial.println(lightLevel);
 
  switch (mode) {
    case 1: // Все выключены
      controlLeds(0);
      break;
 
    case 2: // Один LED в зависимости от освещения
      if (lightLevel < 500) controlLeds(1);
      else controlLeds(0);
      break;
 
    case 3: // Два LED в зависимости от освещения
      if (lightLevel < 500) controlLeds(2);
      else controlLeds(0);
      break;
 
    case 4: // Три LED в зависимости от освещения
      if (lightLevel < 500) controlLeds(3);
      else controlLeds(0);
      break;
 
    case 5: // Все включены всегда
      controlLeds(3);
      break;
  }
 
  delay(100);
}
 
void controlLeds(int numberOn) {
  for (int i = 0; i < ledCount; i++) {
    digitalWrite(ledPins[i], i < numberOn ? HIGH : LOW);
  }
}

Kuidas kood töötab

  • Potentsiomeeter valib ühe viiest režiimist:
  • Kõik LED-id on välja lülitatud.
  • Üks LED süttib, kui valgust on vähe.
  • Kaks LED-i süttivad, kui valgust on vähe.
  • Kolm LED-i süttivad, kui valgust on vähe.
  • Kõik LED-id on alati sisse lülitatud.
  • Fotorresistor määrab valgustaseme ja mõjutab LED-ide süttimist režiimides 2–4.

Funktsionid

  • setup()
  • — Seadistab LED-ide pinnid ja käivitab serial-porti.
  • loop()
  • — Programmi põhitsükkel: loeb andureid, valib töörežiimi ja juhib LED-e vastavalt tingimustele.
  • controlLeds(int numberOn)
  • — Lülitab sisse määratud arvu LED-e sõltuvalt antud parameetrist.

Kuidas elus kasutada

  • 1. Nutikas valgustus
    Kasuta fotorresistori automaatseks valgustuse juhtimiseks:
    Toas lülitub valgus sisse ainult siis, kui valgust on vähe.
    Potentsiomeetri abil saab valida, mitu lampi (LED-i) süttib sõltuvalt valgustasemest.

    2. Taimede valgustus
    Kui toas on liiga pime, lülitub automaatselt sisse lisavalgustus taimedele.
    Potentsiomeetriga saab reguleerida valgustugevust või lampide arvu.

    4. Laste öölamp
    Kui toas on pime, lülitub sisse üks või mitu LED-i, luues pehme valgustuse.
    Vanemad saavad potentsiomeetri abil määrata heleduse režiimi