2019年3月10日 星期日

[Arduino] 實做 PCF8574 模組的輸出入功能(二)

本文在說明前文提到可以串聯多個 PCF8574 模組作為多個輸出入端口,這裏只實做 2 個模組串聯。模組端部留有公排針與母排針,串聯時只要將公排針插入母排針即可,記得還需要調整跳線帽重新定址,如下圖。


如果您對 PCF8574 模組還不熟悉,建議您先參閱
「實做 PCF8574 模組的輸出入功能(一)」 http://pizgchen.blogspot.com/2019/03/arduino-pcf8574.html


接線

Arduino       PCF8574 模組
VCC            VCC
GND           GND
A4               SDA
A5               SCL

將 2 個 PCF8574 模組串接,並調整第二個模組的跳線帽,第一個模組的位址是 0x38,第二個模組的位址是 0x39,如下圖。

第一個模組

第二個模組

兩個模組串接


實作範例一

這個實驗用 Arduino 讓第一個模組的 pin0 腳位和第二個模組的 pin7 腳位 LED 每秒閃一次,所以您還應該在那 2 個腳位設置 LED 電路,然後您可以看到閃爍的 LED,並在 Arduino 的序列視窗看到腳位的輸出狀態。

程式碼

#include "HCPCF8574.h"      //Include the HCPCF8574 library

#define I2C_ADD1 0x38       //I2C address of the first PCF8574 device
#define I2C_ADD2 0x39       //I2C address of the second PCF8574 device

HCPCF8574 Port1(I2C_ADD1);  //Create an instance of the library to control the first device
HCPCF8574 Port2(I2C_ADD2);  //Create an instance of the library to control the second device

void setup()
{
  Serial.begin(9600);
  Port1.init();             //Initiliase the first PCF8574 (all pins are set to high)
  Port2.init();             //Initiliase the second PCF8574 (all pins are set to high)
  Port1.pinMode(0, OUTPUT); //Set digital pin 0 on the first device to an output
  Port2.pinMode(7, OUTPUT); //Set digital pin 7 on the second device to an output
}


void loop()
{
  Serial.println("Port1 pin0 & Port2 pin7 is HIGH");
  Port1.pinWrite(0, HIGH);  //Set digital pin 0 on the first device high
  Port2.pinWrite(7, HIGH);  //Set digital pin 7 on the second device high
  delay(1000);                       //Wait 1 second

  Serial.println("Port1 pin0 & Port2 pin7 is LOW");
  Port1.pinWrite(0, LOW);   //Set digital pin 0 on the first device low
  Port2.pinWrite(7, LOW);   //Set digital pin 7 on the second device low
  delay(1000);                       //Wait another second
}


實作範例二

這個實驗用 Arduino 讀取 2 組 PCF8574AT 模塊的 P0~P7 腳位信號,所以您還應該在那些腳位總共設置 16 個按鈕電路,然後可以在 Arduino 的序列視窗顯示按鈕的開關狀態。

程式碼

#include "HCPCF8574.h"      //Include the HCPCF8574 library

#define I2C_ADD1 0x38       //I2C address of the first PCF8574 device
#define I2C_ADD2 0x39       //I2C address of the second PCF8574 device

HCPCF8574 Port1(I2C_ADD1);  //Create an instance of the library to control the first device
HCPCF8574 Port2(I2C_ADD2);  //Create an instance of the library to control the second device

void setup()
{
  Serial.begin(9600);
  Port1.init();             //Initiliase the first PCF8574 (all pins are set to high)
  Port2.init();             //Initiliase the second PCF8574 (all pins are set to high)
  for (int i=0; i<8 ; i++) {
    Port1.pinMode(i, INTPUT); //Set digital pin 0 on the first device to an output
    Port2.pinMode(i, INTPUT); //Set digital pin 7 on the second device to an output
  }
}

void loop()
{
   boolean State10 = Port1.pinRead(0);  //Read the port1 of digital pin 0
   boolean State11 = Port1.pinRead(1);  //Read the port1 of digital pin 1
   boolean State12 = Port1.pinRead(2);  //Read the port1 of digital pin 2
   boolean State13 = Port1.pinRead(3);  //Read the port1 of digital pin 3
   boolean State14 = Port1.pinRead(4);  //Read the port1 of digital pin 4
   boolean State15 = Port1.pinRead(5);  //Read the port1 of digital pin 5
   boolean State16 = Port1.pinRead(6);  //Read the port1 of digital pin 6
   boolean State17 = Port1.pinRead(7);  //Read the port1 of digital pin 7

   boolean State20 = Port2.pinRead(0);  //Read the port2 of digital pin 0
   boolean State21 = Port2.pinRead(1);  //Read the port2 of digital pin 1
   boolean State22 = Port2.pinRead(2);  //Read the port2 of digital pin 2
   boolean State23 = Port2.pinRead(3);  //Read the port2 of digital pin 3
   boolean State24 = Port2.pinRead(4);  //Read the port2 of digital pin 4
   boolean State25 = Port2.pinRead(5);  //Read the port2 of digital pin 5
   boolean State26 = Port2.pinRead(6);  //Read the port2 of digital pin 6
   boolean State27 = Port2.pinRead(7);  //Read the port2 of digital pin 7

   Serial.println("Port1="); 
   Serial.print(State10); Serial.print(State11); Serial.print(State12);   Serial.print(State13);
   Serial.print(State14); Serial.print(State15); Serial.print(State16);   Serial.print(State17);

   Serial.println("Port2="); 
   Serial.print(State20); Serial.print(State21); Serial.print(State22);   Serial.print(State23);
   Serial.print(State24); Serial.print(State25); Serial.print(State26);   Serial.print(State27);
   
   delay(1000);                       //Wait another second
}


採購資訊

PCF8574AT I/O擴展模塊 https://goods.ruten.com.tw/item/show?21908917689628





1 則留言: