Главная страница

Отчет по практической работе № 2 «Светодиодные индикаторы» по дисциплине «Информационные технологии». Светодиодные индикаторы. Отчет по практической работе 2 Светодиодные индикаторы


Скачать 2.49 Mb.
НазваниеОтчет по практической работе 2 Светодиодные индикаторы
АнкорОтчет по практической работе № 2 «Светодиодные индикаторы» по дисциплине «Информационные технологии
Дата09.01.2023
Размер2.49 Mb.
Формат файлаdocx
Имя файлаСветодиодные индикаторы.docx
ТипОтчет
#878837

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


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

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

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


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

}

void loop()

{ if (!digitalRead(BUTTON_PIN))

{

if (isPrime(number))

{

m = number%10; //остаток от деления

n =number/10; //целочисленое деление



digitalWrite(LATCH_PIN, LOW);

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

digitalWrite(LATCH_PIN, HIGH);

digitalWrite(LATCH_PIN_1, LOW);

shiftOut(DATA_PIN_1, CLOCK_PIN_1, LSBFIRST, segments[m]);

digitalWrite(LATCH_PIN_1, HIGH);

delay(500);

}

number = number +1;

}

}

//проверяем, простое ли это число

bool isPrime(int n)

{

// если n > 1

if (n > 1)

{

// в цикле перебираем числа от 2 до n - 1

for (int i = 2; i < n; i++)

if (n % i == 0) // если n делится без остатка на i - возвращаем false (число не простое)

return false;



// если программа дошла до данного оператора, то возвращаем true (число простое) - проверка пройдена

return true;

}

else // иначе возвращаем false (число не простое)

return false;

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

https://www.tinkercad.com/things/afuEQnUkhnn-2-zadanie-4-schyotchik-nazhatij/editel?sharecode=0sQa8v7qk1T7rQiUD6PCoNRF8WAE9WpU40TIyRiIqKM
Вывод

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

.

Задание 5

«Тестер батареек»



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





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


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

#define POT_PIN A1

#include

#define DIODE_DROP 0.7 // RS E DB4 DB5 DB6 DB7

LiquidCrystal lcd(13, 12, 11, 10, 9, 8);

void setup()

{

lcd.begin(0, 5);

//lcd.print("Battery voltage:");

pinMode(POT_PIN, INPUT); //пин с потенциометром – вход

}

void loop()

{

float voltage = analogRead(A0) / 1024.0 * 10.0;

int rotation; //используем переменные, для хранения в них целых чисел

rotation = analogRead(POT_PIN); //считываем в rotation напряжение с потенциометра

if (rotation < 200)

{

lcd.setCursor(0, 0);

lcd.print("Battery");

}

else if (rotation < 400)

{

lcd.setCursor(0, 1);

lcd.print("voltage: ");

}

else if (rotation < 600)

{

delay(50);

lcd.clear(); // очищаем экран

lcd.setCursor(0, 0);

lcd.print(voltage);

}

else if (rotation < 800)

{

lcd.setCursor(0, 1);

lcd.print("Volts");

}

else if (rotation < 1000)

{

delay(50);

lcd.clear(); // очищаем экран

lcd.setCursor(0, 0);

lcd.print("good!");

}

else

lcd.clear();

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

https://www.tinkercad.com/things/0QFKZpD2YgZ-2-zadanie-5-tester-batareek/editel?sharecode=9Knm3qDjhX60g2L69UWgQGzfoG1Adw121WHYBE4lsos
Вывод

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



Задание 6

«Тестер батареек»



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





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


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

#include

#define DIODE_DROP 0.7 // RS E DB4 DB5 DB6 DB7

LiquidCrystal lcd(13, 12, 11, 10, 9, 8);

void setup()

{

lcd.begin(16, 1);

}

void loop()

{

lcd.print(" Task 6. Battery tester");

lcd.scrollDisplayRight();

delay(500);

}

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

https://www.tinkercad.com/things/kwPF0dpu7QV-2-zadanie-6-tester-batareek/editel?sharecode=eXN8sToebVMBUhaiVmKRyQDd_27xCiIXq8yHkVsmjVg
Вывод

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

Задание 7

«Перетягивание каната»



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




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


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

#include //библиотека для работы с ЖК

#define BUZZER_PIN 0

#define START_POSITION 0

#define BAR_COUNT 16

#define MAX_SCORE 16
// RS E DB4 DB5 DB6 DB7

LiquidCrystal lcd(13, 12, 11, 10, 9, 8);

//глобальная "нестабильная" переменная

volatile int score = 0;
void setup()

{

lcd.begin(16, 2);

pinMode(BUZZER_PIN, OUTPUT);

attachInterrupt(INT1, pushP1, FALLING);

attachInterrupt(INT0, pushP2, FALLING);

}
void pushP1() //функция (прерывыние) на первую кнопку

{

--score;

}

void pushP2() //функция (прерывыние) на вторую кнопку

{

++score;

}

void loop()

{

tone(BUZZER_PIN, 400, 20);

while (abs(score) < MAX_SCORE)

{

int bound = map(score, -MAX_SCORE, MAX_SCORE, 0, BAR_COUNT);

int left = min(bound, BAR_COUNT / 2 - 1);

int right = max(bound, BAR_COUNT / 2);

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

{

lcd.setCursor(i + START_POSITION, 0);

if (i >= left && i <= right)

lcd.print(".");

else

lcd.print(" ");

}

}

tone(BUZZER_PIN, 2000, 500);

while (true) {}

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

https://www.tinkercad.com/things/699yePKFj5k-2-zadanie-7-peretyagivanie-kanata/editel?sharecode=fYMYi-WuoDtDfp4i7Wrfxr4_gFKmvkfWFYjmiAjmp3k

Вывод

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



Задание 8

«Управление скоростью мотора»



Задание: Управляйте скоростью мотора при помощи полевого p-канального МОП транзистора.
Цель работы: Ознакомление с элементами Arduino IDE, изучение основ работы со средой для программирования, а также сборка схем с моторами.
Схема сборки на макетной плате:




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


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

#define MOTOR_PIN 9

int pot = A0;// пин потенциометра

void setup()

{

pinMode(MOTOR_PIN, OUTPUT);

pinMode(pot, INPUT);

Serial.begin(9600);

}

void loop()

{

int val = analogRead(pot) / 4;

Serial.println(val);

analogWrite(MOTOR_PIN, val);

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

https://www.tinkercad.com/things/kDOvfvSxrHB-2-zadanie-8-upravlenie-skorostyu-motora/editel?sharecode=8gWHOpTTVFwffaebDKeuYEIyxGg8g5CRLLdx5oWRhY0
Вывод

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

Задание 9

«Секундомер на таймере 555»



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




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


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

Эта сборка без программирования.

 

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

https://www.tinkercad.com/things/cKtXeYCB1cm-lab2-task9/editel?sharecode=RUldcDsSJvZhLq8h4URaKFujyNU0hdJKgh-BnOb0DsQ
Вывод

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

Задание 10

«Секундомер на таймере 555»



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





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





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

Эта сборка без программирования.
Ссылка на рабочий проект:

https://www.tinkercad.com/things/aPlSpeoo4GI-copy-of-sekundomer-na-tajmere-555/editel?sharecode=sBEJyZspV5i763OPVGhzMqYgvUk9TveMC7Z6UI-Ao3g
Вывод

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


написать администратору сайта