2014-12-30 23 views
5

我在通過I2C進行Arduino之間的通信時遇到問題。出於某種原因,onReceive處理程序只被調用一次。I2C onReceive處理程序僅調用一次

主碼(發件人):

#include <Wire.h>                  
#include "i2csettings.h" // defines address 

void setup() 
{ 
    Wire.begin(I2C_MASTER_ADDRESS); 
} 

void loop() 
{     
    Wire.beginTransmission(I2C_SLAVE_ADDRESS); 
    Wire.write(0x11); 
    Wire.endTransmission(); 

    delay(1000);  
} 

從編碼(接收器):

#include <Wire.h> 
#include "i2csettings.h" 

void takeAction(int); 

void setup() 
{ 
    Serial.begin(9600); 

    Wire.begin(I2C_SLAVE_ADDRESS); 
    Wire.onReceive(takeAction); 
} 

void loop() 
{} 

void takeAction(int nBytes) 
{ 
    Serial.println("Action!"); 
} 

在這個測試設置的想法是這樣,發送方發送一個字節的每第二,讓接收者通過打印消息來處理這個問題。但是,該消息僅打印一次。當我重新設置奴隸,它再次打印,但只是一次。

任何想法可能來自哪裏?

回答

4

您必須確保從流中讀取所有字節。 其他方面似乎阻止。 使您的事件處理程序看起來像這樣。所以你可以多次調用它。

void takeAction(int nBytes) 
{ 
    Serial.println("Action!"); 
    while(Wire.available()) 
    { 
    Wire.read(); 
    } 
    return; 
} 
+1

謝謝!很高興知道,儘管該項目早已結束。我會記住這一點以備將來參考,並在我有機會證實這一點時接受答案。 – JorenHeit

相關問題