본문 바로가기

Arduino

PCF8574로 입출력 확장하기

입출력이 부족할 때 사용하기 좋습니다. 595, 164, 165칩 이용하는것 보다 PCF8574 이용하면 I2C 방식이라서 작업이 편합니다. 

 

어드레스는 A0,A1,A2로 정합니다. 전부 GND에 연결하면 20h이고 0,0,1로 연결하면 24h가 됩니다.

8개의 버튼과 8개의 LED가 있습니다.

 

하나의 칩이 8개의 input/output이 가능합니다. 8개의 칩 연결이 가능하니 총 64개의 입출력이 가능하네요.

 

#include "Arduino.h"
#include "PCF8574.h"

PCF8574 pcf1(0x20);
PCF8574 pcf2(0x24);

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

  pcf1.pinMode(P0, INPUT);
  pcf1.pinMode(P1, INPUT);
  pcf1.pinMode(P2, INPUT);
  pcf1.pinMode(P3, INPUT);
  pcf1.pinMode(P4, INPUT);
  pcf1.pinMode(P5, INPUT);
  pcf1.pinMode(P6, INPUT);
  pcf1.pinMode(P7, INPUT);

  pcf2.pinMode(P0, OUTPUT);
  pcf2.pinMode(P1, OUTPUT);
  pcf2.pinMode(P2, OUTPUT);
  pcf2.pinMode(P3, OUTPUT);
  pcf2.pinMode(P4, OUTPUT);
  pcf2.pinMode(P5, OUTPUT);
  pcf2.pinMode(P6, OUTPUT);
  pcf2.pinMode(P7, OUTPUT);


  pcf1.begin();
  pcf2.begin();
  
  
}

void loop() {


    pcf1.digitalRead(P0)==HIGH? pcf2.digitalWrite(P0, LOW) : pcf2.digitalWrite(P0, HIGH);
    pcf1.digitalRead(P1)==HIGH? pcf2.digitalWrite(P1, LOW) : pcf2.digitalWrite(P1, HIGH);
    pcf1.digitalRead(P2)==HIGH? pcf2.digitalWrite(P2, LOW) : pcf2.digitalWrite(P2, HIGH);
    pcf1.digitalRead(P3)==HIGH? pcf2.digitalWrite(P3, LOW) : pcf2.digitalWrite(P3, HIGH);
    pcf1.digitalRead(P4)==HIGH? pcf2.digitalWrite(P4, LOW) : pcf2.digitalWrite(P4, HIGH);
    pcf1.digitalRead(P5)==HIGH? pcf2.digitalWrite(P5, LOW) : pcf2.digitalWrite(P5, HIGH);
    pcf1.digitalRead(P6)==HIGH? pcf2.digitalWrite(P6, LOW) : pcf2.digitalWrite(P6, HIGH);
    pcf1.digitalRead(P7)==HIGH? pcf2.digitalWrite(P7, LOW) : pcf2.digitalWrite(P7, HIGH);

  delay(100);
}

'Arduino' 카테고리의 다른 글

RFID 카드 복사하기  (0) 2019.07.11
2N2222 NPN 트랜지스터 사용하기  (0) 2019.06.22
로터리 엔코더 - Rotary Encoder  (0) 2019.05.31
SG90 서보 모터 테스트  (0) 2019.05.23
1602 LCD 세트 완성  (0) 2019.05.14