การเขียนโปรแกรมสำหรับขยายพอร์ตดิจิตอล I/O ด้วย MCP23017
การติดตั้งไลบารี่ MCP23017 เนื่องจากโปรแกรม Arduino IDE ไม่ได้มีการติดตั้งมาให้ตั้งแต่เริ่มต้นจึงจำเป็นต้องมีการติดตั้งเพิ่มเติ่มเข้าไปในโปรแกรม โดยมีขั้นตอนดังนี้
1. ดาวน์โหลดไฟล์ zip จากเวปไซด์ https://github.com/adafruit/Adafruit-MCP23017-Arduino-Library
2. ทำการเพิ่มไลบรารี่ลงในโปรแกรม Arduino IDE โดยการเพิ่มจากไฟล์ zip แล้วทำการหาไฟล์ zip ที่ได้จากการดาวน์โหลดในข้อ 1
ฟังก์ชั่นใช้งาน
-Adafruit_MCP23017 [opject name]; //ประกาศใช้งานไลบรารี่ในชื่อออปเจคที่ต้องการ
-.pinMode(pin, mode); //กำหนดโหมดการทำงาน (INPUT,OUTPUT) ของขาพอร์ตที่ต้องการ
-.pullUp(pin, HIGH); //กำหนดให้ใช้ตัวต้านทานพูลอัพภายใน (มีค่าประมาณ 100k)
-.digitalWrite(pin, logic); //ฟังก์ชั่นส่งค่าลอจิก (HIGH,LOW) ไปยังขาพอร์ต
-.digitalRead(pin); //ฟังก์ชั่นอ่านค่าลอจิกที่ปรากฏที่ขาพอร์ต
*หมายเลขของขาพอร์ตที่เรียกใช้งานจะเรียงจาก 0-15 โดยเริ่มจากพอร์ต A และนับต่อเนื่องไปยังพอร์ต B
โจทย์โปรแกรม
-เขียนโปรแกรมใช้งานการพอร์ตดิจิตอลจากไอซี MCP23017
-โปรแกรมรายละเอียดพิเศษรายกลุ่ม (แจ้งให้ทราบเมื่อถึงชั่วโมงเรียน)
วงจรที่ใช้ทดลอง
กรณีใช้บอร์ดรุ่น NodeMCU
กรณีใช้บอร์ดรุ่น WeMos D1 mini
ตัวอย่างโปรแกรม
การติดตั้งไลบารี่ MCP23017 เนื่องจากโปรแกรม Arduino IDE ไม่ได้มีการติดตั้งมาให้ตั้งแต่เริ่มต้นจึงจำเป็นต้องมีการติดตั้งเพิ่มเติ่มเข้าไปในโปรแกรม โดยมีขั้นตอนดังนี้
1. ดาวน์โหลดไฟล์ zip จากเวปไซด์ https://github.com/adafruit/Adafruit-MCP23017-Arduino-Library
2. ทำการเพิ่มไลบรารี่ลงในโปรแกรม Arduino IDE โดยการเพิ่มจากไฟล์ zip แล้วทำการหาไฟล์ zip ที่ได้จากการดาวน์โหลดในข้อ 1
ฟังก์ชั่นใช้งาน
-Adafruit_MCP23017 [opject name]; //ประกาศใช้งานไลบรารี่ในชื่อออปเจคที่ต้องการ
-.pinMode(pin, mode); //กำหนดโหมดการทำงาน (INPUT,OUTPUT) ของขาพอร์ตที่ต้องการ
-.pullUp(pin, HIGH); //กำหนดให้ใช้ตัวต้านทานพูลอัพภายใน (มีค่าประมาณ 100k)
-.digitalWrite(pin, logic); //ฟังก์ชั่นส่งค่าลอจิก (HIGH,LOW) ไปยังขาพอร์ต
-.digitalRead(pin); //ฟังก์ชั่นอ่านค่าลอจิกที่ปรากฏที่ขาพอร์ต
*หมายเลขของขาพอร์ตที่เรียกใช้งานจะเรียงจาก 0-15 โดยเริ่มจากพอร์ต A และนับต่อเนื่องไปยังพอร์ต B
โจทย์โปรแกรม
-เขียนโปรแกรมใช้งานการพอร์ตดิจิตอลจากไอซี MCP23017
-โปรแกรมรายละเอียดพิเศษรายกลุ่ม (แจ้งให้ทราบเมื่อถึงชั่วโมงเรียน)
วงจรที่ใช้ทดลอง
กรณีใช้บอร์ดรุ่น NodeMCU
กรณีใช้บอร์ดรุ่น WeMos D1 mini
ตัวอย่างโปรแกรม
โค๊ด: [Select]
#include <Wire.h>
#include "Adafruit_MCP23017.h"
Adafruit_MCP23017 mcp;
int pattern[]={0b0000000000000000,
0b1000000000000001,
0b1100000000000011,
0b1110000000000111,
0b0111000000001110,
0b0011100000011100,
0b0001110000111000,
0b0000111001110000,
0b0000011111100000,
0b0000001111000000,
0b0000000110000000,};
void setup() {
mcp.begin(); // use default address 0
for(byte i=0;i<=16;i++)
{
mcp.pinMode(i,OUTPUT);
mcp.digitalWrite(i,LOW);
}
}
void loop()
{
for(byte i=0;i<=10;i++)
{
send2port(pattern[i]);
delay(250);
}
}
void send2port(int data)
{
if (data & 1 ){mcp.digitalWrite(0,HIGH);} else {mcp.digitalWrite(0,LOW);}
if (data & 2 ){mcp.digitalWrite(1,HIGH);} else {mcp.digitalWrite(1,LOW);}
if (data & 4 ){mcp.digitalWrite(2,HIGH);} else {mcp.digitalWrite(2,LOW);}
if (data & 8 ){mcp.digitalWrite(3,HIGH);} else {mcp.digitalWrite(3,LOW);}
if (data & 16 ){mcp.digitalWrite(4,HIGH);} else {mcp.digitalWrite(4,LOW);}
if (data & 32 ){mcp.digitalWrite(5,HIGH);} else {mcp.digitalWrite(5,LOW);}
if (data & 64 ){mcp.digitalWrite(6,HIGH);} else {mcp.digitalWrite(6,LOW);}
if (data & 128 ){mcp.digitalWrite(7,HIGH);} else {mcp.digitalWrite(7,LOW);}
if (data & 256 ){mcp.digitalWrite(8,HIGH);} else {mcp.digitalWrite(8,LOW);}
if (data & 512 ){mcp.digitalWrite(9,HIGH);} else {mcp.digitalWrite(9,LOW);}
if (data & 1024 ){mcp.digitalWrite(10,HIGH);} else {mcp.digitalWrite(10,LOW);}
if (data & 2048 ){mcp.digitalWrite(11,HIGH);} else {mcp.digitalWrite(11,LOW);}
if (data & 4096 ){mcp.digitalWrite(12,HIGH);} else {mcp.digitalWrite(12,LOW);}
if (data & 8192 ){mcp.digitalWrite(13,HIGH);} else {mcp.digitalWrite(13,LOW);}
if (data & 16384 ){mcp.digitalWrite(14,HIGH);} else {mcp.digitalWrite(14,LOW);}
if (data & 32768 ){mcp.digitalWrite(15,HIGH);} else {mcp.digitalWrite(15,LOW);}
}
ความคิดเห็น
แสดงความคิดเห็น