Cветодиоды и digitalWrite

Подключение

Расширитель имеет 22 контакта, 20 из которых расположенны по контуру платы и два чуть ближе к центру. Посмотрим, за что они отвечают:

  • SDA, SCL — модуль подключается к микроконтроллеру по I2C шине, эти контакты как раз для этого;
  • VCC, GND — ещё два контакта отвечают за питание;
  • G0 до G15 — это те самые GPIO, в количестве 16 штук;
  • IA и IB — два дополнительных контакта, которые служат для работы с модулем по прерыванию.

Подключим модуль MCP23017 к Ардуино Уно по следующей схеме:

Arduino UnoGnd+5VA4A5
Расширитель GPIOGndVccSDASCL

Чтобы продемонстрировать работу модуля, к ножке с надписью G0 подключим светодиод. Разумеется, светодиод подключаем через резистор 200Ом, всё как в том самом уроке про светодиод и Ардуино.

Этой схемы нам вполне хватит для первого теста, можно переходить к программе.

Программа

Самый простой пример — мигание светодиода.

#include "Adafruit_MCP23017.h"

const byte ledPin = 0; // номер контакта со светодиодом - G0

Adafruit_MCP23017 mcp;

void setup() {
    mcp.begin(7); // инициализация модуля с адресом 0x07
    mcp.pinMode(ledPin, OUTPUT); // настройка контакта G0 на вывод
}

void loop() {
    mcp.digitalWrite(ledPin, HIGH); // зажигаем
    delay(200); // пауза 200мс
    mcp.digitalWrite(ledPin, LOW); // гасим
    delay(200); // пауза 200мс
}

В самом начале программы мы объявляем переменную mcp, которую связываем с программным модулем Adafruit_MCP23017. Говоря языком объектно-ориентированного программирования — мы создаём экземпляр класса Adafruit_MCP23017 и записываем указатель на него в переменную mcp.

Затем, в функции setup мы вызываем метод mcp.begin с числом 7 в качестве единственного аргумента. 7 — это адрес устройства (подробности в последней главе «Адресация»).

Как видим, в программе используется знакомая нам функция digitalWrite. Единственное отличие от варианта программы без расширителя — вызов функции нужно делать от имени переменной mcp (тот самый указатель).

Загружаем программу, убеждаемся, что светодиод мигает. Следующий пример использует все 16 контактов расширителя!

Программа для управления 16 светодиодами

Усложним схему и алгоритм. Подключим 16 светодиодов к выводам модуля с номерами от G0 до G15. Пусть теперь светодиоды зажигаются по очереди с G0 до G7, и синхронно в обратном порядке с другого конца: с G15 до G8.

#include "Adafruit_MCP23017.h"

Adafruit_MCP23017 mcp;
  
void setup() {
    mcp.begin(7);

    for(byte i=0; i<16; i++){
        mcp.pinMode(i, OUTPUT);
    }
}

void loop() {
    for(int i=0; i<8; i++){
        mcp.digitalWrite(i, HIGH);
        mcp.digitalWrite(15-i, HIGH);
        delay(30);
        if(i>0){
            mcp.digitalWrite(i-1, LOW);
            mcp.digitalWrite(15-i+1, LOW);
            delay(30);
        }
    }
    for(int i=7; i>=0; i--){
        mcp.digitalWrite(i, HIGH);
        mcp.digitalWrite(15-i, HIGH);
        delay(30);
        if(i<7){
            mcp.digitalWrite(i+1, LOW);
            mcp.digitalWrite(15-i-1, LOW);
           delay(30);
        }
    }
}

Загружаем и наблюдаем безудержное веселье!

Далее, на примере с тактовыми кнопками научимся считывать сигналы с помощью расширителя.

0

Изменено:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.