ผู้เขียน หัวข้อ: งานครั้งที่ 17 การเขียนโปรแกรมสำหรับขยายพอร์ตดิจิตอล I/O ด้วย MCP23017  (อ่าน 5208 ครั้ง)

admin

  • Administrator
  • Hero Member
  • *****
  • กระทู้: 688
    • ดูรายละเอียด
    • อีเมล์
การเขียนโปรแกรมสำหรับขยายพอร์ตดิจิตอล 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


ตัวอย่างโปรแกรม
โค๊ด: [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);}
}

« แก้ไขครั้งสุดท้าย: กันยายน 04, 2019, 01:43:25 PM โดย admin »