В данном уроке мы подключим расширитель портов MCP23017 к плате Arduino Nano. Данный расширитель может быть полезен когда у Вас не хватает входов/выходов, при этом сам микроконтроллер полностью Вас устраивает в функционале. Я буду использовать готовую Arduino плату:
Данная микросхема подключается по шине I2C, ножки SCL(12) и SDA(13). Поддерживает частоту обмена данных 100кГц, 400кГц и 1,7МГц. Выходной/входной ток 25мА.
Внутренность самой микросхемы:
Входами A2-A0, выставляем нужный нам адрес: 0х20-0х27.
Для проверки работы платы мы подключим три светодиода, два из которых будут мигать по очереди и один зажигаться при нажатии кнопки и переставать светиться при ее отпускании:
**********
схема
*********
Программный код:
#include <Wire.h>
#include "Adafruit_MCP23017.h"
#define botton 0 //GPA0
#define LED1 8 //GPB0
#define LED2 9 //GPB1
#define LED3 10 //GPB1
Adafruit_MCP23017 mcp;
void setup(){
mcp.begin(); // use default address 0x20
mcp.pinMode(botton, INPUT); //GPA0 as input pin
mcp.pullUp(botton, HIGH); // rezistor
mcp.pinMode(LED1, OUTPUT); //GPB0 as output pin
mcp.pinMode(LED2, OUTPUT); //GPB1 as output pin
mcp.pinMode(LED3, OUTPUT); //GPB2 as output pin
}
void loop(){
mcp.digitalWrite(LED1, 0);
mcp.digitalWrite(LED2, 1);
delay(1000);
mcp.digitalWrite(LED1, 1);
mcp.digitalWrite(LED2, 0);
delay(1000);
bool GPA0 = mcp.digitalRead(botton);
if (GPA0 == 0){
mcp.digitalWrite(LED3, 1);
}
else {
mcp.digitalWrite(LED3, 0);
}
}