Файл: Отчет по практической работе 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);