GPIO 익스팬더

9014 단어 gpioArduino

GPIO 익스팬더를 사용해보기



GPIO 포트가 부족할 때 사용되는 GPIO 확장기의 동작을 확인합니다(Arduino 환경에서).

이용한 GPIO 익스팬더



아키즈키 전자에서 판매되고 있는 PCF8574 를 이용. 이 익스팬더는 I2C로 제어하지만 SPI 제어의 것도 있는 것 같다.

PCF8574



여기 에 데이터시트가 있습니다. Arduino에 필요한 라이브러리는 여기에서 따릅니다.

내용



PCF8574 핀 할당



상기 데이터시트 인용.


실험 내용



PCF8574의 한 핀에 연결된 버튼을 누르면 PCF8574의 다른 핀에 연결된 LED가 켜집니다. 배선 상황은 사진대로.


I2C 주소



I2C 스캐너을 사용하여 조사하면 I2C 주소는 "0x20"이었다. 아키즈키 전자의 PC8574 페이지 에는, 「0x20 - 0x27」이라고 기재 있어. PCF8574 데이터시트 을 잘 보면,

그리고 있었다. 어딘가에서 발견한 회로를 참조하여, 핀 A0-A2를 우연히 GND에 접속하고 있었으므로, 「0x20」(I2C 어드레스는 7비트 표기)로 올바른 것을 알 수 있다.
- Read : (0x20 << 1 | 0x1) = 0x41
- Write: (0x20 << 1 | 0x0) = 0x40

소스 코드



도서관 설치 시의 샘플 프로그램을 이용.

PCF8574_RW_Test.ino
#include "PCF8574.h"  // ①

// ②
#define BTN0  7
#define LED0  6
#define BTN1  2
#define LED1  3
#define CHATTERING    200 //times

uint8_t btn[] = {BTN0, BTN1};
uint32_t chat[2];
uint8_t led[] = {LED0, LED1};

PCF8574 PCF(0x20);  // ③

void setup()
{
  Serial.begin(115200);

  if (!PCF.begin() {  // ④
    Serial.println("could not initialize...");
  }
  if (!PCF.isConnected()) {  // ⑤
    Serial.println("=> not connected");
  } else {
    Serial.println("=> connected!!");
  }

  for (int i = 0; i < 2; i++) {  // ⑥
    chat[i] = 0;
    PCF.write(led[i], LOW);  // ⑦
  }
}

void loop()
{
  for (int i=0; i<2; i++) {
    while (!PCF.read(btn[i])) {  // ⑧
      chat[i]++;
    }
    if (chat[i] > CHATTERING) {  // ⑨
      Serial.print("BTN"); Serial.print(i); Serial.println(" Pushed");
      PCF.write(led[i], HIGH);  // ⑦
      delay(200);
      PCF.write(led[i], LOW);  // ⑦
    }
    chat[i] = 0;
  }
  delay(10);
}

  • ①: PCF8574 라이브러리 포함
  • ②:PCF8574핀(P0-P7)에 연결하는 버튼이나 LED의 정의
  • ③ : 클래스 및 I2C 주소(0x20) 선언
  • ④:PCF8574 초기화
  • ⑤:PCF8574에의 접속
  • ⑥ : 버튼 채터링 제거용 변수 초기화
  • ⑦ : write() 메소드로 핀에의 기입
  • ⑧ : read() 메소드로 핀으로부터 읽어들입니다
  • ⑨ : 버튼 채터링 무시

  • 실험



    성공.

    좋은 웹페이지 즐겨찾기