EXI-16IO Update Arduino sample
1. Overview
อ้างอิงจากตัวอย่างโปรแกรมซึ่งได้เขียนไว้ก่อนหน้านี้ จาก Link https://micro-research.co.th/mrtblog/exi-16io-series-arduino-sample-code/ ซึ่งเป็นตัวอย่างการใช้ Arduino ร่วมกับไลบรารี่ของ Adafruit_MCP23017 เป็น Version 1.x โดยปัจจุบันผู้พัฒนาไลบรารี่ ได้อัพเดทเป็น V2.x และมีบางส่วนที่เปลี่ยนแปลงได้จากเดิม จึงต้องปรับแก้ไขโปรแกรมโค้ดบางส่วน เพื่อให้ใช้งานได้
2. การติดตั้งไลบรารี่ Adafruit MCP23017 Arduino Library
2.1. เลือกที่เมนู Sketch >> Include Library >> Manage Libraries… ดังรูป
2.2. พิมพ์ชื่อ MCP23017 ที่ช่องค้นหา และกดปุ่ม Enter จะปรากฏรายชื่อ Adafruit MCP23017 Arduino Library ให้คลิกปุ่ม Install เพื่อติดตั้ง ดังรูป
ไลบรารี่ที่ใช้งานนี้อาจต้องใช้งานร่วมกับไลบรารี่อื่นๆ ที่เกี่ยวข้องซึ่งอาจแสดงหน้าต่างขึ้นมา ให้คลิกปุ่ม Install all ดังรูป
3. การปรับแก้ไขตัวอย่างโปรแกรมเดิมให้สามารถใช้งานร่วมกับไลบรารี่ใหม่
สังเกตจากโปรแกรมให้ยกเลิกโปรแกรมเดิมในตำแหน่งบรรทัดที่ทำสีแดงไว้ และในที่นี้ทำเป็น Comment ไว้ แล้วแก้ไขเป็นโค้ดใหม่ในบรรทัดสีเขียวแทน เพียงเท่านี้ก็สามารถใช้งานได้แล้ว ดังตัวอย่างโปรแกรมต่อไปนี้
3.1.ตัวอย่างโปรแกรม Toggle_GPA0 : เอาต์พุตรีเลย์ Y0 ON/OFF ทุกๆ 1 วินาที
/******************************************************************************
Project Toggle_GPA0
Description Toggle GPA bit-0 , Blink LED
Programmer Mr.Ukrit Tantasutanon
Date 2022-08-24
Hardware AVR-AP2 (MCU=ATmega328, XTAL=16.0Mhz, Vcc=5.0V)
I/O interface
LED = GPA-0
SDA,SCL = I2C Bus interface to MCP23017
Libraries Adafruit MCP23017 Arduino Library
******************************************************************************
MICRO RESEARCH TECHNOLOGY LTD.,PART , www.micro-research.co.th
******************************************************************************/
//#include <Wire.h> // [1] Old library
//#include "Adafruit_MCP23017.h" // [1] Old library
#include <Adafruit_MCP23X17.h> // [2] Update new library
//Adafruit_MCP23017 mcp; // [1] Old library
Adafruit_MCP23X17 mcp; // [2] Update new library
void setup() {
// mcp.begin(); // [1] Old library
mcp.begin_I2C(); // [2] Update new library
mcp.pinMode(0, OUTPUT); // Set pin to output mode
}
void loop() {
delay(1000);
mcp.digitalWrite(0, HIGH);
delay(1000);
mcp.digitalWrite(0, LOW);
}
3.2. ตัวอย่างโปรแกรม GPA_Moving_Relay : เอาต์พุตรีเลย์ Y0-Y7 ทำงานทีละตัวเรียงกันไป
/******************************************************************************
Project GPA_Moving_Relay
Description 8 Bit LED moving on GPB-IO port
Programmer Mr.Ukrit Tantasutanon
Date 2022-08-24
Hardware AVR-AP2 (MCU=ATmega328, XTAL=16.0Mhz, Vcc=5.0V)
I/O interface
Output Relay= GPA-IO , 8 Bit
SDA,SCL = I2C Bus interface to MCP23017
Libraries Adafruit MCP23017 Arduino Library
******************************************************************************
MICRO RESEARCH TECHNOLOGY LTD.,PART , www.micro-research.co.th
******************************************************************************/
//#include <Wire.h> // [1] Old library
//#include "Adafruit_MCP23017.h" // [1] Old library
#include <Adafruit_MCP23X17.h> // [2] Update new library
//Adafruit_MCP23017 mcp; // [1] Old library
Adafruit_MCP23X17 mcp; // [2] Update new library
unsigned int GPIO_BA;
unsigned char Output_GPA=0x01;
unsigned char Input_GPB;
void setup() {
unsigned char i;
// mcp.begin(); // [1] Old library
mcp.begin_I2C(); // [2] Update new library
for (i=0;i<=7;i++) mcp.pinMode(i, OUTPUT); // Set pin to output mode for GPA
}
void loop() {
GPIO_BA = (unsigned int)(Input_GPB)<<8 | Output_GPA;
mcp.writeGPIOAB(GPIO_BA);
if (Output_GPA==0x80) Output_GPA=0x01;
else Output_GPA<<=1;
delay(500);
}
3.3. ตัวอย่างโปรแกรม GPB_input_to_GPA_output : รับสัญญาณอินพุต (IN0-IN7) แล้วส่งค่าออกไปยังเอาต์พุตรีเลย์ (Y0-Y7)
/******************************************************************************
Project GPB_input_to_GPA_output
Description Read input from GPB port then send output to GPA port
Programmer Mr.Ukrit Tantasutanon
Date 2022-08-24
Hardware AVR-AP2 (MCU=ATmega328, XTAL=16.0Mhz, Vcc=5.0V)
I/O interface
Input port = GPB-IO , 8 Bit
Output Relay= GPA-IO , 8 Bit
SDA,SCL = I2C Bus interface to MCP23017
Libraries Adafruit MCP23017 Arduino Library
******************************************************************************
MICRO RESEARCH TECHNOLOGY LTD.,PART , www.micro-research.co.th
******************************************************************************/
//#include <Wire.h> // [1] Old library
//#include "Adafruit_MCP23017.h" // [1] Old library
#include <Adafruit_MCP23X17.h> // [2] Update new library
//Adafruit_MCP23017 mcp; // [1] Old library
Adafruit_MCP23X17 mcp; // [2] Update new library
unsigned int GPIO_BA;
unsigned char Output_GPA;
unsigned char Input_GPB;
void setup() {
unsigned char i;
// mcp.begin(); // [1] Old library
mcp.begin_I2C(); // [2] Update new library
for (i=0;i<=7;i++) mcp.pinMode(i, OUTPUT); // Set pin to output mode for GPA
}
void loop() {
// Read a single port, A or B, and return its current 8 bit value.
// Parameter b should be 0 for GPIOA, and 1 for GPIOB.
Input_GPB = mcp.readGPIO(1);
// Invert active low input signal to active high relay output
Output_GPA = ~Input_GPB;
GPIO_BA = (unsigned int)(Input_GPB)<<8 | Output_GPA;
mcp.writeGPIOAB(GPIO_BA);
delay(10);
}