
МИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра ЭПУ
отчет
по лабораторно-практической работе №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();
}