ru_RU
request-free-img

Гирлянда (задание 2)

Гирля́нда — декоративный мотив в виде сплетённых цветов, ветвей, стеблей с листьями, плодов, иногда в соединении с лентами — бандельверками, бантами, маскаронами, букраниями.

На этот раз нам нужно было сделать гирлянду и подключить потенциометр которым можно будет менять режимы работы гирлянды.

Для практики мы попробовали сделаьб простую работу и использовали в ней готовый код.

В этой работе от потенциометра зависит скорость мигания лампы.

Моя симуляция выглядит вот так

Режимы работы хотелось сделать поинтереснее, по этому я потратил на код достаточно много времени.

int sensorPin = 0;

int red1 = 13;
int green1 = 12;
int yellow1 = 11;
int red2 = 10;
int green2 = 9;
int yellow2 = 8;
int red3 = 7;
int green3 = 6;
int yellow3 = 5;

int sensorValue = 0;
int Value_new;
// Этот режим чередует мигание светодиодами красного, зеленого и желтого цветов во всех трех группах. Каждый цвет светится в течение 100 миллисекунд, а затем выключается на 200 миллисекунд.
void rezim1() {
  digitalWrite(red1, HIGH);
  digitalWrite(red2, HIGH);
  digitalWrite(red3, HIGH);
  delay(100);
  digitalWrite(red1, LOW);
  digitalWrite(red2, LOW);
  digitalWrite(red3, LOW);
  delay(200);

  digitalWrite(green1, HIGH);
  digitalWrite(green2, HIGH);
  digitalWrite(green3, HIGH);
  delay(100);
  digitalWrite(green1, LOW);
  digitalWrite(green2, LOW);
  digitalWrite(green3, LOW);
  delay(200);

  digitalWrite(yellow1, HIGH);
  digitalWrite(yellow2, HIGH);
  digitalWrite(yellow3, HIGH);
  delay(100);
  digitalWrite(yellow1, LOW);
  digitalWrite(yellow2, LOW);
  digitalWrite(yellow3, LOW);
  delay(200);
}
//В этом режиме случайным образом включаются и выключаются светодиоды каждого цвета в каждой из трех групп.
void rezim2() {
  digitalWrite(red1, random(2));
  digitalWrite(red2, random(2));
  digitalWrite(red3, random(2));
  digitalWrite(yellow1, random(2)); 
  digitalWrite(yellow2, random(2));
  digitalWrite(yellow3, random(2));
  digitalWrite(green1, random(2)); 
  digitalWrite(green2, random(2));
  digitalWrite(green3, random(2));
  delay(300);
}
//Этот режим эмулирует работу светофора. Сначала все светодиоды горят красным, затем все желтым, затем все зеленым. Каждый цвет горит в течение 100 миллисекунд, затем выключается на 200 миллисекунд.
void rezim3() {
  digitalWrite(green1, LOW);
  digitalWrite(green2, LOW);
  digitalWrite(green3, LOW);
  delay(200);
  digitalWrite(yellow1, HIGH);
  digitalWrite(yellow2, HIGH);
  digitalWrite(yellow3, HIGH);
  delay(100);
  digitalWrite(red1, HIGH);
  digitalWrite(red2, HIGH);
  digitalWrite(red3, HIGH);
  delay(100);
  digitalWrite(yellow1, LOW);
  digitalWrite(yellow2, LOW);
  digitalWrite(yellow3, LOW);
  delay(200);
  digitalWrite(green1, HIGH);
  digitalWrite(green2, HIGH);
  digitalWrite(green3, HIGH);
  delay(100);
  digitalWrite(red1, LOW);
  digitalWrite(red2, LOW);
  digitalWrite(red3, LOW);
  delay(200);
}
// В этом режиме светодиоды в каждой группе последовательно мигают красным, зеленым и желтым цветами. Каждый цвет светится в течение 100 миллисекунд, а затем выключается на 100 миллисекунд.
void rezim4() {
  digitalWrite(red1, HIGH);
  delay(100);
  digitalWrite(red1, LOW);
  delay(100);
  digitalWrite(green1, HIGH);
  delay(100);
  digitalWrite(green1, LOW);
  delay(100);
  digitalWrite(yellow1, HIGH);
  delay(100);
  digitalWrite(yellow1, LOW);
  delay(100);
  digitalWrite(red2, HIGH);
  delay(100);
  digitalWrite(red2, LOW);
  delay(100);
  digitalWrite(green2, HIGH);
  delay(100);
  digitalWrite(green2, LOW);
  delay(100);
  digitalWrite(yellow2, HIGH);
  delay(100);
  digitalWrite(yellow2, LOW);
  delay(100);
  digitalWrite(red3, HIGH);
  delay(100);
  digitalWrite(red3, LOW);
  delay(100);
  digitalWrite(green3, HIGH);
  delay(100);
  digitalWrite(green3, LOW);
  delay(100);
  digitalWrite(yellow3, HIGH);
  delay(100);
  digitalWrite(yellow3, LOW);
  delay(100);

  digitalWrite(yellow3, HIGH);
  delay(100);
  digitalWrite(yellow3, LOW);
  delay(100);
  digitalWrite(green3, HIGH);
  delay(100);
  digitalWrite(green3, LOW);
  delay(100);
  digitalWrite(red3, HIGH);
  delay(100);
  digitalWrite(red3, LOW);
  delay(100);
  digitalWrite(yellow2, HIGH);
  delay(100);
  digitalWrite(yellow2, LOW);
  delay(100);
  digitalWrite(green2, HIGH);
  delay(100);
  digitalWrite(green2, LOW);
  delay(100);
  digitalWrite(red2, HIGH);
  delay(100);
  digitalWrite(red2, LOW);
  delay(100);
  digitalWrite(yellow1, HIGH);
  delay(100);
  digitalWrite(yellow1, LOW);
  delay(100);
  digitalWrite(green1, HIGH);
  delay(100);
  digitalWrite(green1, LOW);
  delay(100);
  digitalWrite(red1, HIGH);
  delay(100);
  digitalWrite(red1, LOW);
}
//Этот режим просто мигает всеми светодиодами в гирлянде: они все включаются в одно время и выключаются в одно время. Каждый цвет горит в течение 200 миллисекунд, а затем выключается на 200 миллисекунд.
void rezim5() {
  digitalWrite(red1, HIGH);
  digitalWrite(red2, HIGH);
  digitalWrite(red3, HIGH);
  delay(200);

  digitalWrite(green1, HIGH);
  digitalWrite(green2, HIGH);
  digitalWrite(green3, HIGH);
  delay(200);

  digitalWrite(yellow1, HIGH);
  digitalWrite(yellow2, HIGH);
  digitalWrite(yellow3, HIGH);
  delay(200);

  digitalWrite(red1, LOW);
  digitalWrite(red2, LOW);
  digitalWrite(red3, LOW);
  delay(200);

  digitalWrite(green1, LOW);
  digitalWrite(green2, LOW);
  digitalWrite(green3, LOW);
  delay(200);

  digitalWrite(yellow1, LOW);
  digitalWrite(yellow2, LOW);
  digitalWrite(yellow3, LOW);
  delay(200);
}

void setup() {
  pinMode(red1, OUTPUT);
  pinMode(red2, OUTPUT);
  pinMode(red3, OUTPUT);
  pinMode(green1, OUTPUT);
  pinMode(green2, OUTPUT);
  pinMode(green3, OUTPUT);
  pinMode(yellow1, OUTPUT);
  pinMode(yellow2, OUTPUT);
  pinMode(yellow3, OUTPUT);
}

void loop() {
  sensorValue = analogRead(sensorPin);
  sensorValue = constrain(sensorValue, 0, 1023);
  Value_new = map(sensorValue, 0, 1023, 0, 4);

  digitalWrite(green1, LOW);
  digitalWrite(green2, LOW);
  digitalWrite(green3, LOW);
  digitalWrite(red1, LOW);
  digitalWrite(red2, LOW);
  digitalWrite(red3, LOW);
  digitalWrite(yellow1, LOW);
  digitalWrite(yellow2, LOW);
  digitalWrite(yellow3, LOW);

  if (Value_new == 0) {
    rezim1();
  } else if (Value_new == 1) {
    rezim2();
  } else if (Value_new == 2) {
    rezim3();
  } else if (Value_new == 3) {
    rezim4();
  } else if (Value_new == 4) {
    rezim5();
  }
}

Я ничего не упрощал в коде по этому он достаточно объемный.

А вот видео с демонстрацией работы гирлянды.

Мы научились работать с потенциометром, подключать его и собирать более сложные цепи. Собрать цепь физически сложнее чем придумать её работу на симуляторе.