Файл: Отчет по практической работе 2 Светодиодные индикаторы.docx

ВУЗ: Не указан

Категория: Отчеты по практике

Дисциплина: Не указана

Добавлен: 17.10.2024

Просмотров: 11

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
ВЯТСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ


Институт математики и информационных систем

Факультет автоматики и вычислительной техники

Кафедра систем автоматизации управления


Отчет по практической работе 2

«Светодиодные индикаторы»

по дисциплине

«Информационные технологии»

Вариант 42





Выполнил:

студент гр. ИТб-2302-02-20













Проверила:

ст. преподаватель каф. САУ







Шмакова Н. А.

Киров  2022



Задание 1

«Кнопочные ковбои»
Задание: Добавить “полосу бонусов”. Для каждого игрока в начальном состоянии есть 3 светодиода, которые не горят. Нажатием на кнопку игрок получает “бонус”, если нажал быстрее соперника. Игра до 3х очков.
Цель работы: Ознакомление с элементами Arduino IDE, изучение основ работы со средой для программирования, а также сборка схем с пьезодинамиком.
Схема сборки на макетной плате:





Принципиальная схема:



Листинг программы:

//бонусы

#define Led1 13

#define Led2 10

#define Led3 8


#define Led4 6

#define Led5 5

#define Led6 2

int counter1=0; //количество бонусов для одного игрока

int counter2=0; //количество бонусов для второго игрока

#define BUZZER_PIN 12 // пин с пищалкой

#define PLAYER_COUNT 2 // количество игроков ковбоев

int buttonPins[PLAYER_COUNT] = {3, 4};

int ledPins[PLAYER_COUNT] = {9, 11};

void setup() {

//бонусы

pinMode(Led1, OUTPUT);

pinMode(Led2, OUTPUT);

pinMode(Led3, OUTPUT);

pinMode(Led4, OUTPUT);

pinMode(Led5, OUTPUT);

pinMode(Led6, OUTPUT);

pinMode(BUZZER_PIN, OUTPUT);

for (int player = 0; player< PLAYER_COUNT; ++player) {

pinMode(ledPins[player], OUTPUT); pinMode(buttonPins[player], INPUT_PULLUP);

}

}

void loop(){

delay(random(2000, 7000));

tone(BUZZER_PIN, 3000, 250); // 3 килогерца, 250 миллисекунд

for (int player = 0; ;player = (player+1) % PLAYER_COUNT) {

// если игрок номер «player» нажал кнопку...

if (!digitalRead(buttonPins[player])) {

// ...включаем его светодиод и сигнал победы

digitalWrite(ledPins[player], HIGH);

tone(BUZZER_PIN, 4000, 1000);

//бонусы для первого игрока

if (player == 0)

{

counter1 = counter1+1;

if (counter1 == 1)

digitalWrite(Led4,HIGH);

else if (counter1 == 2)

digitalWrite(Led5,HIGH);

else if (counter1 == 3)

digitalWrite(Led6,HIGH);

}

//бонусы для второго игрока

if (player == 1)

{

counter2 = counter2+1;

if (counter2 == 1)

digitalWrite(Led1,HIGH);

else if (counter2 == 2)

digitalWrite(Led2,HIGH);

else if (counter2 == 3)

digitalWrite(Led3,HIGH);

}

delay(1000);

//если у одного из игроков 3 бонуса, сбрасываем бонусы

if (counter1 == 3 || counter2 == 3)

{

digitalWrite(Led1,LOW);

digitalWrite(Led2,LOW);

digitalWrite(Led3,LOW);

digitalWrite(Led4,LOW);

digitalWrite(Led5,LOW);

digitalWrite(Led6,LOW);

counter1 = 0;

counter2 = 0;

}

digitalWrite(ledPins[player], LOW);

break; // Есть победитель! Выходим (англ. break) из цикла

}



}

}
Ссылка на рабочий проект:

https://www.tinkercad.com/things/5NVoO3hPswI-2-zadanie-1-knopochnye-kovboi/editel?sharecode=tE2HXkJNb2Qvd0GCy_GqtdlhLmVe79Q7JBnckAqpOfY
Вывод

В ходе практической работы ознакомилась с элементами Arduino IDE, изучила основы работы со средой для программирования, собрала схему с пьезодинамиком, написала к ней код.

Задание 2

«Мерзкое пианино»



Задание: Подключите кнопки по схеме со стягивающим резистором и измените программу так, чтобы она продолжала работать. Опрос кнопок сделать через switch/case. В каждом case не более одной строки. Реализация должна быть без использования цикла в функции loop().
Цель работы: Ознакомление с элементами Arduino IDE, изучение основ работы со средой для программирования, а также сборка схем с пьезодинамиком.
Схема сборки на макетной плате:





Принципиальная схема:


Листинг программы:

#define BUZZER_PIN 13 // пин с пищалкой (англ. «buzzer»)

#define FIRST_KEY_PIN 7 // первый пин с клавишей (англ. «key»)

#define KEY_COUNT 3 // общее количество клавиш

int frequency = 0; // частота звука

int counter = 0; // Счетчик чтения кнопок
void setup()

{

pinMode(BUZZER_PIN, OUTPUT);

for (int i = 0; i < KEY_COUNT; i++)

pinMode(FIRST_KEY_PIN + i, INPUT);
}

void loop()

{

int keyPin = FIRST_KEY_PIN + counter;

if (digitalRead(keyPin))

{

switch (keyPin) {

case 7:

frequency = 3500 + keyPin * 500;

break;

case 8:

frequency = 3500 + keyPin * 500;

break;

case 9:

frequency = 3500 + keyPin * 500;

break;

}

tone(BUZZER_PIN, frequency, 20);

}

counter++;

if (counter == KEY_COUNT)

{

counter =0;

}




}
Ссылка на рабочий проект:

https://www.tinkercad.com/things/fUCiK4XxaS2-2-zadanie-2-merzkoe-pianino/editel?sharecode=8oAPiB2ptXCMWWJ8wNBr8lJ1Gch_JpWITO1VZLv_QkE
Вывод

В ходе практической работы ознакомилась с элементами Arduino IDE, изучила основы работы со средой для программирования, собрала схему с пьезодинамиком, написала к ней код.



Задание 3

«Секундомер»



Задание: Добавить в схему второй семисегментный индикатор. Сделать счетчик от 99 до 0. Без микросхем.
Цель работы: Ознакомление с элементами Arduino IDE, изучение основ работы со средой для программирования, а также сборка схем с дисплеем.
Схема сборки на макетной плате:





Принципиальная схема:


Листинг программы:

#define DATA_PIN 13 // пин данных (англ. data)

#define LATCH_PIN 12 // пин строба (англ. latch)

#define CLOCK_PIN 11 // пин такта (англ. clock)

#define FIRST_SEGMENT_PIN 2

#define SEGMENT_COUNT 7

byte numberSegments[10] = {

0b00111111,

0b00001010,

0b01011101,

0b01011011,

0b01101010,

0b01110011,

0b01110111,

0b00011010,

0b01111111,

0b01111011,};

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

byte segments[10] = { 0b01111101, 0b00100100, 0b01111010, 0b01110110, 0b00100111, 0b01010111, 0b01011111, 0b01100100, 0b01111111, 0b01110111 };

void setup()

{

for (int i = 0; i < SEGMENT_COUNT; ++i)

pinMode(i + FIRST_SEGMENT_PIN, OUTPUT);

pinMode(DATA_PIN, OUTPUT);

pinMode(CLOCK_PIN, OUTPUT);

pinMode(LATCH_PIN, OUTPUT);

}

void loop()

{

//отрисовал первое число

for (int n = 9; n >= 0; --n)

{

delay(1000);//ждем сек

int mask = numberSegments[n];

for (int i = 0; i < SEGMENT_COUNT; ++i)

{

boolean enableSegment = bitRead(mask, i);

digitalWrite(i + FIRST_SEGMENT_PIN, enableSegment);

}

if (n > 0)

{


//рисуем второе число

for (int j =9; j >= 0; j--)

{

digitalWrite(LATCH_PIN, LOW);

shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, segments[j]);

digitalWrite(LATCH_PIN, HIGH);

delay(1000);//ждем сек

}

}

}

}
Ссылка на рабочий проект:

https://www.tinkercad.com/things/fOB5Opou9o7-2-zadanie-3-sekundomer/editel?sharecode=YUeayYExAXIZexcvDWLPcZhve0BSxUi1qbAK6BLhzX8

Вывод

В ходе практической работы ознакомилась с элементами Arduino IDE, изучила основы работы со средой для программирования, собрала схему с дисплеем, написала к ней код.



Задание 4

«Счетчик нажатий»



Задание: Добавить в схему второй семисегментный индикатор. Выводить по нажатию простые числа в пределах 100. Числа получать условием или функцией, а не задавать заранее.
Цель работы: Ознакомление с элементами Arduino IDE, изучение основ работы со средой для программирования, а также сборка схем с дисплеем.
Схема сборки на макетной плате:





Принципиальная схема:



Листинг программы:

#define DATA_PIN 13 // пин данных (англ. data)

#define LATCH_PIN 12 // пин строба (англ. latch)

#define CLOCK_PIN 11 // пин такта (англ. clock)

#define DATA_PIN_1 9 // пин данных (англ. data)

#define LATCH_PIN_1 8 // пин строба (англ. latch)

#define CLOCK_PIN_1 7 // пин такта (англ. clock)

#define BUTTON_PIN 10

int clicks = 0;

int number =0; //сюда будет записываться сучайное число

//переменные для хранение 1и 2ой цифры

int n=0;

int m=0;

byte segments[10] = { 0b01111101, 0b00100100, 0b01111010, 0b01110110, 0b00100111, 0b01010111, 0b01011111, 0b01100100, 0b01111111, 0b01110111 };

void setup()

{

pinMode(DATA_PIN, OUTPUT);

pinMode(CLOCK_PIN, OUTPUT);

pinMode(LATCH_PIN, OUTPUT);

pinMode(BUTTON_PIN, INPUT_PULLUP);

pinMode(DATA_PIN_1, OUTPUT);

pinMode(LATCH_PIN_1, OUTPUT);

pinMode(CLOCK_PIN_1, OUTPUT);