Arduino – Expander jako wyjścia

  • 27 stycznia 2019

W dzisiejszym wpisie pokażę jak w prosty sposób za pomocą Arduino sterować expanderem na MCP23017.

Pobieramy bibliotekę z Gita https://github.com/adafruit/Adafruit-MCP23017-Arduino-Library
lub z Adafruit_MCP23017 (798 pobrań )

Rozpakowujemy pliki do Arduino\libraries u mnie C:\Program Files (x86)\Arduino\libraries\Adafruit_MCP23017\

Uwaga funkcja delay(); nie jest zalecana w produkcyjnym kodzie ze względu na „uśpienie” układu przez określony czas i może powodować niepoprawne działanie innych funkcji i programu.

#include  //dodajemy bibliotekę do obsługi i2c
#include "Adafruit_MCP23017.h" // dodajemy bibliotekę do obsługi układu MCP23017

Adafruit_MCP23017 mcp; // pierwszy MCP23017
Adafruit_MCP23017 mcp2; // drugi MCP23017

void setup() { // ustawienia funkcja wywoływana tylko raz przy starcie programu
  mcp.begin(); // w nawiasie adresy MCP - brak adres 0x20
  mcp2.begin(1); // adres 0x21
  byte i=0; // zmienna do pętli

  //aby nie wpisywać 16 razy dla każdego wyjścia mcp.pinMode(0, OUTPUT) dodamy pętle
  for(i=0;<=15;i++){
    mcp.pinMode(i, OUTPUT); // ustaw pin jako wyjście
    mcp.digitalWrite(i, HIGH); // ustaw pin na stan wysoki
    mcp1.pinMode(i, OUTPUT);
    mcp.1digitalWrite(i, HIGH);
  }
}

void loop() { // pętla główna programu
  int i=0; // zmienna do pętli
  int sleep = 40 ; // zmienna do odczekania między zmianą stanu pinu
    
  for(i=0;<=15;i++){
    mcp.digitalWrite(i, LOW);
    delay(sleep);
  }
  
  for(i=0;i<=15;i++){
    mcp2.digitalWrite(i, LOW);
    delay(sleep);
  }

  for(i=15;i>-1;i--){
    mcp2.digitalWrite(i, HIGH);
    delay(sleep);
  }
  
  for(i=15;i>-1;i--){
    mcp.digitalWrite(i, HIGH);
    delay(sleep);
  }
}