Академический Документы
Профессиональный Документы
Культура Документы
Отчет
по лабораторной работе №1
Предмет: Интернет вещей
Кишинев 2021
Тема: Взаимодействие с пользователем
Цель работы:
Материалы:
— LED — светодиод;
— Keypad — клавиатура для ввода;
— LCD — дисплей для вывода информации;
— Arduino UNO — микроконтроллер;
— макетная плата — плата для подключения периферийных устройств;
Рекомендации
Рекомендуется использовать IDE с поддержкой arduino, что позволяет
работать с несколькими файлами. Функциональные возможности для каждого
периферийного оборудования (светодиод, кнопка, ЖК-дисплей, клавиатура)
должны быть выполнены в отдельных файлах для повторного использования в
следующих работах
Определение проблемы
Разработать приложение, которое будет изменять состояние светодиода при
обнаружении кнопки, чтобы обнаружить приложение на основе MCU, которое
будет получать команды от терминала через последовательный интерфейс для
установки состояния светодиода.
Введение
В ходе выполнения данной лабораторной работы будут собраны простые
электрические цепи при помощи микроконтроллера на базе Arduino UNO, а код
для самих программ будет написан с использованием библиотеки STDIO.
Вывод
В ходе выполнения данной лабораторной работы мы на практике научились
самостоятельно собирать простые электрические цепи при помощи
микроконтроллера на базе 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;
}