Ход работы
- Изучили материал
- Сделали схему и задали значения переменных и вывод пинов
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


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

Возможности применения в жизни
Фоторезистор можно применить для:
- Ночников
- В сигнализации
- Для изменения яркости экрана в технике в зависимости от уровня света
