Отчет по практической работе № 2 «Светодиодные индикаторы» по дисциплине «Информационные технологии». Светодиодные индикаторы. Отчет по практической работе 2 Светодиодные индикаторы
Скачать 2.49 Mb.
|
Задание № 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, собрала схему, без кодирования. |