Site Language

Translate

Russian Albanian Arabic Armenian Azerbaijani Belarusian Bulgarian Catalan Croatian Czech Danish Dutch English Estonian Filipino Finnish French Galician Georgian German Greek Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian Persian Polish Portuguese Romanian Serbian Slovak Slovenian Spanish Swedish Turkish Ukrainian Yiddish

CashBack Реальный возврат при покупках в интернете

Основные версии плат Arduino

Due — плата на базе 32-битного ARM микропроцессора Cortex-M3 ARM SAM3U4E;

Leonardo — плата на микроконтроллере ATmega32U4;

Uno — самая популярная версия базовой платформы Arduino;

Duemilanove — плата на микроконтроллере ATmega168 или ATmega328;

Diecimila — версия базовой платформы Arduino USB;

Nano — компактная платформа, используемая как макет. Nano подключается к компьютеру при помощи кабеля USB Mini-B;

Mega ADK — версия платы Mega 2560 с поддержкой интерфейса USB-host для связи с телефонами на Android и другими устройствами с интерфейсом USB;

Mega2560 — плата на базе микроконтроллера ATmega2560 с использованием чипа ATMega8U2 для последовательного соединения по USB-порту;

Mega — версия серии Mega на базе микроконтроллера ATmega1280;

Arduino BT — платформа с модулем Bluetooth для беспроводной связи и программирования;

LilyPad — платформа, разработанная для переноски, может зашиваться в ткань;

Fio — платформа разработана для беспроводных применений. Fio содержит разъем для радио XBee, разъем для батареи LiPo и встроенную схему подзарядки;

Mini — самая маленькая платформа Arduino;

Pro — платформа, разработанная для опытных пользователей, может являться частью большего проекта;

Pro Mini — как и платформа Pro, разработана для опытных пользователей, которым требуется низкая цена, меньшие размеры и дополнительная функциональность.

 

CashBack Все честно и без обмана

Библиотека LiquidCrystal

Управлять ЖК-индикаторами позволяет библиотека LiquidCrystal, входящая в стандартный комплект поставки Arduino. Библиотека LiquidCrystal работает в 4-х или в 8-разрядном режиме (т. е. использует 4 или 8 линий данных в дополнение к линиям управления RS, ENABLE и опционально RW). В библиотеке реализованы следующие функции:

 

 LiquidCrystal();

 begin();

 clear();

 home();

 setCursor();

 write();

 print();

 cursor();

 noCursor();

 blink();

 noBlink();

 display();

 noDisplay();

 scrollDisplayLeft();

 scrollDisplayRight();

 

Рассмотрим все эти функции подробно.

 

 autoscroll();

 noAutoscroll();

 leftToRight();

 rightToLeft();

 createChar().

 

Функция LiquidCrystal()

Функция LiquidCrystal() создает переменную типа LiquidCrystal. Индикатором можно управлять, используя 4 или 8 линий данных. Для подключения по 4-м линиям пропустите контакты от D0 до D3 и оставьте эти линии неподключенными. Контакт RW может быть соединен с "землей" вместо соединения с контактом платы Arduino. Если в вашей схеме так — пропустите этот параметр функции.

Синтаксис функции LiquidCrystal():

LiquidCrystal(rs, enable, d4, d5, d6, d7) LiquidCrystal(rs, rw, enable, d4, d5, d6, d7) LiquidCrystal(rs, enable, d0, d1, d2, d3, d4, d5, d6, d7)

LiquidCrystal(rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7)

Параметры:

 rs — номер контакта платы Arduino, который соединяется с контактом RS жидкокристаллического индикатора;

 rw — номер контакта платы Arduino, который соединяется с контактом RW жидкокристаллического индикатора (опционально);

 enable — номер контакта платы Arduino, который соединяется с контактом ENABLE жидкокристаллического индикатора;

 d0, d1, d2, d3, d4, d5, d6, d7 — номера контактов платы Arduino, которые соединяются соответственно с контактами данных жидкокристаллического индикатора. D0, D1, D2 И D3 опциональны — если они не задействованы, жидкокристаллический индикатор будет управляться только через 4 линии данных (D4, D5, D6, D7).

Пример использования функции LiquidCrystal():

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2); void setup()

{lcd.print("hello, world!");} void loop() {;}

 

Функция begin()

 

Функция begin() определяет размерность (количество символов в ширину и высоту) индикатора.

 

Синтаксис функции begin(): lcd.begin(cols, rows)

Параметры:

 lcd — переменная типа LiquidCrystal;

 cols — количество символов в строке;

 rows — количество строк.

 

Функция clear()

 

Функция clear() очищает экран жидкокристаллического индикатора и располагает курсор в верхнем левом углу.

 

Синтаксис функции clear(): lcd.clear();

Параметр: lcd — переменная типа LiquidCrystal.

 

Функция home()

 

Функция home() располагает курсор в верхнем левом углу жидкокристаллического индикатора. Используется для определения начального положения при выводе последовательного текста на экран индикатора. Чтобы еще и очистить экран индикатора, используйте вместо этой функции функцию clear().

 

Синтаксис функции home(): lcd.home()

Параметр: lcd — переменная типа LiquidCrystal.

 

Функция setCursor()

 

Функция setCursor() позиционирует курсор жидкокристаллического индикатора, т. е. устанавливает положение, в котором на его экран будет выведен последующий текст.

 

Синтаксис функции setCursor(): lcd.setCursor(col, row)

Параметры:

 lcd — переменная типа LiquidCrystal;

 col — номер знакоместа в ряду (начиная с 0 для первого знакоместа);

 row — номер ряда (начиная с 0 для первого ряда).

 

Функция write()

 

Функция write() записывает символ в жидкокристаллический индикатор.

 

Синтаксис функции write():

lcd.write(data)

Параметры:

 lcd — переменная типа LiquidCrystal;

 data — символ, записываемый в индикатор.

 

Пример использования функции write():

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2); void setup()

{Serial.begin(9600);} void loop()

{

if (Serial.available()) lcd.write(Serial.read());

}

 

Функция print()

 

Функция print() печатает текст на жидкокристаллическом индикаторе.

 

Синтаксис функции print():

lcd.print(data) lcd.print(data, BASE)

Параметры:

 lcd — переменная типа LiquidCrystal;

 data — данные для печати (тип char, byte, int, long или string);

 BASE (опционально) — основание, по которому печатаются числа: BIN для двоичных (основание 2), DEC для десятичных (основание 10), OCT для восьмеричных (основание 8), HEX для шестнадцатеричных (основание 16).

 

Пример использования функции print():

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2); void setup()

{lcd.print("hello, world!");} void loop() {;}

 

Функция cursor()

 

Функция cursor() выводит на экран жидкокристаллического индикатора курсор — подчеркивание знакоместа в позиции, в которую будет записан следующий символ.

 

Синтаксис функции cursor(): lcd.cursor()

Параметр: lcd — переменная типа LiquidCrystal.

 

Функция noCursor()

 

Функция noCursor() скрывает курсор с экрана жидкокристаллического индикатора.

 

Синтаксис функции noCursor():

lcd.noCursor()

Параметр: lcd — переменная типа LiquidCrystal.

 

Функция blink()

 

Функция blink() выводит на экран жидкокристаллического индикатора мигающий курсор. Если она используется в комбинации с функцией cursor(), результат будет зависеть от конкретного индикатора.

 

Синтаксис функции blink(): lcd.blink()

Параметр: lcd — переменная типа LiquidCrystal.

 

Функция noBlink()

 

Функция noBlink() выключает мигающий курсор на экране жидкокристаллического индикатора.

 

Синтаксис функции noBlink(): lcd.noBlink()

Параметр: lcd — переменная типа LiquidCrystal.

 

Функция display()

 

Функция display() включает жидкокристаллический индикатор после того, как он был выключен функцией noDisplay(). Эта функция восстанавливает текст (и курсор), который был на дисплее.

 

Синтаксис функции display(): lcd.display()

Параметр: lcd — переменная типа LiquidCrystal.

 

Функция noDisplay()

 

Функция noDisplay() выключает жидкокристаллический индикатор без потери отображаемой на нем информации.

 

Синтаксис функции noDisplay(): lcd.noDisplay()

Параметр: lcd — переменная типа LiquidCrystal.

 

Функция scrollDisplayLeft()

 

Функция scrollDisplayLeft() прокручивает информацию на экране индикатора (текст и курсор) на одно знакоместо влево.

 

Синтаксис функции scrollDisplayLeft(): lcd.scrollDisplayLeft()

Параметр: lcd — переменная типа LiquidCrystal.

 

Функция scrollDisplayRight()

 

Функция scrollDisplayRight() прокручивает информацию на экране индикатора (текст и курсор) на одно знакоместо вправо.

 

Синтаксис функции scrollDisplayRight(): lcd.scrollDisplayRight()

Параметр: lcd — переменная типа LiquidCrystal.

 

Функция autoscroll()

 

Функция autoscroll() включает автоматическую прокрутку экрана жидкокристаллического индикатора и заставляет каждый вывод символа на экран индикатора перемещать предыдущие символы на одно знакоместо. Если текущее направление вывода символов слева направо (значение по умолчанию) — экран индикатора прокручивается влево; если текущее направление вывода символов справа налево — экран индикатора прокручивается вправо. Это производит эффект вывода каждого нового символа в одно и то же знакоместо на экране жидкокристаллического индикатора.

 

Синтаксис функции autoscroll(): lcd.autoscroll()

Параметр: lcd — переменная типа LiquidCrystal.

 

Функция noAutoscroll()

 

Функция noAutoscroll() выключает автоматическую прокрутку экрана жидкокристаллического индикатора.

 

Синтаксис функции noAutoscroll(): lcd.noAutoscroll()

Параметр: lcd — переменная типа LiquidCrystal.

 

Функция leftToRight()

 

Функция leftToRight() устанавливает направление вывода символов на экран жидкокристаллического индикатора слева направо (значение по умолчанию). Это означает, что последующие символы, выводимые на экран индикатора, пойдут слева направо, но не повлияют на выведенный ранее текст.

 

Синтаксис функции leftToRight(): lcd.leftTorRight();

Параметр: lcd — переменная типа LiquidCrystal.

 

Функция rightToLeft()

 

Функция rightToLeft() устанавливает направление вывода символов на экран жидкокристаллического индикатора справа налево (значение по умолчанию — слева направо). Это означает, что последующие символы, выводимые на экран индикатора, пойдут справа налево, но не повлияют на выведенный ранее текст.

 

Синтаксис функции rightToLeft(): lcd.rightToLeft()

Параметр: lcd — переменная типа LiquidCrystal.

 

Функция createChar()

 

Функция createChar() создает пользовательский символ (глиф) для использования на жидкокристаллическом дисплее. Поддерживаются до восьми символов 5×8 пикселов (нумерация с 0 до 7). Создание каждого пользовательского символа определяется массивом из восьми байтов — один байт для каждой строки. Пять младших значащих битов каждого байта определяют пикселы в этой строке. Чтобы вывести пользовательский символ на экран, используйте функцию write() с номером символа в качестве параметра.

 

Синтаксис функции createChar(): lcd.createChar(num, data) Параметры:

 lcd — переменная типа LiquidCrystal;

 num — номер создаваемого символа (0 to 7);

 data — данные символьных пикселов.

Пример создания символа приведен в примере

 

#include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 5, 4, 3, 2); byte smiley[8]={

B00000, B10001, B00000, B00000, B10001, B01110, B00000,

};

void setup()

{

lcd.createChar(0, smiley); lcd.begin(16, 2);

lcd.write(0);

}

void loop() {;}

 

 

С помощью интернет-ресурса http://mikeyancey.com/hamcalc/lcd_characters.php в режиме online можно нарисовать пользовательские символы и получить соответствующий им программный код .

 

Библиотека LiquidCrystalRus

 

Дисплеям WINSTAR присуща определенная проблема с поддержкой кириллицы. Дело в том, что китайцы решили, будто включить поддержку кириллицы — это значит произвольным образом раскидать по таблице знаков кириллические символы без соответствия какой-либо кодировке. В 2010 году Илья Данилов написал библиотеку LiquidCrystalRus, которая умело справляется с китайской кириллицей, делая ее поддержку прозрачной. Создадим пример, показывающий возможности библиотеки LiquidCrystalRus.

 

 
Схема подключения дисплея WH1604 к плате Arduino 

Дисплей WINSTAR, как и прочие дисплеи на контроллере HD44780, поддерживает два варианта параллельного интерфейса:

 8-битный — выводы DB0–DB7, за один такт передается 1 байт (8 бит);

 4-битный — выводы DB4–DB7, за один такт передается половина байта (4 бита).

Смысла использовать 8-битный вариант нет, потому что он требует задействовать больше контактов, а выигрыша в скорости все равно не дает — частота обновления дисплея не более 10 раз в секунду, так что мы в любом случае не сможем увидеть часто обновляемые данные. Поэтому выводы DB0–DB3 оставляем неподключенными.

 

Управление контрастностью изображения напряжением осуществляет потенциометр. В данном случае нормальное изображение наблюдалось при значениях напряжения на входе Vo в пределах 0,45–1,2 В.

Приступаем к программированию и постараемся на практическом примере показать возможности дисплея. Сначала подключаем библиотеку LiquidCrystalRus для работы с ЖКИ (LCD). Далее создаем объект LCD-дисплея, используя конструктор класса LiquidCrystalRus с 6 аргументами. Библиотека по количеству аргументов сама определит, что нужно использовать 4-битный интерфейс. Указываем, к каким пинам (контактам) Arduino подключены выводы дисплея: RS, E, DB4, DB5, DB6, DB7. Далее в функции setup() инициализируем дисплей (4 строки по 16 символов) и записываем выводимую на дисплей фразу.

 

// Подключение библиотеки

#include <LiquidCrystalRus.h>

// Создаем объект, используя конструктор класса LiquidCrystal

// 12 – RS,11 – Enable,5 – D4, 4 – D5,3 – D6,2 - D7

LiquidCrystalRus lcd(12, 11, 5, 4, 3, 2);

// начальная установка void setup()

{

// размерность индикатора lcd.begin(16, 4);

// Начальное сообщение lcd.setCursor(0, 0); lcd.print("Демо к книге"); lcd.setCursor(0, 1); lcd.print("Arduino"); lcd.setCursor(0, 2); lcd.print("Возможности"); lcd.setCursor(0, 3); lcd.print("WH1604"); lcd.cursor(); delay(10000);

}

 

Сначала посмотрим, как действуют методы display() и noDisplay(). Затем продемонстрируем вывод символов на экран дисплея. Методы leftToRight() и rightToLeft() устанавливают направление вывода текста — слева направо и справа налево соответственно. Для наглядности будем выводить строки посимвольно. При этом покажем и разные формы курсора. Первую строку выводим слева направо с обычным курсором (в виде подчеркивания), вторую — с невидимым курсором слева направо, третью — справа налево с большим мигающим курсором. Затем методом clear() очищаем экран и переводим курсор в позицию 0,0.

 

void loop()

{

// выключить дисплей без потери отображаемой на нем информации lcd.noDisplay();

delay(3000);

// включить дисплей без потери отображаемой на нем информации lcd.display();

delay(3000);

//***** Вывод слева направо ******* lcd.clear(); // очистить экран lcd.leftToRight(); // слева направо lcd.cursor(); // курсор - подчеркивание lcd.setCursor(0, 0); // позиция 0,0 String text1="Слева направо";

for(int i = 0; i < text1.length(); i++)

{

lcd.write(text1[i]); // посимвольный вывод delay(300); // задержка

}

lcd.noCursor(); // курсор - спрятан lcd.setCursor(0, 1); // позиция 0,1 for(int i = 0; i < text1.length(); i++)

{

lcd.write(text1[i]); // посимвольный вывод delay(300); // задержка

}

//***** Вывод справа налево ******* lcd.rightToLeft(); // справа налево lcd.blink(); // курсор - мигающий lcd.setCursor(15, 2); // позиция 15,2 String text2="овелан оварпС";

for(int i = 0; i < text2.length(); i++)

{

lcd.write(text2[i]); // посимвольный вывод delay(300); // задержка

}

lcd.clear();

}

 

Теперь продемонстрируем функцию autoscroll() при выводе символов на экран жидкокристаллического индикатора. Эта функция заставляет каждый вывод символа на экран перемещать предыдущие символы на одно знакоместо, что производит эффект вывода каждого нового символа в одно и то же знакоместо на экране. При этом предыдущие символы будут смещаться либо влево (направление вывода слева направо), либо вправо (направление вывода справа налево).

 

//***** autoscroll слева направо ******* lcd.leftToRight();

lcd.autoscroll();

String text3="autoscroll"; lcd.blink(); lcd.setCursor(7, 1);

for(int i = 0; i < text3.length(); i++)

{

lcd.write(text3[i]); delay(300);

}

// справо налево lcd.rightToLeft(); lcd.setCursor(7, 2);

for(int i = 0; i < text3.length(); i++)

{

lcd.write(text3[i]); delay(300);

}

lcd.noAutoscroll(); lcd.clear();

Теперь рассмотрим метод установки положения курсора — setCursor(). В примере будем каждую секунду переустанавливать курсор в случайную позицию на экране. Код данного отрезка представлен в примере

 

//***** перемещения курсора ******* lcd.leftToRight();

lcd.cursor();

lcd.blink();

for(int i=0;i<10;i++)

{

int rand1=(micros()+millis())%1000; lcd.setCursor(rand1%15,rand1%4); delay(1000);

}

 

lcd.noBlink(); for(int i=0;i<10;i++)

{

int rand1=(micros()+millis()); lcd.setCursor(rand1%15,rand1%4); delay(1000);

}

delay(1000); lcd.home();

В заключение рассмотрим пример создания пользовательских символов. Для режима 5×7 можно создать 8 пользовательских символов с номерами от 0 до 7. Для вывода на экран дисплея используется метод write(N), где N — номер созданного символа. Создадим 8 символов. Описываем наши собственные символы в виде массивов битовых масок. Каждый символ — это восемь масок по пять битов. Выводим символы на дисплей с интервалом 1 сек.

 

byte s1[8]={B11111,B11111,B11111,B11111,B11111,B11111,B11111}; byte s2[8]={B00000,B00000,B11111,B11111,B11111,B11111,B11111}; byte s3[8]={B00000,B00000,B00000,B00000,B11111,B11111,B11111}; byte s4[8]={B00011,B00011,B00011,B00011,B00011,B00011,B00011};

. . . . . .

void loop()

{

. . . . . .

for(int i=0;i<4;i++)

{

;

}

lcd.createChar(0, s1); lcd.createChar(1, s1); lcd.createChar(2, s1); lcd.createChar(3, s1); lcd.setCursor(0, 0); lcd.write(0);lcd.write("");

lcd.write(1);lcd.write("");

lcd.write(2);lcd.write("");

lcd.write(3);lcd.write(""); delay(10000);

}

 Плата расширения L293D, ИК-датчик VS1838B, TFT LCD, Модем M590E GSM GPRS, "монитор TFT LCD, датчик движения HC-SR501, ИК-пульт дистанционного управления, Радиомодуль NRF24L01, SD Card Module, Звуковой модуль, 5-axis stepper motor driver, Шаговый двигатель, Модем M590E GSM GPRS, 5-axis stepper motor driver,  Часы реального времени DS 3231/DS 1307, терморегулятор W1209 DC, Релейный модуль, датчик движения HC-SR501, Модуль Wi-Fi ESP8266-12E,  датчик движения HC-SR501, Передатчик и приемник в диапазоне RF 433 Mhz, Блок питания, L293D, Микросхема контроллера коллекторного электродвигателя, ИК-пульт дистанционного управления, Датчики контроля температуры, Радиомодуль NRF24L01, OKI 120A2, Rotary Encoder, SD Card Module, Беспроводной пульт дистанционного управления, Микросхема контроллера коллекторного электродвигателя, Модуль Bluetooth HC-06,, Модем M590E GSM GPRS, Часы реального времени DS 3231/DS 1307, Mini 360 на схеме LM2596, MP3-TF-16P, L293D, Модуль LCD монитора, Инфракрасные датчики расстояния, Часы реального времени,  USB Host Shield, HC-SR501, Cветочувствительный датчик сопротивления, блок питания Mini 360 на схеме LM2596, ЖК-дисплей TFT дисплей, Контроллер L298N, HC-SR501, Модуль MP3 Player WTV020, GSM GPRS, Сервоприводы, Модем M590E GSM GPRS, Часы реального времени DS 3231/DS 1307, Модуль Wi-Fi ESP8266-12E, Инфракрасные датчики расстояния, Card Module, Ультразвуковые дальномеры HC-SR04, Блок питания,  Карта памяти SD, Mini 360, Ethernet shield, L293D, блок питания Mini 360 на схеме LM2596, Радиомодуль, датчик температуры DS18B20, ИК-пульт дистанционного управления, USB конвертер UART, ИК-пульт,  Антена для модуля WiFi, Ethernet shield,  Модуль блока питания XL6009, Микросхема контроллера коллекторного электродвигателя, Модуль качества воздуха MQ-135, Микросхема контроллера коллекторного электродвигателя, ИК-пульт дистанционного управления, SD Card Module, Радиомодуль NRF24L01, двигатель OKI,  5-axis stepper motor driver, L293D, TB6560, Драйвер шагового двигателя TB6600, Шаговый двигатель,  Модуль камеры, Блок питания, L293D, блок питания Mini 360 на схеме LM2596, 5axis mach3 interface, Карта памяти SD, Ethernet shield, Контроллер L298N, датчик движения HC-SR501, Модуль Wi-Fi ESP8266-12E, Модуль LCD монитора LCD1602, Шаговый двигатель OKI 120A2, Шаговый двигатель, Шаговый двигатель.