这是一个小的8位灰色码头旋转位置传感器,提供128个独特的位置。它使用单个编码器轨道进行管理,其中8个触点间隔均匀。该“数字旋钮”编码器可用于控制您的arduino项目,它也可以用于寿命有限的运动控制系统。附件内容分享的代码是针对Arduino UNO R3开发的。它应该在任何Arduino上工作。该代码目前支持MCP23008,PCF8574和PCF8574A I2C扩展器。
128位高分辨率绝对编码器实物展示:
使用以下地址选择这些
0x00 - 0x07 MCP23008地址0x20-0x27。(这与较早的库修订版向后兼容)
0x20 - 0x27 PCF8574
0x38 - 0x3F PCF8574A
请注意,MCP23008和PCF8574芯片使用相同的i2c地址范围。许多LCD背包也使用这些芯片之一。在同一总线上混合所有这些时要小心,以避免重复地址。为了进一步混淆事物,原始I2C地址具有作为读/写信号的最低位,因此一些文档(如某些PCF8574数据表)将参考0x40和0x70,0x20和0x38向左移位一位。
安装
封闭的示例草图ACE128test通过任意一个和I2C背包驱动2x16显示,或直接从Arduino驱动,具体取决于您是否注释了LCD_I2C宏。
公共方法
用法
请参见ACE128测试示例。
包括您需要的所有编码器映射(见下文),以匹配ACE单元的引脚序列。
使用ACE128构造函数声明所有ACE128对象。它需要I2C地址和指向编码器映射的指针。可选的第三个整数可以取一个正整数来显示在eeprom中存储零信息的位置。允许三个字节。
从setup()调用每个ACE128对象的begin方法。这将使用eeprom设置或回退将当前位置设置为零。
pos()和upos()方法返回相对于逻辑零位置的位置,而不是由机械任意位置的编码器返回的零位置。当它滚动时,转动被存储以供mpos使用并保存在eeprom中
每循环一次(),调用pos(),upos()或mpos()并将值存储在一个变量中。访问i2c总线需要一些周期,所以每次要引用它时都不要调用pos()。
有三个设置功能
setZero() - 将当前位置设置为零(不更新多圈)
setZero(int) - 将零点设置为给定的0-127数字
setMpos(int) - 将当前位置设置为此多圈值
编码器地图
该库带有各种编码器映射,可以在ACE和IO扩展器之间实现引脚的不同接线。这些由包含的make_encodermap示例草图生成。生成自定义编码器图:
编辑make_encodermap草图
更改pinOrder数组以匹配您的接线
更改pinString以匹配您的接线
将草图加载到Arduino
将串行监视器输出复制到ACE128文件夹中的新.h文件。
12345678用于“逆时针上升”接线,与数据表编号相匹配,建议进行面包板测试。
1