Файл: Методические указания к выполнению лабораторных работ по дисциплине Основы электротехники в робототехнике.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 08.11.2023

Просмотров: 180

Скачиваний: 5

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

  lcd.setCursor(0, 0); // Устанавливаем курсор в начало 1 строки

  lcd.print("Hello, world!"); // Выводим текст

  lcd.setCursor(0, 1); // Устанавливаем курсор в начало 2 строки

  lcd.print("zelectro.cc"); // Выводим текст

}
void loop(){

}

Создание собственных символов

С выводом текста разобрались, буквы английского алфавита зашиты в память контроллера внутри дисплея и с ними проблем нет. А вот что делать если нужного символа в памяти контроллера нет?

Не беда, требуемый символ можно сделать вручную (всего до 7ми символов). Ячейка, в рассматриваемых нами дисплеях, имеет разрешение 5х8 точек. Все, к чему сводится задача создания символа, это написать битовую маску и расставить в ней единички в местах где должны гореть точки и нолики где нет. В ниже приведенном примере нарисуем смайлик.

 

 Пример программного кода
//Тестировалось на Arduino IDE 1.0.5
#include <Wire.h>

#include <LiquidCrystal.h> // Лобавляем необходимую библиотеку

// Битовая маска символа улыбки

byte smile[8] =

{

  B00010,

  B00001,

  B11001,

  B00001,

  B11001,

  B00001,

  B00010,

};

LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7)
void setup(){

  lcd.begin(16, 2); // Задаем размерность экрана
  lcd.createChar(1, smile); // Создаем символ под номером 1
  lcd.setCursor(0, 0); // Устанавливаем курсор в начало 1 строки

  lcd.print("\1"); // Выводим смайлик (символ под номером 1) - "\1"

      }
void loop(){

}


3.4 Подключение LCD1602 по I2C к Ардуино


К сожалению, стандартная схема подключения, рассмотренная в предыдущих заданиях, не всегда удобна, так как занимает как минимум 6 цифровых выходов на ардуине.



В этом задании мы рассмотрим способ как это можно обойти и использовать только два аналоговых выхода.

Нам понадобится дополнительный модуль 1602 LCD конвертор в IIC/I2C. Он припаивается к нашему дисплею как видно на фото ниже.


И подключается к ардуине следующим образом


Arduino Mega

Arduino Uno

LCD i2c

Цвет проводов на фото

GND

GND

GND

Черный

5V

5V

VCC

Красный

20 (SDA)

A4

SDA

Коричневый

21(SCL)

A5

SCL

Белый
Этот способ подключения работает только со специально библиотекой, скачать библиотеку можно по ссылке (LiquidCrystal_I2C1602V1 Библиотека). Установите данную библиотеку.

Код программы:
#include

#include

LiquidCrystal_I2C lcd(0x3F,16,2); // Устанавливаем дисплей

void setup()

{

lcd.init();

lcd.backlight();// Включаем подсветку дисплея

lcd.print("iarduino.ru");

lcd.setCursor(8, 1);

lcd.print("LCD 1602");

}

void loop()

{

// Устанавливаем курсор на вторую строку и нулевой символ.

lcd.setCursor(0, 1);

// Выводим на экран количество секунд с момента запуска ардуины

lcd.print(millis()/1000);

}


4 Лабораторная работа 3


Тема: Подключение клавиатуры

Цель: Научиться подключать клавиатуру

Задание

1 Подключить клавиатуру к плате.

2 Запрограммировать работу с клавиатурой (п.4.1-4.2).

3 Оформить отчет.

4.1 Подключение матричной клавиатуры к Arduino


Иногда мы сталкиваемся с проблемой нехватки портов на Arduino. Чаще всего это относится к моделям с небольшим количеством выводов. Для этого была придумана матричная клавиатура. Такая система работает в компьютерных клавиатурах, калькуляторах, телефонах и других устройствах, в которых используется большое количество кнопок.

Для Arduino чаще всего используются такие клавиатуры:              

Самыми распространенными являются 16 кнопочные клавиатуры 4x4. Принцип их работы достаточно прост, Arduino поочередно подает логическую единицу на каждый из 4 столбцов, в этот момент 4 входа Arduino считывают значения, и только на один вход подается высокий уровень. Это довольно просто, если знать возможности управления портами вывода в Arduino, а так же портами входа/ввода.



Для программирования можно использовать специализированную библиотеку Keypad, но в этом задании не будем её использовать для большего понимания работы с матричной клавиатуры.

Подключаем клавиатуру в любые порты ввода/вывода.

На красные порты будем подавать сигналы, а с синих будем их принимать. Зачастую на синие провода подводят подтягивающие резисторы, но мы их подключим внутри микроконтроллера Arduino.



В программе будем вычислять нажатую кнопку и записывать её в Serial порт.
В данном методе есть один значительный недостаток: контроллер уже не может выполнять других задач стандартными методами. Эта проблем решается подключением матричной клавиатуры с использованием прерываний
.

int PinOut[4] {5, 4, 3, 2}; // пины выходы

 

int PinIn[4] {9, 8, 7, 6}; // пины входа

int val = 0;

const char value[4][4]

 { {'1', '4', '7', '*'},

  {'2', '5', '8', '0' },

  {'3', '6', '9', '#'},

  {'A', 'B', 'C', 'D'}

};

// двойной массив, обозначающий кнопку

 

int b = 0; // переменная, куда кладется число из массива(номер кнопки)

 

void setup()

{

  pinMode (2, OUTPUT); // инициализируем порты на выход (подают нули на столбцы)

  pinMode (3, OUTPUT);

  pinMode (4, OUTPUT);

  pinMode (5, OUTPUT);

 

  pinMode (6, INPUT); // инициализируем порты на вход с подтяжкой к плюсу (принимают нули на строках)

  digitalWrite(6, HIGH);

  pinMode (7, INPUT);

  digitalWrite(7, HIGH);

  pinMode (8, INPUT);

  digitalWrite(8, HIGH);

  pinMode (9, INPUT);

  digitalWrite(9, HIGH);

 

  Serial.begin(9600); // открываем Serial порт

}

 

void matrix () // создаем функцию для чтения кнопок

{

  for (int i = 1; i <= 4; i++) // цикл, передающий 0 по всем столбцам

  {

    digitalWrite(PinOut[i - 1], LOW); // если i меньше 4 , то отправляем 0 на ножку

    for (int j = 1; j <= 4; j++) // цикл, принимающих 0 по строкам

    {

      if (digitalRead(PinIn[j - 1]) == LOW) // если один из указанных портов входа равен 0, то..

      {

        Serial.println( value[i - 1][j - 1]); // то b равно значению из двойного массива

        delay(175);

      }

    }

    digitalWrite(PinOut[i - 1], HIGH); // подаём обратно высокий уровень

  }



void loop()

{

  matrix(); // используем функцию опроса матричной клавиатуры

 

}

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

#include  

const byte ROWS = 4;

const byte COLS = 3;

char keys[ROWS][COLS] = {

  {'1','2','3'},

  {'4','5','6'},

  {'7','8','9'},

  {'#','0','*'}

};

byte rowPins[ROWS] = {5, 4, 3, 2};

byte colPins[COLS] = {8, 7, 6};

 

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

 

void setup(){

  Serial.begin(9600);

}

 

void loop(){

  char key = keypad.getKey();

 

  if (key != NO_KEY){

    Serial.println(key);

  }

}

4.2 Подключение клавиатуры 4*4 и пьезоизлучателя к Arduino


Теперь научимся подключать устройство ввода к Ардуине. В этом примере разберемся, как подключить мембранную клавиатуру 4*4


Данный пример будет выполнять две задачи:

  1. Первая задача: определяет, какая из клавиш была нажата на клавиатуре и передать информацию по сериал порту на компьютер, где в "мониторе последовательного порта ".

  2. Вторая задача: при каждом нажатии клавиш издавать звуковой сигнал. У каждой клавиши звуковой сигнал будет разный.

В данном уроке нам понадобится:

  • Arduino

  • Клавиатура 4x4 кнопки

  • Зуммер пьезоэлектрический

  • Набор проводов ПАПА-МАМА

  • Провода Папа-Папа или Набор проводов для макетирования 65 шт.

Для реализации проекта нам необходимо установить библиотеки:
Библитетка keypad для клавиатуры 4x4

Сборка:

1) Клавиатуру удобнее всего подключить к Ардуине проводками Папа-Папа.

Контакты на клавиатуре отсчитываются слева на право.




Клавиатура 4*4

Arduino (uno)

Контакт 1

pin 11

Контакт 2

pin 10

Контакт 3

pin 9

Контакт 4

pin 8

Контакт 5

pin 7

Контакт 6

pin 6

Контакт 7

pin 5

Контакт 8

pin 4

Контакты к которым подключаем клавиатуру, могут быть перенастроены на любые другие цифровые контакты. Настраиваются здесь:

byte rowPins[ROWS] = {11,10, 9, 8};

byte colPins[COLS] = {7, 6, 5, 4};