Scheint aber wirklich so zu funktionieren.
(https://github.com/sparkfun/SparkFun...un_AS7265X.cpp)
wobei...Code:uint8_t AS7265X::readRegister(uint8_t addr) { _i2cPort->beginTransmission(AS7265X_ADDR); _i2cPort->write(addr); if (_i2cPort->endTransmission() != 0) { //Serial.println("No ack!"); return (0); //Device failed to ack } _i2cPort->requestFrom((uint8_t)AS7265X_ADDR, (uint8_t)1); if (_i2cPort->available()) { return (_i2cPort->read()); } //Serial.println("No ack!"); return (0); //Device failed to respond }
...die I2C-SlaveAdresse und die Registeradresse auf den Sensor schreiben und...Code:i2cPort->beginTransmission(AS7265X_ADDR); _i2cPort->write(addr);
...das abschließende Ack der Sequenz auf der SDA-Leitung abfragt...Code:if (_i2cPort->endTransmission() != 0) { //Serial.println("No ack!"); return (0); //Device failed to ack }
Bei der anschließenden Lesesequenz geht Arduino dann mit einer Abfrage dran, deren Erfolg über das 'available', und deren Daten über Read aus einem Puffer zurückgegeben werden.Code:_i2cPort->requestFrom((uint8_t)AS7265X_ADDR, (uint8_t)1); if (_i2cPort->available()) { return (_i2cPort->read()); }
Details findest Du, wenn Du nach "Arduino Wire.h" suchst.
Und die Funktion
uint8_t AS7265X::virtualReadRegister(uint8_t virtualAddr)
ist vielleicht auch ganz lesenswert. Da steht z.B. am Anfang ein Dummy-Lesen auf das Read-Register. Kann also sein, dass man ggf. anstehende Werte erst lesen muss, damit das AS7265X_RX_VALID-Flag im Status zurückgesetzt wird?!?







Zitieren

Lesezeichen