Пришло время вернуться к Ардуино, так как появились идеи и соответствующий КПЕ.
Я уже писал о подключении к Ардуино двухстрочного дисплея. Все работало хорошо, но проводов ......
Конечно, для начала здорово, но в дальнейшем, если использовать дисплей в трансивере, то тащить к нему жгут из 8-ми проводников ....
Вот я и решил освоить последовательный интерфейс I2C. Не буду углубляться в принцип его работы, но вместо 8-ми проводников нужно только 4: два - питание и два для передачи данных.
Для того, чтобы сделать обычный дисплей 1602 (две строки по 16 символов), потребуется адаптер, которых полно на Али и стоят они не дорого.
У меня такой уже был.
Вот он вблизи.
Гребенка из 16-ти пинов - для подсоединения к LCD, четыре вывода - для подсоединения к Ардуино, есть возможность отключить присутствующий на плате светодиод индикатора напряжения питания. Здорово, что есть подстроечник регулировки контрастности, но жаль, что нет регулировки яркости подсветки. Думаю, что разберусь потом.
Предварительно залудив пины гребенки, сажаем ее на спину индикатору.
Я на всякий случай пропаял гребенку с обои сторон платы индикатора, так как она двухсторонняя и я читал в сети, что если металлизация отверстий нарушена, может не быть контакта.
Для соединения индикатора и Ардуино я купил набор коннекторов, которые для этого предназначены.
Как видите, там есть папа-мама, мама-мама и папа-папа (не даром у них раскраска такая :) )
Теперь нужно скачать библиотеку для оживления девайса. Она называется LiquidCrystal_I2C_V112.Напоминаю, что скачиваете себе папку архива, затем открываете Arduino IDE, заходите в Скетч, выбираете "Подключить библиотеку", а затем "добавить .zip библиотеку". Указываете путь к месту, куда вы скачали архив, выбираете и жмете Open.
Скетч очень простой:
// Перед Include должна быть решеточка.
#include <Wire.h> //подключаем библиотеку для передачи данных по i2C
#include <LiquidCrystal_I2C.h>// подключаем библиотеку для дисплея
//Устанавливаем параметры дисплея: адрес дисплея, количество символов в строке, количество строк
LiquidCrystal_I2C lcd(0x27,16,2);
void setup()
{
lcd.init(); //Инициируем дисплей
lcd.backlight();// Включаем подсветку дисплея
lcd.print("I2C to LCD");//будет выводится текст, заключенный в кавычки (в верхней строке, начиная с нулевого знакоместа)
lcd.setCursor(8, 1); //Устанавливаем позицию курсора во второй (нижней)
//строке, в 8-е знакоместо
lcd.print("Time");//Там будет выводиться то, что в кавычках
}
void loop()
{
// Устанавливаем курсор на вторую строку и нулевой символ.
lcd.setCursor(1, 1);
// Выводим на экран количество секунд, которое функция millis()
//отсчитывает от запуска программы в миллисекундах (1 с = 1000 мс)
lcd.print(millis()/1000);
}
При подключении Ардуино к компьютеру не забудьте проверить виртуальный порт, к которому плата подключена.
У меня в данный момент подключено к СОМ4. Не забудьте поставить галочку !. Если вы подключитесь к другому USB разъему, то у вас будет другой порт. Не забывайте об этом, иначе при загрузке скетча программа будет ругаться.
Итак скетч залит и вот результат:
Если вы уберете одну строку,
то подсветки дисплея не будет.
Теперь применим полученные знания в моем частотомере.
Вот как изменился скетч при переходе на I2C.
#include <FreqCounter.h> // подключаем библиотеку частотомера
#include <Wire.h> // подключаем библиотеку для обмена данными по I2C
#include <LiquidCrystal_I2C.h // подключаем библиотеку дисплея для I2C
LiquidCrystal_I2C lcd(0x27,16,2); // Устанавливаем параметры дисплея
//Определяем переменные для хранения результата измерения и результата вычислений
long int frq1;
long int frq2;
void setup() {
lcd.begin(16, 2);// устанавливаем количество столбцов и строк на дисплея:
lcd.clear();// Очищаем LCD дисплей
}
void loop() {
FreqCounter::start(1000); // устанавливаем измеряемый интервал 1000 мс
while (FreqCounter::f_ready == 0); // если счетчик готов, начинается счет
frq1 = FreqCounter::f_freq; // считываем результат в переменную
frq2 = frq1*4*1.001343; // вычисляем истинное значение частоты
// Печатаем сообщение на LCD.
lcd.setCursor(1, 0);//устанавливаем курсор на вторую позицию в верхней строке
lcd.print("Frequency");// выводим то, что в скобках и кавычках
lcd.setCursor(2, 1); //устанавливаем курсор на третью позицию в нижней строке
lcd.print(frq2);// выводим то, что в скобках
lcd.setCursor(11, 1);//устанавливаем курсор на 12-ю позицию в нижней строке
lcd.print("Hz");// выводим то, что в скобках и кавычках
delay(500);// устраняем дрожание текста
}
Скетч стал существенно короче, а работает также.
Теперь можно идти дальше.
Всем здоровья и успехов!