Вы находитесь на странице: 1из 9

МИНИСТЕРСТВО ОБРАЗОВАНИЯ

ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ МОЛДОВЫ

Департамент ПРОГРАММНАЯ ИНЖЕНЕРИЯ И АВТОМАТИКА

Отчет
по лабораторной работе №1
Предмет: Интернет вещей

Тема: Взаимодействие с пользователем

Выполнил: Arcadie Leah

Проверил: Mihai Brînză

Кишинев 2021
Тема: Взаимодействие с пользователем

Цель работы:

 изучение основных аспектов программирования микроконтроллеров;


 настройка ввода и вывода информации;
 работа с периферийными устройствами.

Материалы:
— LED — светодиод;
— Keypad — клавиатура для ввода;
— LCD — дисплей для вывода информации;
— Arduino UNO — микроконтроллер;
— макетная плата — плата для подключения периферийных устройств;

Рекомендации
Рекомендуется использовать IDE с поддержкой arduino, что позволяет
работать с несколькими файлами. Функциональные возможности для каждого
периферийного оборудования (светодиод, кнопка, ЖК-дисплей, клавиатура)
должны быть выполнены в отдельных файлах для повторного использования в
следующих работах

Определение проблемы
Разработать приложение, которое будет изменять состояние светодиода при
обнаружении кнопки, чтобы обнаружить приложение на основе MCU, которое
будет получать команды от терминала через последовательный интерфейс для
установки состояния светодиода.

— светодиод для включения и светодиод для выключения, система должна


отвечать текстовыми сообщениями о подтверждении заказа;
— для обмена текстом через терминал используйте библиотеку STDIO
разработать приложение на основе MCU для обнаружения кода с клавиатуры 4x4,
для проверки кода и отображения сообщения на ЖК-дисплее;

— для действующего кода загорается зеленый светодиод, для недопустимого


красный;

— Используйте STDIO для сканирования клавиатуры и отображения на ЖК


дисплее.

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

Задание 1: разработать приложение на основе MCU, которое будет изменять


состояние светодиода при обнаружении кнопки. Схема для данного задания
представлена на рисунке 1.

Задание 2: разработать приложение на основе MCU, которое будет получать


команды от терминала через последовательный интерфейс для установки
состояния светодиода. Схема для данного задания представлена на рисунке 2.

Задание 3: разработать приложение на основе MCU для обнаружения кода с


клавиатуры 4x4, для проверки кода и отображения сообщения на ЖК-дисплее.
Схема для данного задания представлена на рисунке 3.
Рисунок 1 – цепь для 1 задания

Рисунок 2 – цепь для 2 задания

Рисунок 3 – цепь для 3 задания


Результаты
Периферийные устройства передают сигнал микроконтроллеру и инициируют
работу других устройств, что свидетельствует о правильности написания кода и
сборки электрической цепи.

Вывод
В ходе выполнения данной лабораторной работы мы на практике научились
самостоятельно собирать простые электрические цепи при помощи
микроконтроллера на базе Arduino UNO. Также мы ознакомились с такой средой
разработки, как Arduino IDE, в которой научились писать программы,
позволяющие вводить и выводить информацию при помощи библиотеки STDIO.

Листинг:

Задание 1
int BUTTON_PIN = 2;
int LED_PIN = 13;
void setup() {
pinMode(BUTTON_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
}
void loop() {
if (digitalRead(BUTTON_PIN) == HIGH) {
digitalWrite(LED_PIN, HIGH);
}
else {
digitalWrite(LED_PIN, LOW);
}
}
Задание 2
#include <stdio.h>
int LED_PIN = 13;
void setup() {
Serial.begin(9600);
FILE* stream = fdevopen(customPutChar, customGetChar);
stdin = stdout = stream;
printf("Enter 'led on' to turn the LED on\n");
printf("Enter 'led off' to turn the LED off\n");
pinMode(LED_PIN, OUTPUT);
}
void loop() {
while(!Serial.available());
if (Serial.available() > 0) {
String command = Serial.readString();
if (command == "led on") {
printf("Are you sure you want to turn on the LED? Press 'y'\n");
while(!Serial.available());
if (Serial.available() > 0) {
String confirmation = Serial.readString();
if (confirmation == "y") {
digitalWrite(LED_PIN, HIGH);
}
}
} else if (command == "led off") {
printf("Are you sure you want to turn off the LED? Press 'y'\n");
while(!Serial.available());
if (Serial.available() > 0) {
String confirmation = Serial.readString();
if (confirmation == "y") {
digitalWrite(LED_PIN, LOW);
}
}
} else {
printf("Unknown command! Available commands: 'led on', 'led off'\n");
}
}
}
int customPutChar(char c, FILE* f) {
Serial.write(c);
return 0;
}
int customGetChar(FILE* f) {
while(!Serial.available());
return Serial.read();
}

Задание 3
#include <stdio.h>
#include <Keypad.h>
#include <LiquidCrystal.h>
LiquidCrystal LCD(5, 4, 3, 2, A4, A5);
const byte ROWS = 4;
const byte COLS = 4;
char KEYS[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte ROW_PINS[ROWS] = {A0, A1, 11, 10};
byte COL_PINS[COLS] = {9, 8, 7, 6};
char ALLOWED_KEYS[3] = {'1', '2', '3'};
const int GREEN_LED_PIN = A3;
const int RED_LED_PIN = A2;
Keypad KEYPAD = Keypad(makeKeymap(KEYS), ROW_PINS, COL_PINS, ROWS,
COLS);
int lcdCol = 0;
int lcdRow = 0;
void setup() {
Serial.begin(9600);
LCD.begin(16, 2);
FILE* stream = fdevopen(lcdPutChar, keypadGetChar);
pinMode(GREEN_LED_PIN, OUTPUT);
pinMode(RED_LED_PIN, OUTPUT);
}
void loop() {
char key;
scanf("%c", &key);
if (key) {
turnOnLed(key);
printf("%c", key);
}
}
bool isAllowed(char element) {
for (int i = 0; i < 5; i++) {
if (ALLOWED_KEYS[i] == element) {
return true;
}
}
return false;
}
void turnOnLed(char key) {
if (isAllowed(key)) {
digitalWrite(GREEN_LED_PIN, HIGH);
digitalWrite(RED_LED_PIN, LOW);
} else {
digitalWrite(GREEN_LED_PIN, LOW);
digitalWrite(RED_LED_PIN, HIGH);
}
}
void clear() {
if (lcdRow > 1) {
lcdRow = 0;
lcdCol = 0;
LCD.clear();
}
}
void newLine() {
lcdRow++;
clear();
lcdCol = 0;
}
int lcdPutChar(char c, FILE* f) {
if (lcdCol > 15) {
newLine();
}
LCD.setCursor(lcdCol, lcdRow);
LCD.print(c);
lcdCol++;
return 0;
}
int keypadGetChar(FILE* f) {
char key;
do {
key = KEYPAD.getKey();
} while (key == 0);
return key;
}

Вам также может понравиться