当前位置: 首页 > 知识库问答 >
问题:

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

井兴怀
2023-03-14

两个问题:

>

  • 是否有办法使用digitalWrite函数使用二进制值寻址多个管脚?文档似乎表明,每个digitalWrite只能使用1个pin。

    我正在迭代这个数组<代码>int array4[]={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。

    我知道我可以激活多个引脚,例如:

    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);
    

    但是我想使用我现有的二进制序列代码,而不是重写所有内容。谢谢!

  • 共有1个答案

    漆雕稳
    2023-03-14

    以下假设您正在使用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);
    }
    

    您可以看到没有错误或边界检查。

    您可以使用此函数作为基础来编写您自己的digitalWrite很多函数(或其他合适的名称)。此函数还可以检查数组中的NULL值。

     类似资料:
    • 我想让Arduino代码进入虚拟串行端口,而不是实际的Arduino。IDE通过COM端口向Arduino发送二进制代码,在本例中,COM端口将是虚拟COM端口,而不是Arduino。 我想读取并存储正在上载到COM端口的代码。我尝试了几个Java库(RXTX、jSSC和gnu.io),但我无法读取COM端口上的内容,因为它总是会给出另一个应用程序(即Arduino IDE)正在使用它的例外情况。

    • 在C语言中使用多个间接指针声明的最大限制是什么? 例如,如下所示 使用运算符的最大限制是什么?

    • 计算机系统将二进制地址分配给内存位置。 但是,系统使用位数来寻址内存位置。 使用1位,可以解决两个存储位置。 使用2位,我们可以解决4个问题,使用3个位解决8个存储器位置问题。 可以在地址中的位数与存储器位置的范围之间的映射中识别模式。 我们知道, 这n位可以分成两部分,即K位和(n-k)位。

    • 我有个小问题。 我不明白为什么。问题是不是我的协议(如果我可以这么叫的话),我是如何解包字符串的?或者其他问题。 我很困惑。 在本教程中,我只需要两个值就可以使它工作

    • 然而,尽管我也想向发送相同的邮件,但这可能是我忽略了的一个非常简单的问题,但我想这里的人会马上知道它是什么。 为您的帮助干杯:) 编辑-我尝试使用: 但没有欢乐。 编辑2-我使用它: 这不是一段看起来最优美的代码,但它确实起到了作用...

    • 题目描述 输入两个整数n和sum,从数列1,2,3…….n 中随意取几个数,使其和等于sum,要求将其中所有的可能组合列出来。 分析与解法 解法一 注意到取n,和不取n个区别即可,考虑是否取第n个数的策略,可以转化为一个只和前n-1个数相关的问题。 如果取第n个数,那么问题就转化为“取前n-1个数使得它们的和为sum-n”,对应的代码语句就是sumOfkNumber(sum - n, n - 1)