LED RGB / Valgusfoor

KATSE 1 LED RGB

LED RGB

const int RED_PIN = 11;

const int GREEN_PIN = 9;

const int BLUE_PIN = 10;

int DISPLAY_TIME = 100;  // värvimuutuse kiirus

void setup()

{

  pinMode(RED_PIN, OUTPUT);

  pinMode(GREEN_PIN, OUTPUT);

  pinMode(BLUE_PIN, OUTPUT);

}

void loop()

{

mainColors();

showSpectrum();

}

void mainColors()

{

// Kõik LEDid on välja lülitatud

  digitalWrite(RED_PIN, LOW);

  digitalWrite(GREEN_PIN, LOW);

  digitalWrite(BLUE_PIN, LOW);

 delay(50);

//Põleb punane

  digitalWrite(RED_PIN, HIGH);

  digitalWrite(GREEN_PIN, LOW);

  digitalWrite(BLUE_PIN, LOW);

  delay(50);

// Põleb roheline

  digitalWrite(RED_PIN, LOW);

  digitalWrite(GREEN_PIN, HIGH);

  digitalWrite(BLUE_PIN, LOW);

  delay(50);

// Sinine on sisse lülitatud

  digitalWrite(RED_PIN, LOW);

  digitalWrite(GREEN_PIN, LOW);

  digitalWrite(BLUE_PIN, HIGH);

  delay(50);

// Kollane.

  digitalWrite(RED_PIN, HIGH);

  digitalWrite(GREEN_PIN, HIGH);

  digitalWrite(BLUE_PIN, LOW);

  delay(50);

// Lilla

  digitalWrite(RED_PIN, LOW);

  digitalWrite(GREEN_PIN, HIGH);

  digitalWrite(BLUE_PIN, HIGH);

  delay(50);

//Roosa

  digitalWrite(RED_PIN, HIGH);

  digitalWrite(GREEN_PIN, LOW);

  digitalWrite(BLUE_PIN, HIGH);

  delay(50);

//Valge ehk kõik on sisse lülitatud

  digitalWrite(RED_PIN, HIGH);

  digitalWrite(GREEN_PIN, HIGH);

  digitalWrite(BLUE_PIN, HIGH);

  delay(50);

}

// Vikerkaar. 

void showSpectrum()

{

  int x;

  for (x = 0; x < 768; x++)

  {

    showRGB(x);  // 

    delay(10);   // paus 0,001 sek

  }

}

// ShowRGB()  põhivärvid: 

// 0 = punane 

// 255 = roheline

// 511 = sinine

// 767 = jälle punane 

void showRGB(int color)

{

  int redIntensity;

  int greenIntensity;

  int blueIntensity;

  if (color <= 255)                

  {

    redIntensity = 255 - color;    // lülitakse välja punane

    greenIntensity = color;        // lülitakse sisse roheline

    blueIntensity = 0;             // sinine on välja lülitatud

  }

  else if (color <= 511)          

  {

    redIntensity = 0;                     // punane on välja lülitatud

    greenIntensity = 255 - (color - 256); 

    blueIntensity = (color - 256);        

  }

  else if (color >= 512)             

  {

    redIntensity = (color - 512);        

    greenIntensity = 0;                  

    blueIntensity = 255 - (color - 512);  

  }

  analogWrite(RED_PIN, redIntensity); // punase LED´i sujuv ümberlülitamine

  analogWrite(BLUE_PIN, blueIntensity);

  analogWrite(GREEN_PIN, greenIntensity);

}

Пояснение кода / описание

Программа управляет RGB-светодиодом, который подключён к трем пинам:

  • Красный — пин 11
  • Зелёный — пин 9
  • Синий — пин 10

Основные функции:

  1. Инициализация (setup):
    Все три пина настроены как выходы.
  2. Основной цикл (loop):
    В бесконечном цикле вызываются две функции:
    • mainColors() — выводит основные цвета и их комбинации (вкл./выкл. без градаций яркости).
    • showSpectrum() — плавно перебирает весь спектр RGB, создавая эффект радуги.

Детали функций:

1. mainColors():

Последовательно включает светодиод в такие цвета:

  • Выкл.
  • Красный
  • Зелёный
  • Синий
  • Жёлтый (красный + зелёный)
  • Голубой (зелёный + синий)
  • Розовый (красный + синий)
  • Белый (все цвета включены)

Каждый цвет горит 50 мс, переключение между ними резкое (без градиента).


2. showSpectrum():

Создает плавный переход между цветами:

  • Использует цикл от 0 до 767, в котором каждый шаг — это новое сочетание яркости для красного, зелёного и синего каналов.
  • Каждый шаг задерживается на 10 мс, создавая эффект плавной смены цветов (радуги).

Пояснение спектра в showRGB(int color):

  • 0–255:
    Переход от красного к зелёному (постепенно убавляется красный и прибавляется зелёный).
  • 256–511:
    Переход от зелёного к синему (убавляется зелёный и прибавляется синий).
  • 512–767:
    Переход от синего к красному (убавляется синий и прибавляется красный).

Цвета управляются с помощью ШИМ (PWM) через analogWrite, что позволяет регулировать яркость каждого цвета.


Итог:

  • mainColors() демонстрирует базовые цвета и их комбинации.
  • showSpectrum() создаёт эффект радуги с плавными переходами.

LED

// C++ code
//
void setup()
{
  pinMode(13, OUTPUT);
}

void loop()
{
  digitalWrite(13, HIGH);
  delay(500); // Wait for 1000 millisecond(s)
  digitalWrite(13, LOW);
  delay(500); // Wait for 1000 millisecond(s)
}

Описание работы кода

Основные шаги:

  1. Инициализация (setup):
    • Пин 13 настраивается как выходной с помощью pinMode(13, OUTPUT);.
    • Обычно на Arduino этот пин подключён к встроенному светодиоду.
  2. Основной цикл (loop):
    • Включается светодиод (digitalWrite(13, HIGH);).
    • Пауза 500 мс (delay(500);).
    • Выключается светодиод (digitalWrite(13, LOW);).
    • Снова пауза 500 мс.

Результат:

Светодиод мигает с частотой 1 Гц (раз в секунду), включаясь и выключаясь каждые 0,5 секунды.

VALGUSFOOR

int redcar = 13;
int yellowcar = 12;
int greencar = 11;

int redpeople = 10;
int greenpeople = 9;

bool dayMode = true;

void setup() {
  pinMode(redcar, OUTPUT);
  pinMode(yellowcar, OUTPUT);
  pinMode(greencar, OUTPUT);
  pinMode(redpeople, OUTPUT);
  pinMode(greenpeople, OUTPUT);
}

void loop() {
  if (dayMode) {
    // День

    // Стоп для машин, пешеходы идут
    digitalWrite(redcar, HIGH);
    digitalWrite(redpeople, LOW);
    digitalWrite(greenpeople, HIGH);
    delay(5000);

    // жёлтый мигает, пешеходам стоп
    digitalWrite(greenpeople, LOW);
    digitalWrite(redpeople, HIGH);
    for (int i = 0; i < 3; i++) {
      digitalWrite(yellowcar, HIGH);
      delay(300);
      digitalWrite(yellowcar, LOW);
      delay(300);
    }

    // Едут машины
    digitalWrite(redcar, LOW);
    digitalWrite(greencar, HIGH);
    delay(5000);

    // Конец: зелёный мигает
    for (int i = 0; i < 3; i++) {
      digitalWrite(greencar, LOW);
      delay(300);
      digitalWrite(greencar, HIGH);
      delay(300);
    }
    digitalWrite(greencar, LOW);

    // Переключаем на ночной режим
    dayMode = false;
  } else {
    // Ночной режим

    // Все пешеходные огни выключены
    digitalWrite(redpeople, LOW);
    digitalWrite(greenpeople, LOW);

    // Красный и зелёный для машин выключены
    digitalWrite(redcar, LOW);
    digitalWrite(greencar, LOW);

    // Мигающий жёлтый для машин
    for (int i = 0; i < 10; i++) { // 10 миганий (примерно 10 секунд)
      digitalWrite(yellowcar, HIGH);
      delay(500);
      digitalWrite(yellowcar, LOW);
      delay(500);
    }

    // Вернуться в дневной режим
    dayMode = true;
  }
}

Описание проделанной работы: Светофор

В данном проекте реализована система управления светофором с дневным и ночным режимами работы. Используется пять светодиодов:

  • Три светодиода для автомобилей: красный, жёлтый и зелёный.
  • Два светодиода для пешеходов: красный и зелёный.

Управление осуществляется с помощью микроконтроллера Arduino. Логика работы разделена на два режима:


Алгоритм работы

Дневной режим:

  1. Стоп для автомобилей, пешеходы идут:
    • Красный свет для машин включён.
    • Зелёный для пешеходов.
    • Время перехода — 5 секунд.
  2. Пешеходам стоп, жёлтый мигает для машин:
    • Красный свет для пешеходов.
    • Жёлтый для машин мигает три раза (по 300 мс).
  3. Едут машины:
    • Зелёный свет для машин включён на 5 секунд.
  4. Конец зелёного сигнала для машин:
    • Зелёный свет для машин мигает три раза (по 300 мс).

После завершения цикла режим переключается на ночной.


Ночной режим:

  1. Отключены все пешеходные огни.
  2. Красный и зелёный сигналы для машин отключены.
  3. Мигающий жёлтый для машин:
    • Жёлтый свет мигает десять раз (по 500 мс), имитируя ночной режим предупреждения.

После завершения ночного режима возвращается дневной.