Часть 3. Кнопка и фоторезистор

Uued funktsioonid:
digitalRead() — Reads the value from a specified digital pin, either HIGH or LOW

Syntax
digitalRead(pin)

Nupp

Töö protsess:
See kood lülitab LED-i sisse, kui vajutada ühte kahest nupust. Kuid kui mõlemat nuppu vajutatakse korraga või kumbagi ei vajutata, lülitub LED välja.

Kasutatud:
1x Arduino uno
1x LED lamp
2x Nuppid
3x 330 oomi takisti
7x Juhtmed

Kood:

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
  }    	
}

Foto :

Näidis- Slideswitch’i kasutamine

Töö protsess:
Kui vajutate nuppu, süttib LED.
Nupu vabastamisel LED-tuli kustub.

Kasutatud:
1x Arduino uno
1x LED lamp
1x Slideswitch
1x 330 oomi takisti
1x Patarei
7x Juhtmed

Kood:

// C++ code for Arduino
// Управление светодиодом с помощью кнопки

const int swPin = 9;      // Пин, к которому подключена кнопка
const int ledPin = 12;    // Пин, к которому подключен светодиод

void setup() {
  pinMode(swPin, INPUT);      // Настраиваем пин кнопки как вход
  pinMode(ledPin, OUTPUT);    // Настраиваем пин светодиода как выход
}

void loop() {
  int switchState = digitalRead(swPin); // Читаем состояние кнопки

  if (switchState == HIGH) {
    digitalWrite(ledPin, HIGH); // Включаем светодиод
  } else {
    digitalWrite(ledPin, LOW);  // Выключаем светодиод
  }
}

Foto :

Fototakisti abil valguse mõõtmine

Töö protsess:
Juhib LED-i heledust sõltuvalt fototakisti poolt mõõdetud valgustusest

Kasutatud:
1x Arduino uno
1x LED lamp
1x Fototakisti
1x 330 oomi takisti
1x 10000 oomi takisti
6x Juhtmed

Kood:

const int sensorPin = 0;
const int ledPin = 2;
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(100);                
}
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);
}

Foto :

Öölamp

Töö protsess:

RGB-värvid helendavad, samal ajal kui fotoresistor näitab pimedust (treshold). Kui fotoresistor näitab valgust, lülituvad RGB LED-pirnid välja.

Funktsioonid:

lightShow() — See funktsioon loeb fotoresistori väärtuse, mis kontrollib lambi heledust.

setRGB() — funktsioon, mis paneb RGB valgusdioodi helendama RGB-värvides.

Kasutatud:
1x Arduino uno
1x RGB LED lamp
1x Fototakisti
3x 330 oomi takisti
1x 10000 oomi takisti
9x Juhtmed

Kood:

const int ledPins[] = {13, 12, 11};
const int SensorPin = A0;
const int treshold = 300;

int cycle = 0;
 
void setup() {
  Serial.begin(9600);
  for (int i = 0; i < 9; i++) {
    pinMode(ledPins[i], OUTPUT);
  }
}
 
void loop() {
  lightShow();
}
 
void lightShow() {
  int potValue = analogRead(SensorPin);
  float rad = 0.024;
  int brightness = map(potValue, treshold, 1023, 300, 255);
 
  if (potValue < treshold) {
    setRGB(0, 0, 0);
    return;
  }

  cycle = (cycle + 1) % 255;
  float c = cycle / 255.0 * M_PI;
  int r = sin(c) * 255;
  int g = sin(c) * 255;
  int b = sin(c) * 255;
  Serial.println("C: " + String(c) + " R: " + String(r) + "G: " + String(g) + "B: " + String(b));
 
  setRGB(r, g, b);
  delay(10);
}
 
void setRGB(int red, int green, int blue) {
  analogWrite(ledPins[0], red);
  analogWrite(ledPins[2], green);
  analogWrite(ledPins[1], blue);
}

Foto:

Video: