Ход работы

  1. Изучили материал
  2. Сделали схему и задали значения переменных и вывод пинов
const int buttonPin = 13;
const int sensorPin = 0;
const int GREEN_PIN = 12;
const int BLUE_PIN = 11;
const int RED_PIN = 10;
const int GREEN_PIN_2 = 9;
const int BLUE_PIN_2 = 8;
const int RED_PIN_2 = 7;
int lightLevel;

void setup()
{
  pinMode(buttonPin, INPUT);
  
    pinMode(RED_PIN, OUTPUT);
    pinMode(GREEN_PIN, OUTPUT);
    pinMode(BLUE_PIN, OUTPUT);
    pinMode(RED_PIN_2, OUTPUT);
    pinMode(GREEN_PIN_2, OUTPUT);
    pinMode(BLUE_PIN_2, OUTPUT);
  
    Serial.begin(9600);
}

3. Написали основные функции

//Функции для вывода цветов RGB
void cyan() 
{
    digitalWrite(RED_PIN, LOW);
    digitalWrite(GREEN_PIN, HIGH);
    digitalWrite(BLUE_PIN, HIGH);
    delay(1000);
}

void yellow()
{
    digitalWrite(RED_PIN, HIGH);
    digitalWrite(GREEN_PIN, HIGH);
    digitalWrite(BLUE_PIN, LOW);
    delay(1000);
}

void white()
{
    digitalWrite(RED_PIN, HIGH);
    digitalWrite(GREEN_PIN, HIGH);
    digitalWrite(BLUE_PIN, HIGH);
    delay(1000);
}

4. Далее разбирались как работает фоторезистор и кнопка
5. Написали для их считывания код. Также функцию для переноса значений из одного диапазона в другой

int buttonState;
buttonState = digitalRead(buttonPin);
lightLevel = analogRead(sensorPin);

//Функцию для переноса значений
manualTune();
void manualTune()
{
  lightLevel = map(lightLevel, 300, 800, 1, 3);    
}
//Это все закинули в основной цикл
void loop()
{
    int buttonState;
    buttonState = digitalRead(buttonPin);
    lightLevel = analogRead(sensorPin);
    manualTune();

    if (lightLevel == 1 && buttonState == LOW) //конструкция if для проверки. Если уровень света n и значение кнопки LOW, то...
    {
      cyan(); //это для первого RGB светодиода
      turnoff_rgb(); //это для второго RGB светодиода
    }

    else if (lightLevel == 2 && buttonState == LOW)
    {
      white(); //это для первого RGB светодиода
      colors_rgb(); //это для второго RGB светодиода
    }

    else if (lightLevel == 0 && buttonState == LOW)
    {
      yellow(); //это для первого RGB светодиода
      turnoff_rgb(); //это для второго RGB светодиода
    }
    else //иначе выключить первый светодиод
    {
      digitalWrite(RED_PIN, LOW);
      digitalWrite(GREEN_PIN, LOW);
      digitalWrite(BLUE_PIN, LOW);
      delay(1000);
    }
  
    Serial.print(lightLevel); //вывод значений с фоторезистра на монитор
    Serial.println("");          
    delay(1000);
}

6. Мы поняли что сделали неправильно. Первый светодиод просто меняет цвет от разного уровня света. После этого мы добавили еще один светодиод и он работает только при низком уровне света и у него цвета меняются случайно

//функция, которая генерирует случайным образом цвета
void colors_rgb()
{
  int red = random(0,255); //у RGB цветов значения до 255, поэтому такой рандом
  int green = random(0,255);
  int blue = random(0,255);
  analogWrite(GREEN_PIN_2, green); //тут подставляются значения для вывода цветов
  analogWrite(BLUE_PIN_2, blue);
  analogWrite(RED_PIN_2, red);
  delay(10);
}
//функция для выключения второго светодиода
void turnoff_rgb()
{  
  analogWrite(GREEN_PIN_2, 0);
  analogWrite(BLUE_PIN_2, 0);
  analogWrite(RED_PIN_2, 0);
}

Как работает ночник

При уровне света (в программе arduino и в tinkercad почему-то значения уровня света разные)

0 (светло) – первый светодиод загорается желтым, а второй выключен
1 (средний уровень света) – первый светодиод загорается голубым, а второй выключен
2 (темно) – первый светодиод загорается белым и запускается функция colors_rgb()

Если один раз нажать на кнопку при уровне света 2 и отпустить, то второй светодиод продолжит гореть

Вообще первый светодиод был добавлен для изучения работы фоторезистера

Ссылка на проект
https://www.tinkercad.com/things/ggs2md3kyGw-mighty-gogo-inari/editel?sharecode=AIMV83WuND3SBthYactouNDTp87h0bQOhDy4dJuRex4

Компоненты

Фоторезистор — 1
RGB LED лампа — 2
Резистор 220 Ом — 7
Резистор 10 кОм – 1
Кнопка — 1
Провод – 15

Макетка
Arduino UNO R3

Cхема подключения компонентов к плате

Возможности применения в жизни

Фоторезистор можно применить для:

  • Ночников
  • В сигнализации
  • Для изменения яркости экрана в технике в зависимости от уровня света

Видео работы