I2C通讯中的小发现
新手,算是做个笔记吧。共享之。题外话提一下,所有的函数区分大小写。各位看例程的时候一定注意。
下面的内容手打就不区分大小写了。
一般I2C通讯有几个函数,
初始化,
wire.begin()
onreceive()
onrequest()
begintransmission()
write()
endtransmission()
等几个函数。
我要说的是endtransmission
因为当主机通知发送消息的时候,从机会触发onreceive函数。
如果onreceive函数处理内容多的时候。而主机在write()结束之后,紧接着就endtransmission了的话。
从机的onreceive函数会立即停止。跳转到不知道什么地方执行了。反正不执行loop了,也不继续执行onreceive的函数了。
在I2c通讯的时候,最好在write()之后,delay()一下。
或者用其他更高级的办法,比如中断来处理。 据我的经验...
endtransmission 之後 信息才会发出。
所以,是不是检查一下 onreceive 是不是已经做到最精简化了
。。。
我从机反正接收信息后onreceive的函数总是不能正常工作,
无奈,在onreceive中加调试信息serial.println,发现一个字符串不能打完就死了。也没有执行loop()中的语句。不知道程序跳到那里了。
然后在write()之后加了delay(1000)就好了。
不知道何解。
页:
[1]