首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Arduino Wire程序似乎在第一个i2c有效负载后停止读取字节

Arduino Wire程序似乎在第一个i2c有效负载后停止读取字节
EN

Stack Overflow用户
提问于 2013-08-06 03:59:43
回答 1查看 1.7K关注 0票数 2

我正在尝试编写一个程序,从i2c接收字符串数据,并将其显示在液晶屏上。第一次将数据接收到arduino时,arduino会呈现该数据,但随后的i2c有效负载将被忽略。我的onReceive函数在液晶屏的第二行有一个状态行显示,它显示来自定时器芯片的seconds()字段。秒数似乎没有递增。但是,在loop()中呈现的每秒点闪烁不会继续闪烁,因此mcu不会被冻结。

代码语言:javascript
复制
#include <LiquidCrystal.h>    
#include <Wire.h>    
#include <Time.h>    
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);

void setup()
{
  Wire.begin(4);                // join i2c bus with address #4
  Wire.onReceive(receiveEvent); // register event
  lcd.begin(16,2);              // columns, rows.  use 16,2 for a 16x2 LCD, etc.
  lcd.clear();                  // start with a blank screen

}

void loop()
{
  lcd.setCursor(15,1);
  if (second() % 2 == 0)
    lcd.write(".");
    else
    lcd.write(" ");


  delay(100);

}

void receiveEvent(int howMany)
{

  //char buf[howMany];
  int i=0;
  char output[16];

  lcd.clear();
  while(Wire.available())
  {
    char c = Wire.read(); // receive byte as a character
    lcd.setCursor(i,0);
    lcd.write(c);
    i++;
    //buf[i++]=c;
    //buf[i+1]=0;
  }
  lcd.setCursor(0,1);
  sprintf(output,"s%dNB%dI%d",second(),howMany,i);
  lcd.write(output);

}
EN

回答 1

Stack Overflow用户

发布于 2013-08-07 06:10:20

你的Arduino可能被困在这里了:

代码语言:javascript
复制
while(Wire.available())
 {
  //...

使用:

代码语言:javascript
复制
if(Wire.available() > 0) {
 //stuff
}

而不是。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18066662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档