Master Requestin Array Data From Slave

For example im using case 18 and trying to send the data from master “5” and the slave has been read it “5”. But when im trying to send it back to master from slave, the master read it “0”.

Here’s the code master.

#include "TextCommand.h"
#include <Wire.h>
#include <TLC5615.h>

TextCommand cmd(&Serial, 100);
TextCommand i2c(&Wire, 100);
byte slave[255];
char* data[5];
volatile float waktu, tim = 10;
TLC5615 LLD(9);
TLC5615 ULD(10);
boolean Rd = false;
boolean Wt = false;
int buff[4];
void setup() {
  Wire.begin();
  Serial.begin(9600);
  LLD.begin();
  ULD.begin();

}
void requesttimer2() {
  Wire.requestFrom(4, 1);
  while (Wire.available())
  {

    int c = Wire.read();
    Serial.print(c);



  }
}
void SerCommand2() {
  Wire.beginTransmission(4);
  int n = cmd.available();
  if (n > 0) {


    if (cmd.isWrite() == 1) {
      if (cmd.ucAddress() == 0) {
        switch (cmd.ioAddress()) {
          /* case 16:
            /* data[0] = (char*) cmd.data();
             LLD.analogWrite(atoi(data[0]));
             Serial.print("!w0010 ");
             Serial.println(data[0]);
             Serial.print("!w0010 ");
             Wire.println("!w0410 ");
             break;
          */
          case 17:
          /*data[1] = (char*)cmd.data();
            ULD.analogWrite(atoi(data[1]));
            Serial.print("!w0011 ");
            Serial.println(data[1]);
            Serial.print("!w0011 ");
            Wire.println("!w0411 ");
            break;*/
          case 18:
            /*data[2] = (char*)cmd.data();
              tim = atoi(data[2]);
              Serial.println(tim);*/
            Serial.print("!w0012 ");
            Serial.print('"');
            Serial.print((const char *)cmd.command());
            Serial.println('"');
            Wire.print("!W0412 ");

            Wire.print((char*)cmd.data());
            Wire.print("\r");
            Wire.endTransmission();
            //          Serial.println(" ms");
            break;
          case 20:
            // start_count();
            Serial.println("!w0014");
            Serial.print('"');
            Serial.print((const char *)cmd.command());
            Serial.println('"');
            Serial.println("!W0014");
            Wire.print("!W0414 ");
            Wire.print((char*)cmd.data());
            Wire.print("\r");
            Wire.endTransmission();
            break;
          case 21:
            // stop_count();
            Serial.println("!W0015");
            Wire.println("!W0415");
            Wire.endTransmission();
            break;
          case 22:
            /*data[3] = (char*)cmd.data();
              cntTime = atoi(data[3]);*/
            Serial.print("!W0016 ");
            Wire.println("!W0416 ");
            Wire.endTransmission();
            // Serial.println(cntTime);
            //          Serial.println(" sec");
            break;
        }
      }
    }


    else  if (cmd.isWrite() == 0) {
      if (cmd.ucAddress() == 0) {
        switch (cmd.ioAddress()) {
          case 0:

            Serial.println("cek koneksi ");
            Wire.print("!R0400");
            Wire.endTransmission();
            break;



          case 18:
            Serial.println("!R0012 "); // baca timer
            Wire.println("!R0412");
            Wire.endTransmission();
            delay(5);
            requesttimer2();
            break;



          case 19:
            Serial.println("!R0013 "); // baca counter
            Wire.println("!R0413");
            Wire.endTransmission();
            //                requestcounter2();
            break;
          case 22:
            Serial.print("!R0016 ");
            Wire.print("R0416");
            Wire.endTransmission();// Ini buat ngeaca set timer counter bukan mas gina?
            break;
        }
      }

    }

  }
}


void loop() {
 SerCommand2();

}

slave code:

#include "TextCommand.h"
#include <Wire.h>
#include <TLC5615.h>

TLC5615 LLD(9); //alamat chip select untuk TLC5615 LLD
TLC5615 ULD(10); //alamat chip select untuk TLC5615 ULD
TextCommand i2c(&Wire, 100);
TextCommand cmd(&Serial, 100);

const int signPin = 5;        //untuk pin Counter 1 pada slave, untuk master dihapus saja

volatile unsigned long signCount; //variabel untuk counter, digunakan pada slave saja
volatile unsigned int tick; //variabel untuk counter, digunakan pada slave saja
volatile uint8_t busy = 0; //variabel untuk counter, digunakan pada slave saja

//data ditampung dalam char array yang berisi
//{nilai LLD, nilai ULD, nilai Timer, }
char* data[5];
byte slave[255];
//set timer dalam ms dan set counter time dalam sec
volatile unsigned int cntTime = 60; //variabel untuk counter, digunakan pada slave saja
volatile float waktu, tim = 10;
char uCaddr, Reg;
boolean Rd = false;
boolean Wt = false;
int buff[4];
  
void setup()
{
  Serial.begin(9600);
  Wire.begin(4);
  Wire.onReceive(receiveEvent);
  sei();
  LLD.begin();
  ULD.begin();
    pinMode(signPin, INPUT);
  digitalWrite(signPin, LOW);

 
}
void requestLLD()
{
  Wire.print(data[0]);
}
void requestULD()
{
  Wire.print(data[1]);
}
void requesttimer()

{
  Serial.print(data[2]);
  Wire.write(*data[2]);
  
}
void requestcount()
{
 Wire.print(data[3]);
}
void receiveEvent(int howMany)
{
  i2cCommand();
}

void i2cCommand(){
  int n = i2c.available();
  if ( n > 0){
    if (i2c.isWrite() == 1) {
      if (i2c.ucAddress() == 4) {
        switch (i2c.ioAddress()) {
         /* case 16:
            data[0] = (char*) cmd.data();
            LLD.analogWrite(atoi(data[0]));
            Serial.print("!w0410 ");
            Serial.println(data[0]);
            break;
          case 17:
            data[1] = (char*)cmd.data();
            ULD.analogWrite(atoi(data[1]));
            Serial.print("!w0411 ");
            Serial.println(data[1]);
            break;
            */
          case 18:
            data[2] = (char*)i2c.data();
           
            Serial.print("!w0412 *");
            Serial.println(data[2]);
            
                        
            //Serial.println(" ms");
            break;
           case 20:
           Serial.println("!W0414");
//             start_count();
             
             break;
            case 21:
             Serial.println("!W0415");
//             stop_count();
            
             break; 
          case 22:
            data[3] = (char*)i2c.data();
            cntTime = atoi(data[3]);
            Serial.print("!w0416 ");
            Serial.println(cntTime);
            //          Serial.println(" sec");
            break;
        }
      }
    }
  

  
 else if (i2c.isWrite() == 0) {
    if (i2c.ucAddress() == 4) {
      switch (i2c.ioAddress()) {
        case 0:
          Serial.println("!R0200");
          break;

           case 16:
             Serial.println("Cek LLD");
              requestLLD();
              break;
            

            case 17:
            Serial.println("Cek ULD");
            requestULD();
            break;
        case 18:
          Serial.print("!R0012 "); // baca timer
          requesttimer();          
          break;
        case 19:
          Serial.print("!R0013 "); // baca counter
          Serial.print(signCount);                   requestcount();
          break;
        case 22:
          Serial.print("!R0016 "); // Ini buat ngeaca set timer counter bukan mas gina?

          break;
      }
    }



  }
}
}


void loop(){
  // put your main code here, to run repeatedly:
  i2cCommand();

}

There’s anyone can fix it? Im attaching the result of serial monitor

Please provide a link for where you got your TextCommand.h library. It is difficult to follow since sometimes you use Wire directly and sometimes you call into the TextCommand objects.

If you look at the documentation for the Wire library, they do not support print(), only write() [although the compiler doesn't complain since it inherits from Stream]

im attached the command library.
Can i attach an adrress for my array data?
for example data[0], data[1] , data[2] has their own address so i wouldnt sent the wrong data to my master?

command.zip (3.66 KB)