Robootika: Report – Valguskett

Задание:

Создать световую цепочку, состоящую из нескольких светодиодов (обычных или RGB), работающих в нескольких различных режимах освещения.

Световая цепочка должна содержать не менее пяти режимов освещения:

1. Все светодиоды мигают одновременно.

2. Все светодиоды мигают по очереди.

3. Все светодиоды мигают по очереди, при этом светодиоды мигают по одному цвету (RGB – красный, зеленый, синий).

4. Светодиоды мигают в случайном порядке (эффект свечи).

Понадобится:

  • х1 Потенциометр
  • х5 LED-лампа
  • х5 Резистор
  • х10 Провод

Готовая схема:

Работа:

  1. Потенциометр подключён к аналоговому вводу и разъёмам + и –
  2. LED-Лампы подключены с помощью резисторов к разъёмам – и с помощью проводов к разъёмам с питанием
  3. Подключено дополнительное питание 5V

Видео:

Код:

int ledPin1 = 13;
int ledPin2 = 12;
int ledPin3 = 11;
int ledPin4 = 10;
int ledPin5 = 9;

int sensorValue = 0;
int sensorPin = A0;

void setup() {      
  pinMode(ledPin1, OUTPUT);  
  pinMode(ledPin2, OUTPUT);
  pinMode(ledPin3, OUTPUT);
  pinMode(ledPin4, OUTPUT);
  pinMode(ledPin5, OUTPUT);

  Serial.begin(9600);
  randomSeed(analogRead(A1)); // Инициализация генератора случайных чисел
}

// 1. Все светодиоды мигают одновременно
void mode1() {
  for (int i = 0; i < 5; i++) {
    digitalWrite(ledPin1, HIGH);
    digitalWrite(ledPin2, HIGH);
    digitalWrite(ledPin3, HIGH);
    digitalWrite(ledPin4, HIGH);
    digitalWrite(ledPin5, HIGH);
    delay(200);
    digitalWrite(ledPin1, LOW);
    digitalWrite(ledPin2, LOW);
    digitalWrite(ledPin3, LOW);
    digitalWrite(ledPin4, LOW);
    digitalWrite(ledPin5, LOW);
    delay(200);
  }
}

// 2. Светодиоды по одному
void mode2() {
  int pins[] = {ledPin1, ledPin2, ledPin3, ledPin4, ledPin5};
  for (int i = 0; i < 5; i++) {
    digitalWrite(pins[i], HIGH);
    delay(200);
    digitalWrite(pins[i], LOW);
  }
}

// 3. "Цветной" режим
void mode3() {
  digitalWrite(ledPin1, HIGH); digitalWrite(ledPin4, HIGH);
  delay(200);
  digitalWrite(ledPin1, LOW); digitalWrite(ledPin4, LOW);
 
  digitalWrite(ledPin2, HIGH);
  delay(200);
  digitalWrite(ledPin2, LOW);

  digitalWrite(ledPin3, HIGH); digitalWrite(ledPin5, HIGH);
  delay(200);
  digitalWrite(ledPin3, LOW); digitalWrite(ledPin5, LOW);
}

// 4. Случайный режим
void mode4() {
  int pins[] = {ledPin1, ledPin2, ledPin3, ledPin4, ledPin5};
  for (int i = 0; i < 10; i++) {
    int randPin = pins[random(0, 5)];
    digitalWrite(randPin, HIGH);
    delay(random(100, 300));
    digitalWrite(randPin, LOW);
  }
}

// 5. Работают все
void mode5() {
  int pins[] = {ledPin1, ledPin2, ledPin3, ledPin4, ledPin5};
  for (int i = 0; i < 5; i++) {
    digitalWrite(pins[i], HIGH);
    delay(150);
    digitalWrite(pins[i], LOW);
  }
  for (int i = 3; i > 0; i--) {  
    digitalWrite(pins[i], HIGH);
    delay(150);
    digitalWrite(pins[i], LOW);
  }
}

void loop() {
  int Value_new = analogRead(sensorPin);
 
  Value_new = map(Value_new, 0, 1023, 1, 6);
  Serial.println(Value_new); // Для отладки

  if (Value_new == 2) {
    mode1();
  }
  else if (Value_new == 3) {
    mode2();
  }
  else if (Value_new == 4) {
    mode3();
  }
  else if (Value_new == 5) {
    mode4();
  }
  else if (Value_new == 6) {
    mode5();
  }
  else {
    digitalWrite(ledPin1, LOW);
    digitalWrite(ledPin2, LOW);
    digitalWrite(ledPin3, LOW);
    digitalWrite(ledPin4, LOW);
    digitalWrite(ledPin5, LOW);
  }
}