Wire requestFrom(): How many bytes were requested from the master?


hi there,

i'm working on arduino-i2c slave device multiple registers/values master (also arduino now) needs read out. want able read multiple bytes @ once using wire.requestfrom(slave, numofbytes)-method. therefore slave needs know number of bytes requested master. how can number?

my master program looks this:

code: [select]

#include <wire.h>

#define slave 0x86
#define register 0x6b

void setup()
{
  wire.begin();
  serial.begin(9600); 
}

void loop()
{
  wire.begintransmission(slave);
  wire.write(register);
  wire.endtransmission();
  wire.requestfrom(slave, 4);
 
  if(wire.available())
  {
    char c = wire.read();
    serial.println(c);
  }

  delay(500);
}


slave:

code: [select]

#include <wire.h>

#define address 0x86

#define register 0x6b

byte data[4];
byte currentregister;

void setup()
{
  wire.begin(address);
  wire.onreceive(receiveevent);
  wire.onrequest(requestevent);
}

//called, when master calls wire.write()
void receiveevent()
{
  if(wire.available())
  {
    //set selected register.
    currentregister = wire.read();
  }
}

//called, when master calls wire.requestfrom()
void requestevent()
{
  //get number of requested bytes.
  //how can number???
  int requestedbytescount = ?             //help!

  //return different data, depending on selected register.
 
  if(currentregister == register_1)
  {
    for(int = 0; < requestedbytescount; i++)
    {
      //send data i-th position of data-array
      wire.write(data[i]);
    }
  }
  //code other registers
}

void loop()
{
}

quote
how can number?
with current wire library implementation cannot. way implement fill buffer maximum number of bytes master may request. if client recognize stop condition empty buffer next request arrive.


Arduino Forum > Using Arduino > Networking, Protocols, and Devices (Moderator: fabioc84) > Wire requestFrom(): How many bytes were requested from the master?


arduino

Comments

Popular posts from this blog

Error compiling for board Arduino/Genuino Uno.

Installation database is corrupt

esp8266 (nodemcu 0.9) client.write très lent ???