2014-12-30 45 views
5

Arduinolar arasında I2C üzerinden haberleşme konusunda sorun yaşıyorum. Bazı nedenlerden dolayı, işleyicisi yalnızca bir kez çağrılmaktadır.I2C onReceive-Handler sadece bir kez çağrıldı

Usta Kodu (gönderici):

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

Köle Kodu (alıcı): bu test-kurulumunda fikri gönderen her bir byte göndermek sahip olmaktır

#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!"); 
} 
ikincisi, alıcının bir mesaj yazarak harekete geçmesini sağlayın. Ancak, mesaj sadece bir kez basılır. Slave'i sıfırladığımda tekrar basıldı, ama sadece bir kez.

Bunun nereden gelebileceği hakkında bir fikir var mı?

cevap

4

Akıştaki tüm baytları okuduğunuzdan emin olmanız gerekir. Diğer akıllıca engellemek gibi görünüyor. Etkinlik işleyicinizin bu şekilde görünmesini sağlayın. Böylece birden çok kez arayabilirsiniz.

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

Teşekkürler! Projenin bir süre sonra bitmesine rağmen, bilmek çok güzel. Bunu akılda tutmak için aklıma devam edeceğim ve bunu onaylama şansım olduğunda cevabı kabul edeceğim. – JorenHeit

İlgili konular