Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino Wire程序似乎在第一个i2c负载后停止读取字节_Arduino_I2c_Lcd - Fatal编程技术网

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

Arduino Wire程序似乎在第一个i2c负载后停止读取字节,arduino,i2c,lcd,Arduino,I2c,Lcd,我正在尝试编写一个程序,从i2c接收字符串数据并将其显示在LCD上。第一次将数据接收到arduino时,它会呈现数据,但随后的i2c有效负载将被忽略。我的onReceive功能在lcd的第二行上有一个状态行显示,显示计时器芯片的seconds()字段。秒数似乎没有增加。但是,在loop()中渲染的每秒点闪烁确实会继续闪烁,因此mcu不会冻结 #include <LiquidCrystal.h> #include <Wire.h> #include <

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

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

}
#包括
#包括
#包括
液晶显示器(12,11,10,5,4,3,2);
无效设置()
{
Wire.begin(4);//连接地址为4的i2c总线
Wire.onReceive(receiveEvent);//注册事件
lcd.begin(16,2);//列、行。使用16,2表示16x2的lcd,等等。
lcd.clear();//从空白屏幕开始
}
void循环()
{
lcd.setCursor(15,1);
如果(第二个()%2==0)
lcd.写(“.”);
其他的
lcd.写(“”);
延迟(100);
}
无效接收事件(整数多少)
{
//char buf[多少];
int i=0;
字符输出[16];
lcd.clear();
while(Wire.available())
{
char c=Wire.read();//以字符形式接收字节
lcd.setCursor(i,0);
lcd.write(c);
i++;
//buf[i++]=c;
//buf[i+1]=0;
}
lcd.setCursor(0,1);
sprintf(输出,“s%dNB%dI%d”,秒(),多少,i);
写(输出);
}

您的Arduino可能被困在这里:

while(Wire.available())
 {
  //...
使用:


相反。

谢谢,我今晚会试试这个,并根据需要更新问题!
if(Wire.available() > 0) {
 //stuff
}