МЕТОДИЧЕСКИЕ УКАЗАНИЯ
к выполнению лабораторных работ
по дисциплине «Микропроцессорные средства и системы»
для студентов специальности
40 02 01 – «Вычислительные машины, системы и сети» дневной формы
обучения
ПОЛОЦК
2017
СОДЕРЖАНИЕ
1 ВВЕДЕНИЕ ................................................................................................... 3
1.1 Питание устройства .................................................................................. 4
1.2 Параметры ввода / вывода ....................................................................... 4
2 ЛАБОРАТОРНЫЕ РАБОТЫ .......................................................................... 6
2.1 Лабораторная работа №1 (2 часа) ........................................................... 6
2.2 Лабораторная работа №2 (2 часа) ........................................................... 9
2.3 Лабораторная работа №3 (2 часа) ......................................................... 11
2.4 Лабораторная работа №4 (2 часа) ......................................................... 15
2.5 Лабораторная работа №5 (2 часа) ......................................................... 19
2.6 Лабораторная работа №6 (2 часа) ......................................................... 22
2.7 Лабораторная работа №7 (4 часа) ......................................................... 27
2.8 Лабораторная работа №8 (2 часа) ......................................................... 31
2.9 Лабораторная работа №9 (2 часа) ......................................................... 35
2.10 Лабораторная работа №10 (4 часа) ..................................................... 39
2.11 Лабораторная работа №11 (4 часа) ..................................................... 42
2.12 Лабораторная работа №12 (4 часа) ..................................................... 46
3 ЗАКЛЮЧЕНИЕ .............................................................................................. 50
4 СПИСОК РЕКОМЕНДУЕМОЙ ЛИТЕРАТУРЫ ........................................ 51
1 ВВЕДЕНИЕ
Знакомство с Arduino
«Философия Arduino состоит в том, что если вы
захотите научиться электронике, вы сможете изучать
ее уже с первого дня, вместо того, чтобы сначала
учиться алгебре»
Дэвид Куартилльз,
член команды разработчиков
/*
Опишите здесь, что выполняет ваша программа
*/
int ledPin = 13; // ваши комментарии
void setup () { //
pinMode (ledPin, OUTPUT); //
}
void loop () { //
digitalWrite (ledPin, HIGH); //
delay (5000); //
digitalWrite (ledPin, LOW); //
delay (1000); //
}
Обратить внимание!!!
#define LED_PIN 9
void setup()
{
pinMode(LED_PIN, OUTPUT);
}
void loop()
{
analogWrite(LED_PIN, 85);
delay(250);
analogWrite(LED_PIN, 170);
delay(250);
analogWrite(LED_PIN, 255);
delay(250);
Пояснения к коду:
PRINT // верно
PRINT_3D // верно
MY_PRINT_3D // верно
_PRINT_3D // верно
3D_PRINT // ошибка
ПЕЧАТЬ_3Д // ошибка
PRINT:3D // ошибка
Контрольные вопросы
13pin
MOTOR_1
контакт_светодиода
sensor value
leftServo
my-var
distance_eval2
2. Что произойдет, если создать директиву #define HIGH LOW?
3. Почему мы не сможем регулировать яркость светодиода,
подключенного к порту 7?
4. Какое усреднённое напряжение мы получим на пине 6, если
вызовем функцию analogWrite(6, 153)?
5. Какое значение параметра value нужно передать
функции analogWrite, чтобы получить усреднённое напряжение 2 В?
еще 1 светодиод
еще 1 резистор номиналом 220 Ом
еще 2 провода
I. Предварительно индивидуально изучить учебный материал на
сайте
II. Работа в парах. Действующая модель “Светильник с
управляемой яркостью”.
#define LED_PIN 9
#define POT_PIN A0
void setup()
{
pinMode(LED_PIN, OUTPUT);
pinMode(POT_PIN, INPUT);
}
void loop()
{
int rotation, brightness;
rotation = analogRead(POT_PIN);
brightness = rotation / 4;
analogWrite(LED_PIN, brightness);
}
Пояснения к коду:
С помощью директивы #define компилятор заменит
идентификатор POT_PIN на A0 – номер аналогового входа. Можно
встретить код, где обращение к аналоговому порту будет по номеру без
индекса A. Такой код будет работать, но во избежание путаницы с
цифровыми портами использовать индекс.
Переменным принято давать названия, начинающиеся со
строчной буквы.
Чтобы использовать переменную, необходимо ее объявить, что
и делается инструкцией:
Контрольные вопросы
Обратить внимание!!!
#define BUZZER_PIN 3
#define LDR_PIN A0
void setup()
{
pinMode(BUZZER_PIN, OUTPUT);
}
void loop()
{
int val, frequency;
val = analogRead(LDR_PIN);
frequency = map(val, 0, 1023, 3500, 4500);
tone(BUZZER_PIN, frequency, 20);
}
Пояснения к коду:
еще 1 светодиод
еще 1 резистор номиналом 220 Ом
еще 2 провода
Обратить внимание!!!
#define LED_PIN 13
#define LDR_PIN A0
#define POT_PIN A1
void setup()
{
pinMode(LED_PIN, OUTPUT);
}
void loop()
{
int lightness = analogRead(LDR_PIN);
Пояснения к коду:
Контрольные вопросы
Обратить внимание!!!
void setup()
{
for (int pin = FIRST_LED_PIN; pin <= LAST_LED_PIN; ++pin)
pinMode(pin, OUTPUT);
}
void loop()
{
unsigned int ms = millis();
digitalWrite(pin, HIGH);
delay(10);
digitalWrite(pin, LOW);
}
Пояснения к коду:
Обратить внимание!!!
#define MOTOR_PIN 9
#define FIRST_BUTTON_PIN 5
#define BUTTON_COUNT 3
#define SPEED_STEP (255 / (BUTTON_COUNT - 1))
void setup()
{
pinMode(MOTOR_PIN, OUTPUT);
void loop()
{
for (int i = 0; i < BUTTON_COUNT; ++i) {
if (digitalRead(i + FIRST_BUTTON_PIN))
continue;
analogWrite(MOTOR_PIN, speed);
}
}
Пояснения к коду:
Контрольные вопросы
ХОД РАБОТЫ
/********************************************************************
***************
Все цвета радуги на RGB-светодиоде
Основные цвета: красный, зеленый, синий
Основные «смешанные» цвета:
красный + зеленый = жёлтый зеленый + синий = сине-зелёный
синий + красный = фиолетовый красный + синий + зеленый = белый
Скетч выполняет переходы:
красный => жёлтый => зеленый => сине-зеленый => синий => фиолетовый
=> красный
*********************************************************************
***************/
int RED = 9;
int GREEN = 10;
int BLUE = 11;
int val;
void setup()
{
pinMode( RED, OUTPUT);
pinMode( GREEN, OUTPUT);
pinMode( BLUE, OUTPUT);
analogWrite(RED, 0);
analogWrite(RED, 0);
analogWrite(GREEN, ??? );
analogWrite( ??? , 255);
}
void LightDown (int pin)
{
for (val = 0; val <=255; val++)
{
analogWrite(pin, val); delay (20);
}
}
void LightUp (int pin)
{
… ??? …
}
void loop()
{
LightUp (GREEN); delay(100);
LightDown (RED); delay(100);
… ??? … // Плавный переход к сине-зеленому цвету
… ??? … // Плавный переход к синему цвету
… ??? … // Плавный переход к фиолетовому цвету
… ??? … // Плавный переход к красному цвету
}
Контрольные вопросы
Обратить внимание!!!
#include <Servo.h>
Servo myServo;
void setup()
{
myServo.attach(9);
}
void loop()
{
int val = analogRead(A0);
myServo.write(angle);
}
Пояснения к коду:
Контрольные вопросы
Требуемые компоненты:
Обратить внимание!!!
#include <LiquidCrystal.h>
void setup()
{
lcd.begin(16, 2);
lcd.print("Battery voltage:");
}
void loop()
{
float voltage = analogRead(A0) / 1024.0 * 10.0;
lcd.setCursor(0, 1);
lcd.print(voltage, 2);
lcd.print(" Volts");
}
Пояснения к коду:
Контрольные вопросы
#include <math.h>
int minute = 1;
void setup()
{
Serial.begin(9600);
Serial.println("Minute\tTemperature");
}
void loop()
{
Serial.print(minute);
Serial.print("\t");
Serial.println(temperature);
delay(60000);
++minute;
Пояснения к коду:
Serial.print(3.14159,3);
3.142
Монитор порта, входящий в Arduino IDE, открывается через
меню Сервис или сочетанием клавиш Ctrl+Shift+M. Нужно следить за тем,
чтобы в мониторе и в скетче была указана одинаковая скорость обмена
данными, baudrate. Скорости 9600 бит в секунду обычно достаточно.
Другие стандартные значения можете посмотреть в выпадающем меню
справа внизу окна монитора порта.
Не удастся использовать цифровые порты 0 и 1 одновременно
с передачей данных по последовательному порту, потому что по ним также
идет передача данных, как и через USB-порт платы.
При запуске монитора порта скетч в микроконтроллере
перезагружается и начинает работать с начала. Это удобно, если нельзя
упустить какие-то данные, которые начинаю передаваться сразу же. Но в
других ситуациях это может мешать!
Если необходимо читать какие-то данные в реальном времени,
не забывать делать delay() хотя бы на 100 миллисекунд, иначе бегущие
числа в мониторе будет невозможно разобрать. Можно отправлять данные
и без задержки, а затем, к примеру, скопировать их для обработки в
стороннем приложении.
Последовательность \t выводится как символ табуляции (8
пробелов с выравниванием). Также можно использовать, например,
последовательность \n для перевода строки. Если нужно использовать
обратный слеш, его нужно экранировать вторым таким же: \\.
Контрольные вопросы