如何解决MCP23017上的arduino键盘
所有人!
我正在尝试为我的项目在MCP23017上制作键盘。
架构为:
固定连接:
MCP23017上的引脚13(SDA)-> ATMega 328上的引脚27(ADC4 / SDA)
MCP23017上的引脚12(SCL)-> ATMega 328上的引脚28(ADC5 / SCL)
因此,键盘通过I2C连接了arduino。
扫描I2C设备给我,我的键盘在地址0x21上。
现在,我获取按钮的代码状态如下:
#include "Wire.h"
#define KEYPAD 0x21
byte inputs=0;
void setup() {
Serial.begin(9600);
// wake uo I2C bus
Wire.begin();
// reset chip in default state (same as reset)
Wire.beginTransmission(KEYPAD);
Wire.write(0x0A);
Wire.write(0x10);
Wire.endTransmission();
// pullup all pins of port B to 100k
Wire.beginTransmission(KEYPAD);
Wire.write(0x0D);
Wire.write(0xFF);
Wire.endTransmission();
// Set all pins direction of port A to ouputs
Wire.beginTransmission(KEYPAD);
Wire.write(0x00);
Wire.write(0x00);
Wire.endTransmission();
// Set all pins direction of port B to inputs
Wire.beginTransmission(KEYPAD);
Wire.write(0x01);
Wire.write(0xFF);
Wire.endTransmission();
}
void loop() {
// Set all pins HIGH on port A
Wire.beginTransmission(KEYPAD);
Wire.write(0x12);
Wire.write(0xFF);
Wire.endTransmission();
// Set reading port B
Wire.beginTransmission(KEYPAD);
Wire.write(0x13);
Wire.endTransmission();
// Read byte from port B
inputs = Wire.requestFrom(KEYPAD,1);
// Print value,which was revieved from port B
if (inputs > 0) {
Serial.print("FF ");
Serial.println(inputs,DEC);
delay(200);
}
}
在监视器中,我只会得到:FF 1,但没有按钮状态。
有人可以帮助我吗?我哪里错了?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。