TinyWireM.h函数理解

TinyWireM是Wire的替代库,我认为它是兼容的。我的问题是:如何用TinyWireM替换Wire?是否像使用TinyWireM替换Wire的所有实例一样简单?还有什么我需要做的才能使库ATtiny85兼容吗?

我确实尝试将“Wire”重新定义为TinyWireM,如下所示:

#include "TinyWireM.h"
#define Wire   TinyWireM

所有内容编译并上传到我的ATtiny85就好了。但是,传感器似乎只能始终输出大约7600mm的值。

谢谢!

1 个答案:

答案 0 :(得分:1)

Wire Library不适用于ATTiny,因为它只有一个USI(通用串行接口),它与Arduino Uno中的硬件不同。 TinyWireM库显示与Uno上的Wire库几乎相同的行为,但不是移植到ATTiny的相同库。 我完全不明白,为什么要将TinyWireM库重命名为Wire。如果你只是想要说明一下,它真的是Wire库,这可能不是一个好的编码实践,因为这有点隐藏了你的代码中的事实,你不是使用Wire库,而是使用不同的库。如果您想创建可在Uno和ATTiny上重用的代码,那么我建议使用#define#ifdef#ifndef#endif指令的组合,因此,根据定义的标志,只编译相应的代码。据我所知,ArduinoIDE也使用这些来包含每个目标的正确头文件。如果您可以在头文件中找到相应的定义,则可以使用它。但是在文件开头使用您自己的定义会更容易。

作为提示:如果您曾尝试通过I2C与TinyWireM建立多主控通信(这对我来说非常适用),则必须在传输后释放总线,以便其他主设备可以使用它。我这样做是为了禁用USI硬件 USICR&= 0b11001111; pinMode(0,INPUT); pinMode(2,INPUT); 图书馆不会为你做这件事。(如果你不这样做,公共汽车将被占用,没有其他主人可以通信)要直接使用USICR注册,你还必须#include <USI_TWI_Master.h>


扩展:
我在lib TinyWireM中发现了一些不便。如果您收到一些数据,lib 会将其存储在缓冲区中。如果您读取缓冲区,它将显示内容。如果没有收到新数据,缓冲区将保持原样,如果再次读取缓冲区,您将读取完全相同的数据。

因此,我更改了TinyWireM.ccp,以便在读取一次时将删除缓冲区。

现在,如果您再次读取缓冲区而没有新的接收数据,它将显示0。

代码库:https://github.com/adafruit/TinyWireM

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值