Python 使用二进制值寻址多个引脚Arduino/MCP23017

Python 使用二进制值寻址多个引脚Arduino/MCP23017,python,arduino,led,Python,Arduino,Led,两个问题: 是否有一种使用digitalWrite函数使用二进制值寻址多个管脚的方法?文档似乎表明,每次数字写入只能使用1个pin 我正在迭代这个数组intarray4[]={14,10,4,-1},我不想打开由array4[3]表示的LED,因为某种原因-1实际上正在激活pin。在这方面,我是否可以使用“null”值 我正在移植一些Python代码以在Arduino上运行,在使用多个MCP23017芯片打开/关闭LED灯时遇到了一个问题。我能够通过在python中使用二进制值数组来打开LED的

两个问题:

  • 是否有一种使用digitalWrite函数使用二进制值寻址多个管脚的方法?文档似乎表明,每次数字写入只能使用1个pin

  • 我正在迭代这个数组
    intarray4[]={14,10,4,-1},我不想打开由array4[3]表示的LED,因为某种原因-1实际上正在激活pin。在这方面,我是否可以使用“null”值

  • 我正在移植一些Python代码以在Arduino上运行,在使用多个MCP23017芯片打开/关闭LED灯时遇到了一个问题。我能够通过在python中使用二进制值数组来打开LED的组合

    通过Python程序,我可以使用二进制字符串(如:0b10011011)来处理给定MCP芯片上的任何管脚组合。例如,假设这会点亮LED 2、4和6。在Arduino上,相同的二进制值只点亮一个LED

    我知道我可以激活多个PIN,如:

    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);
    
    但是我想使用我现有的二进制序列代码,而不是重写所有的代码。谢谢

    以下假设您正在使用Adafruit MCP23017库

    使用
    digitalWrite
    一次只能写入一个pin。以下是消息来源:

    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
    函数(或其他合适的名称)的基础。此函数还可以检查数组中的空值