Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лабы / лаб9-10 / 9-10

.docx
Скачиваний:
0
Добавлен:
29.09.2025
Размер:
906.51 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра ЭПУ

отчет

по лабораторно-практической работе №9-10

по дисциплине «Светотехника»

Тема: ИССЛЕДОВАНИЕ ОБ ИСПОЛЬЗОВАНИИ МИКРОКОНТРОЛЛЕРОВ ДЛЯ УПРАВЛЕНИЯ СВЕТОДИОДАМИ

Студент гр. 2202

Михеев Д. А.

.

Николаев А. В.

Преподаватель

Киселев А. С.

Санкт-Петербург

2024 г.

Цель работы: использование микроконтроллера Arduino для управления светодиодами, семисегментными индикаторами с разными видами подключения.

Рис. 1. Схема для задания 1.

Рис. 2. Схема для задания 2-3-4.

Рис. 3. Схема для задания 5 (общий катод).

Рис. 4. Схема для задания 6 (общий анод).

Рис. 5. Схема для задания 7 (общий катод).

Рис. 6. Схема для задания 8 (общий анод).

Код для 1-6 задания::

//Объявление переменных светодиода для 1-го задания

int SD1 = 2;

int SD2 = 3;

int SD3 = 4;

//Объявление переменных светодиода для 2-3-го задания

int Green = 4;

int Yellow = 3;

int Red = 2;

int rnd_pick; //рандомный номер светодиода

int rnd_delay;//рандомная задержка светодиода

//Объявление переменных светодиода для 4-5-го задания

int RGB = 5;

int R = 4;

int G = 3;

int B = 2;

//Объявление переменных светодиода для 6-го задания

int R_PWM = 9;

int G_PWM = 10;

int B_PWM = 11;

void setup() {

  //объявление цифровых пинов, как выходов

  pinMode(SD1, OUTPUT);

  pinMode(SD2, OUTPUT);

  pinMode(SD3, OUTPUT);

  //RGB-светодиод с общим анодом

  pinMode(RGB, OUTPUT);

  digitalWrite(RGB, HIGH);

 

  //установка выводов как выхода для 7-сегментного светодиода

  inMode(A, OUTPUT);

  pinMode(B, OUTPUT);

  pinMode(C, OUTPUT);

  pinMode(D, OUTPUT);

  pinMode(E, OUTPUT);

  pinMode(F, OUTPUT);

  pinMode(G, OUTPUT);

}

//Задание 1 - мигание светодиодом

void task_1(){

  digitalWrite(SD1, HIGH);

  delay(300);

  digitalWrite(SD1, LOW);

  delay(300);

  }

//Задание 2 - мигание случайными светодиодами со случайной задержкой

void task_2(){

  rnd_delay = random(500);//выбор случайной задержки вплоть от 0 до 500 мс

  rnd_pick = random(2, 5);   //выбор случайного светодиода от 2 до 4

 

  digitalWrite(rnd_pick, HIGH);

  delay(rnd_delay);

  digitalWrite(rnd_pick, LOW);

}

//Функция для мигания светодиода к 3 заданию

void sd_blinking(int sd){

  digitalWrite(sd, LOW);

  delay(200);

  digitalWrite(sd, HIGH);

  delay(200);  

}

//Задание 3 - Светофор

void task_3(){

  //Зеленый цвет

  digitalWrite(Green, HIGH);

  delay(5000);

  //Мигание зеленого цвета

  sd_blinking(4);

  sd_blinking(4);

  sd_blinking(4);

  digitalWrite(Green, LOW);

  //Включение желтого цвета

  digitalWrite(Yellow, HIGH);

  delay(1000);

  digitalWrite(Yellow, LOW);

  //Включение красного цвета

  digitalWrite(Red, HIGH);

  delay(3000);

  //Включение желтого цвета

  digitalWrite(Yellow, HIGH);

  delay(1500);

  //Выключение красного и желтого цвета

  digitalWrite(Red, LOW);

  digitalWrite(Yellow, LOW);

}

//Задание 4 - бегущие огни

void task_4(){

  //Цикл перехода по светодиодам от 2 до 4

  for (int sd=2;sd<5;sd++){

    digitalWrite(sd, HIGH);

    delay(100);

    digitalWrite(sd, LOW);  

  }

}

//Функция для задания 5 получающая на вход вывод светодиода (sd) и задержку (del) для получения белого цвета

void RGB_sd(int sd, int del){

  digitalWrite(sd, HIGH);

  delay(del);

  digitalWrite(sd, LOW);

 

}

//Функция для задания 5 получающая на вход вывод светодиода (sd) и задержку (del) для получения белого цвета с подключением общий анод

void RGB_sd_inverse(int sd, int del){

  digitalWrite(sd, LOW);

  delay(del);

  digitalWrite(sd, HIGH);

 

}

 

void task_5(){

 

  //задержка, чтобы увидеть белый цвет

  int del = 5;

 

  //Простое переключение RGB светодиода

  RGB_sd(R, 500);

  RGB_sd(G, 500);

  RGB_sd(B, 500);

  delay(1000);

 

  //Белый цвет с общим катодом

  RGB_sd(R, del);

  RGB_sd(G, del);

  RGB_sd(B, del);

  delay(3000);

  //Белый цвет с общим анодом

  RGB_sd_inverse(R, 500);

  RGB_sd_inverse(G, 500);

  RGB_sd_inverse(B, 500);

  delay(3000);

 

}

//Функция для 6 задания плавно переключающая яроксть светодиода от 0 до максимума и обратно

void yarkost(int sd, int del){

  for (int i=0; i<255;i++){

    analogWrite(sd, i);

    delay(del);

  }

 

    for (int i=255; i>1;i--){

    analogWrite(sd, i);

    delay(del);

  }

 

}

//Задание 6 - плавное переключение яркости

void task_6(){

  //переменная для задачи плавности смены яроксти

  int del = 4;

  yarkost(R_PWM, del);

  yarkost(G_PWM, del);

  yarkost(B_PWM, del);

 

}

void loop() {

 //for (int i=0; i<4;i++){

 // task_1();

 //}

 //for (int i=0; i<20;i++){

 // task_2();

 //

 //}

 //delay(100);

 //task_3();

 //task_4();

 //task_5();

 //task_6();

}

Код для 7 и 8 задания:

//задача переменных для 7-сегментного светодиода

#define A 3

#define B 2

#define C 5

#define D 12

#define E 13

#define F 10

#define G 11

void setup() {

  //установка выводов как выхода для 7-сегментного светодиода

  pinMode(A, OUTPUT);

  pinMode(B, OUTPUT);

  pinMode(C, OUTPUT);

  pinMode(D, OUTPUT);

  pinMode(E, OUTPUT);

  pinMode(F, OUTPUT);

  pinMode(G, OUTPUT);

 

}

//вспомогательная функция для 7го задания

//здесь идет засветка нужных секторов по подаче int

//значения которое нужно вывести

void number_output(int num){

 if (num==0){

  digitalWrite(A, HIGH);

  digitalWrite(B, HIGH);

  digitalWrite(C, HIGH);

  digitalWrite(D, HIGH);

  digitalWrite(E, HIGH);

  digitalWrite(F, HIGH);

  digitalWrite(G, LOW);

  }

 if (num==1){

  digitalWrite(A, HIGH);

  digitalWrite(B, HIGH);

  digitalWrite(C, HIGH);

  digitalWrite(D, LOW);

  digitalWrite(E, LOW);

  digitalWrite(F, LOW);

  digitalWrite(G, LOW);

  }

   if (num==2){

  digitalWrite(A, HIGH);

  digitalWrite(B, HIGH);

  digitalWrite(C, LOW);

  digitalWrite(D, HIGH);

  digitalWrite(E, HIGH);

  digitalWrite(F, LOW);

  digitalWrite(G, HIGH);

  }

   if (num==3){

  digitalWrite(A, HIGH);

  digitalWrite(B, HIGH);

  digitalWrite(C, HIGH);

  digitalWrite(D, HIGH);

  digitalWrite(E, LOW);

  digitalWrite(F, LOW);

  digitalWrite(G, HIGH);

  }

   if (num==4){

  digitalWrite(A, LOW);

  digitalWrite(B, HIGH);

  digitalWrite(C, HIGH);

  digitalWrite(D, LOW);

  digitalWrite(E, LOW);

  digitalWrite(F, HIGH);

  digitalWrite(G, HIGH);

  }

   if (num==5){

  digitalWrite(A, HIGH);

  digitalWrite(B, LOW);

  digitalWrite(C, HIGH);

  digitalWrite(D, HIGH);

  digitalWrite(E, LOW);

  digitalWrite(F, HIGH);

  digitalWrite(G, HIGH);

  }

     if (num==6){

  digitalWrite(A, HIGH);

  digitalWrite(B, LOW);

  digitalWrite(C, HIGH);

  digitalWrite(D, HIGH);

  digitalWrite(E, HIGH);

  digitalWrite(F, HIGH);

  digitalWrite(G, HIGH);

  }

  if (num==7){

  digitalWrite(A, HIGH);

  digitalWrite(B, HIGH);

  digitalWrite(C, HIGH);

  digitalWrite(D, LOW);

  digitalWrite(E, LOW);

  digitalWrite(F, HIGH);

  digitalWrite(G, LOW);

  }

     if (num==8){

  digitalWrite(A, HIGH);

  digitalWrite(B, HIGH);

  digitalWrite(C, HIGH);

  digitalWrite(D, HIGH);

  digitalWrite(E, HIGH);

  digitalWrite(F, HIGH);

  digitalWrite(G, HIGH);

  }

     if (num==9){

  digitalWrite(A, HIGH);

  digitalWrite(B, HIGH);

  digitalWrite(C, HIGH);

  digitalWrite(D, HIGH);

  digitalWrite(E, LOW);

  digitalWrite(F, HIGH);

  digitalWrite(G, HIGH);

  }

 

}

//вспомогательная функция для 8го задания

//то же что прошлая функция только инвертированная

void number_output_inv(int num){

 if (num==0){

  digitalWrite(A, LOW);

  digitalWrite(B, LOW);

  digitalWrite(C, LOW);

  digitalWrite(D, LOW);

  digitalWrite(E, LOW);

  digitalWrite(F, LOW);

  digitalWrite(G, HIGH);

  }

 if (num==1){

  digitalWrite(A, LOW);

  digitalWrite(B, LOW);

  digitalWrite(C, LOW);

  digitalWrite(D, HIGH);

  digitalWrite(E, HIGH);

  digitalWrite(F, HIGH);

  digitalWrite(G, HIGH);

  }

   if (num==2){

  digitalWrite(A, LOW);

  digitalWrite(B, LOW);

  digitalWrite(C, HIGH);

  digitalWrite(D, LOW);

  digitalWrite(E, LOW);

  digitalWrite(F, HIGH);

  digitalWrite(G, LOW);

  }

   if (num==3){

  digitalWrite(A, LOW);

  digitalWrite(B, LOW);

  digitalWrite(C, LOW);

  digitalWrite(D, LOW);

  digitalWrite(E, HIGH);

  digitalWrite(F, HIGH);

  digitalWrite(G, LOW);

  }

   if (num==4){

  digitalWrite(A, HIGH);

  digitalWrite(B, LOW);

  digitalWrite(C, LOW);

  digitalWrite(D, HIGH);

  digitalWrite(E, HIGH);

  digitalWrite(F, LOW);

  digitalWrite(G, LOW);

  }

   if (num==5){

  digitalWrite(A, LOW);

  digitalWrite(B, HIGH);

  digitalWrite(C, LOW);

  digitalWrite(D, LOW);

  digitalWrite(E, HIGH);

  digitalWrite(F, LOW);

  digitalWrite(G, LOW);

  }

     if (num==6){

  digitalWrite(A, LOW);

  digitalWrite(B, HIGH);

  digitalWrite(C, LOW);

  digitalWrite(D, LOW);

  digitalWrite(E, LOW);

  digitalWrite(F, LOW);

  digitalWrite(G, LOW);

  }

  if (num==7){

  digitalWrite(A, LOW);

  digitalWrite(B, LOW);

  digitalWrite(C, LOW);

  digitalWrite(D, HIGH);

  digitalWrite(E, HIGH);

  digitalWrite(F, LOW);

  digitalWrite(G, HIGH);

  }

     if (num==8){

  digitalWrite(A, LOW);

  digitalWrite(B, LOW);

  digitalWrite(C, LOW);

  digitalWrite(D, LOW);

  digitalWrite(E, LOW);

  digitalWrite(F, LOW);

  digitalWrite(G, LOW);

  }

     if (num==9){

  digitalWrite(A, LOW);

  digitalWrite(B, LOW);

  digitalWrite(C, LOW);

  digitalWrite(D, LOW);

  digitalWrite(E, HIGH);

  digitalWrite(F, LOW);

  digitalWrite(G, LOW);

  }

 

}

void task7(){

  for (int i=0; i<10; i++){

    number_output(i);

    delay(500);

  }

}

void task8(){

  for (int i=0; i<10; i++){

    number_output_inv(i);

    delay(1000);

  }

}

void loop() {

  task7();

  task8();

}