两个问题:
是否可以使用digitalWrite函数使用二进制值来寻址多个引脚?该文档似乎表明每个digitalWrite只能使用1个引脚。
我正在遍历该数组int array4[] = {14, 10, 4, -1};
,并且我不想打开由array4 [3]表示的LED,因为某些原因-1实际上正在激活一个引脚。在这方面我可以使用“空”值吗?
我正在移植一些Python代码以在Arduino上运行,并且在使用多个MCP23017芯片打开/关闭LED灯时遇到了一个问题。通过使用python中的二进制值数组,我能够打开LED的组合。
使用Python程序,我可以通过使用二进制字符串(如0b10011011)来解决给定MCP芯片上引脚的任何组合。例如,假设这点亮了LED 2、4和6。那么,在Arduino上,相同的二进制值仅点亮了一个LED。
我知道我可以激活多个引脚,例如:
int array1[] = {11, 6, 5, 0};
int array2[] = {12, 8, 2, 7};
int array3[] = {13, 9, 3, 1};
int array4[] = {14, 10, 4, -1};
mcp5.digitalWrite(array1[i],1);
mcp5.digitalWrite(array2[i],1);
mcp5.digitalWrite(array3[i],1);
mcp5.digitalWrite(array4[i],1);
但是我想将现有代码用于二进制序列,而不是重写所有内容。谢谢!
答案 0 :(得分:0)
以下假设您正在使用Adafruit MCP23017库
您只能一次用digitalWrite
写一个引脚。来源:
void Adafruit_MCP23017::digitalWrite(uint8_t pin, uint8_t d) {
uint8_t gpio;
uint8_t bit=bitForPin(pin);
// read the current GPIO output latches
uint8_t regAddr=regForPin(pin,MCP23017_OLATA,MCP23017_OLATB);
gpio = readRegister(regAddr);
// set the pin and direction
bitWrite(gpio,bit,d);
// write the new GPIO
regAddr=regForPin(pin,MCP23017_GPIOA,MCP23017_GPIOB);
writeRegister(regAddr,gpio);
}
您可以看到没有错误或边界检查。
您可以以此函数为基础编写自己的digitalWriteMany
函数(或其他合适的名称)。此函数还可以检查数组中的NULL值。