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

  }    	

  }
// C++ code
int swPin = 4;
int ledPin = 10;
int switchstate = 0;
void setup ()
{
  pinMode(swPin, INPUT);
  pinMode(ledPin, OUTPUT);
}

void loop ()
{
  switchstate=digitalRead(swPin);
  if(switchstate==HIGH)
  {
    digitalWrite(ledPin, HIGH);
  }
  else
  {
    digitalWrite(ledPin, LOW);
  }
}
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);

}


Ülesanne 3.1 “Öölamp”




Kasutatud komponenid



Töö protsess



Uuritud funktsioonid



Kasutamisvõimalused tavaelus



Skeem



Video (link)



Programm

int RED = 11;
int GREEN = 10;
int BLUE = 9;

int potentsiomeeterPIN = A0;
int photoresistorPIN = A1;

int lightLevel, high = 0, low = 1023; 
void setup() {
  pinMode(RED, OUTPUT);
  pinMode(GREEN, OUTPUT);
  pinMode(BLUE, OUTPUT);

  Serial.begin(9600);
}

void loop() {
  int photoresistorVALUE = analogRead(photoresistorPIN);    // loeme fotorresistori väärtuse
  int potentsiomeeterVALUE = analogRead(potentsiomeeterPIN);  // loeme potentsiomeetri väärtuse

  int mode = map(potentsiomeeterVALUE, 0, 1023, 1, 3);   // määrame režiimi 1-3 potentsiomeetri järgi
  mode = constrain(mode, 1, 3);  // piirame režiimi vahemikku

  lightLevel = photoresistorVALUE;  // võtame esmalt toorväärtuse fotorresistorist
  
  autoTune();                     // rakendame automaatset häälestust

  Serial.print("photoresistorVALUE: ");
  Serial.print(photoresistorVALUE);
  Serial.print(", lightLevel: ");
  Serial.println(lightLevel);

  if (mode == 1) {
    // Režiim 1 — kõik välja lülitatud
    analogWrite(RED, 0);
    analogWrite(GREEN, 0);
    analogWrite(BLUE, 0);
  } else if (mode == 2) {
    // Režiim 2 — helesinine (sinine + roheline)
    analogWrite(RED, 0);
    analogWrite(GREEN, lightLevel);
    analogWrite(BLUE, lightLevel);
  } else if (mode == 3) {
    // Režiim 3 — juhuslikud värviüleminekud 
    int redPin = random(100, 200);
    int greenPin = random(50, 150);
    int bluePin = 255;

    // Skaleerime värvid vastavalt heledustasemele (0–255)
    int redValue = (redPin * lightLevel) / 255;
    int greenValue = (greenPin * lightLevel) / 255;
    int blueValue = (bluePin * lightLevel) / 255;

    analogWrite(RED, redValue);
    analogWrite(GREEN, greenValue);
    analogWrite(BLUE, blueValue);

    delay(300);
  }

  delay(100);
}


void autoTune() {
  // Salvestame kõige väiksema ja suurima mõõdetud väärtuse
  if (lightLevel < low) {
    low = lightLevel;
  }

  if (lightLevel > high) {
    high = lightLevel;
  }

   // Mapime (teisendame) väärtused automaatselt vastavusse 0–255 vahemikuga
  lightLevel = map(lightLevel, low + 10, high - 30, 0, 255);
  lightLevel = constrain(lightLevel, 0, 255);
}