有時候會遇到要控制的腳位很多但是腳位不夠用的情況這個時候就要用模塊來擴充他的腳位
下面的範例是透過I2C同時控制兩個MCP23017,透過輸入指令讓對應的腳位HIGH或LOW,程
式沒什麼好說明的,因為寫法很暴力直接但也好理解
根據涵式庫的定義,第一到八支腳為GPA0~GPA7,第九到十六支腳為GPB0~GPB7
先說明接線:
MCP23017腳位圖
VDD --> arduino 5V
VSS -->arduino GND
SCK -->arduino SCL
SDA -->arduino SDA
RESET -->arduino 5V
A2 --> 依所選的I2C位址選擇H 或 L
A1 --> 依所選的I2C位址選擇H 或 L
A0 --> 依所選的I2C位址選擇H 或 L
範例程式的位址是0X24,0X25
下面是I2C位址的說明
下面是程式碼:
#include <Adafruit_MCP23017.h>
Adafruit_MCP23017 mcp1;
Adafruit_MCP23017 mcp2;
/*
addr 0 = A2 low , A1 low , A0 low 000
addr 1 = A2 low , A1 low , A0 high 001
addr 2 = A2 low , A1 high , A0 low 010
addr 3 = A2 low , A1 high , A0 high 011
addr 4 = A2 high , A1 low , A0 low 100
addr 5 = A2 high , A1 low , A0 high 101
addr 6 = A2 high , A1 high , A0 low 110
addr 7 = A2 high, A1 high, A0 high 111
*/
#define addr1 4 // A2 high , A1 low , A0 low 100
#define addr2 5 //A2 high , A1 low , A0 high 101
void setup()
{
Serial.begin(115200);
mcp1.begin(addr1);
mcp2.begin(addr2);
mcp1.pinMode(0, OUTPUT);
mcp1.pinMode(1, OUTPUT);
mcp1.pinMode(2, OUTPUT);
mcp1.pinMode(3, OUTPUT);
mcp1.pinMode(4, OUTPUT);
mcp1.pinMode(5, OUTPUT);
mcp1.pinMode(6, OUTPUT);
mcp1.pinMode(7, OUTPUT);
mcp1.pinMode(8, OUTPUT);
mcp1.pinMode(9, OUTPUT);
mcp1.pinMode(10, OUTPUT);
mcp1.pinMode(11, OUTPUT);
mcp1.pinMode(12, OUTPUT);
mcp1.pinMode(13, OUTPUT);
mcp1.pinMode(14, OUTPUT);
mcp1.pinMode(15, OUTPUT);
mcp2.pinMode(0, OUTPUT);
mcp2.pinMode(1, OUTPUT);
mcp2.pinMode(2, OUTPUT);
mcp2.pinMode(3, OUTPUT);
mcp2.pinMode(4, OUTPUT);
mcp2.pinMode(5, OUTPUT);
mcp2.pinMode(6, OUTPUT);
mcp2.pinMode(7, OUTPUT);
mcp2.pinMode(8, OUTPUT);
mcp2.pinMode(9, OUTPUT);
mcp2.pinMode(10, OUTPUT);
mcp2.pinMode(11, OUTPUT);
mcp2.pinMode(12, OUTPUT);
mcp2.pinMode(13, OUTPUT);
mcp2.pinMode(14, OUTPUT);
mcp2.pinMode(15, OUTPUT);
}
void loop(){
String s = "";
while (Serial.available()) {
char c = Serial.read();
if(c!='\n'){
s += c;
}
delay(5); // 沒有延遲的話 UART 串口速度會跟不上Arduino的速度,會導致資料不完整
}
if(s!=""){
//Serial.println(s);
//address 24
if(s=="AC101\r")
{
mcp1.digitalWrite(0,HIGH);
Serial.println("AC101");
}
else if(s=="AO101\r")
{
mcp1.digitalWrite(0,LOW);
Serial.println("AO101");
}
else if(s=="AC102\r")
{
mcp1.digitalWrite(1,HIGH);
Serial.println("AC102");
}
else if(s=="AO102\r")
{
mcp1.digitalWrite(1,LOW);
Serial.println("AO102");
}
else if(s=="AC103\r")
{
mcp1.digitalWrite(2,HIGH);
Serial.println("AC103");
}
else if(s=="AO103\r")
{
mcp1.digitalWrite(2,LOW);
Serial.println("AO103");
}
else if(s=="AC104\r")
{
mcp1.digitalWrite(3,HIGH);
Serial.println("AC104");
}
else if(s=="AO104\r")
{
mcp1.digitalWrite(3,LOW);
Serial.println("AO104");
}
else if(s=="AC105\r")
{
mcp1.digitalWrite(4,HIGH);
Serial.println("AC105");
}
else if(s=="AO105\r")
{
mcp1.digitalWrite(4,LOW);
Serial.println("AO105");
}
else if(s=="AC106\r")
{
mcp1.digitalWrite(5,HIGH);
Serial.println("AC106");
}
else if(s=="AO106\r")
{
mcp1.digitalWrite(5,LOW);
Serial.println("AO106");
}
else if(s=="AC107\r")
{
mcp1.digitalWrite(6,HIGH);
Serial.println("AC107");
}
else if(s=="AO107\r")
{
mcp1.digitalWrite(6,LOW);
Serial.println("AO107");
}
else if(s=="AC108\r")
{
mcp1.digitalWrite(7,HIGH);
Serial.println("AC108");
}
else if(s=="AO108\r")
{
mcp1.digitalWrite(7,LOW);
Serial.println("AO108");
}
else if(s=="AC109\r")
{
mcp1.digitalWrite(8,HIGH);
Serial.println("AC109");
}
else if(s=="AO109\r")
{
mcp1.digitalWrite(8,LOW);
Serial.println("AO109");
}
else if(s=="AC110\r")
{
mcp1.digitalWrite(9,HIGH);
Serial.println("AC110");
}
else if(s=="AO110\r")
{
mcp1.digitalWrite(9,LOW);
Serial.println("AO110");
}
else if(s=="AC111\r")
{
mcp1.digitalWrite(10,HIGH);
Serial.println("AC111");
}
else if(s=="AO111\r")
{
mcp1.digitalWrite(10,LOW);
Serial.println("AO111");
}
else if(s=="AC112\r")
{
mcp1.digitalWrite(11,HIGH);
Serial.println("AC112");
}
else if(s=="AO112\r")
{
mcp1.digitalWrite(11,LOW);
Serial.println("AO112");
}
else if(s=="AC113\r")
{
mcp1.digitalWrite(12,HIGH);
Serial.println("AC113");
}
else if(s=="AO113\r")
{
mcp1.digitalWrite(12,LOW);
Serial.println("AO113");
}
else if(s=="AC114\r")
{
mcp1.digitalWrite(13,HIGH);
Serial.println("AC114");
}
else if(s=="AO114\r")
{
mcp1.digitalWrite(13,LOW);
Serial.println("AO114");
}
else if(s=="AC115\r")
{
mcp1.digitalWrite(14,HIGH);
Serial.println("AC115");
}
else if(s=="AO115\r")
{
mcp1.digitalWrite(14,LOW);
Serial.println("AO115");
}
else if(s=="AC116\r")
{
mcp1.digitalWrite(15,HIGH);
Serial.println("AC116");
}
else if(s=="AO116\r")
{
mcp1.digitalWrite(15,LOW);
Serial.println("AO116");
}
//address 24
//address 25
if(s=="BC201\r")
{
mcp2.digitalWrite(0,HIGH);
Serial.println("BC201");
}
else if(s=="BO201\r")
{
mcp2.digitalWrite(0,LOW);
Serial.println("BO201");
}
else if(s=="BC202\r")
{
mcp2.digitalWrite(1,HIGH);
Serial.println("BC202");
}
else if(s=="BO202\r")
{
mcp2.digitalWrite(1,LOW);
Serial.println("BO202");
}
else if(s=="BC203\r")
{
mcp2.digitalWrite(2,HIGH);
Serial.println("BC203");
}
else if(s=="BO203\r")
{
mcp2.digitalWrite(2,LOW);
Serial.println("BO203");
}
else if(s=="BC204\r")
{
mcp2.digitalWrite(3,HIGH);
Serial.println("BC204");
}
else if(s=="BO204\r")
{
mcp2.digitalWrite(3,LOW);
Serial.println("BO204");
}
else if(s=="BC205\r")
{
mcp2.digitalWrite(4,HIGH);
Serial.println("BC205");
}
else if(s=="BO205\r")
{
mcp2.digitalWrite(4,LOW);
Serial.println("BO205");
}
else if(s=="BC206\r")
{
mcp2.digitalWrite(5,HIGH);
Serial.println("BC206");
}
else if(s=="BO206\r")
{
mcp2.digitalWrite(5,LOW);
Serial.println("BO206");
}
else if(s=="BC207\r")
{
mcp2.digitalWrite(6,HIGH);
Serial.println("BC207");
}
else if(s=="BO207\r")
{
mcp2.digitalWrite(6,LOW);
Serial.println("BO207");
}
else if(s=="BC208\r")
{
mcp2.digitalWrite(7,HIGH);
Serial.println("BC208");
}
else if(s=="BO208\r")
{
mcp2.digitalWrite(7,LOW);
Serial.println("BO208");
}
else if(s=="BC209\r")
{
mcp2.digitalWrite(8,HIGH);
Serial.println("BC209");
}
else if(s=="BO209\r")
{
mcp2.digitalWrite(8,LOW);
Serial.println("BO209");
}
else if(s=="BC210\r")
{
mcp2.digitalWrite(9,HIGH);
Serial.println("BC210");
}
else if(s=="BO210\r")
{
mcp2.digitalWrite(9,LOW);
Serial.println("BO210");
}
else if(s=="BC211\r")
{
mcp2.digitalWrite(10,HIGH);
Serial.println("BC211");
}
else if(s=="BO211\r")
{
mcp2.digitalWrite(10,LOW);
Serial.println("BO211");
}
else if(s=="BC212\r")
{
mcp2.digitalWrite(11,HIGH);
Serial.println("BC212");
}
else if(s=="BO212\r")
{
mcp2.digitalWrite(11,LOW);
Serial.println("BO212");
}
else if(s=="BC213\r")
{
mcp2.digitalWrite(12,HIGH);
Serial.println("BC213");
}
else if(s=="BO213\r")
{
mcp2.digitalWrite(12,LOW);
Serial.println("BO213");
}
else if(s=="BC214\r")
{
mcp2.digitalWrite(13,HIGH);
Serial.println("BC214");
}
else if(s=="BO214\r")
{
mcp2.digitalWrite(13,LOW);
Serial.println("BO214");
}
else if(s=="BC215\r")
{
mcp2.digitalWrite(14,HIGH);
Serial.println("BC215");
}
else if(s=="BO215\r")
{
mcp2.digitalWrite(14,LOW);
Serial.println("BO215");
}
else if(s=="BC216\r")
{
mcp2.digitalWrite(15,HIGH);
Serial.println("BC216");
}
else if(s=="BO216\r")
{
mcp2.digitalWrite(15,LOW);
Serial.println("BO216");
}
//address 25
else{}
}
}
留言列表