How to ' TFT print ' data

// SimpleTx - the master or the transmitter

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#define CE_PIN 6         //check pin connections
#define CSN_PIN 7        //check pin connections

const byte slaveAddress[][5] = {{'R', 'x', 'A', 'A', 'A'}, {'R', 'x', 'A', 'A', 'B'},
    {'R', 'x', 'A', 'A', 'C'}, {'R', 'x', 'A', 'A', 'D'}};

RF24 radio(CE_PIN, CSN_PIN); // Create a Radio

char dataToSend[10] = "Message 0";
char txNum = '0';

unsigned long currentMillis;
unsigned long prevMillis;
unsigned long txIntervalMillis = 1000; // send once per second


void setup() {

    Serial.begin(9600);
    Serial.println("SimpleTx Starting");
    radio.begin();
    radio.setDataRate( RF24_250KBPS );
    radio.setRetries(3, 5); // delay, count
    int numSlaves = 4;
 
 
    radio.enableDynamicPayloads() ;
    radio.setAutoAck( true ) ;
}

//====================

void loop() {
    currentMillis = millis();
    if (currentMillis - prevMillis >= txIntervalMillis) 
    {
    send();
    prevMillis = millis();
    }
}

//====================

void send() {

    bool rslt;
    for (byte n = 1; n < 3; n++) {
        radio.openWritingPipe(slaveAddress[n]);
        rslt = radio.write( &dataToSend, sizeof(dataToSend) );
            // Always use sizeof() as it gives the size as the number of bytes.
            // For example if dataToSend was an int sizeof() would correctly return 2

        Serial.print("Data Sent to Slave ");
        Serial.println(n);
        Serial.print(dataToSend);
    }
        if(rslt) {
        
        Serial.print("  Acknowledge received from Slave ");
        Serial.println(n);
        updateMessage();
        
    
    else   
    
    Serial.println("  Tx failed");
        }        
}

//================

void updateMessage() {
    // so you can see that new data is being sent
    txNum += 1;
    if (txNum > '9') {
    txNum = '0';
    }
    dataToSend[8] = txNum;
}
/*DUE 2.8" TFT 240x320 uno shield ILI9341 multi wire
   EDITED :NO serial monitor print. ONLY print on TFT
  MultiTxAckPayload - the master or the transmitter
  works with two or more(max6) Arduinos as slaves
  each slave use this SimpleRxAckPayload program
  example address {'R','x','A','A','A'}
  and the other unit with {'R','x','A','A','B'}
*/
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#define CE_PIN  50  //nrf24
#define CSN_PIN 51  //nrf24
#include <MCUFRIEND_kbv.h>
#include <Adafruit_GFX.h>
#include <TouchScreen.h>
MCUFRIEND_kbv tft;

#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0
#define LCD_RESET A4

#define TS_MINX 167   //
#define TS_MINY 228   //
#define TS_MAXX 880   //
#define TS_MAXY 860   //

#define YP A2  // must be an analog pin, use "An" notation!
#define XM A3  // must be an analog pin, use "An" notation!
#define YM 8   // can be a digital pin
#define XP 9   // can be a digital pin

#define BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF
#define LIGHTGREY 0xDEDB
#define GREY    0xCE79

#define MINPRESSURE 10
#define MAXPRESSURE 1000

TouchScreen ts = TouchScreen(XP, YP, XM, YM, 365); //.......p0
int X, Y, Z;

const byte numSlaves = 6;   //indicates number of slaves see addresses below in { }
const byte slaveAddress[numSlaves][5] = {
  {'R', 'x', 'A', 'A', 'A'}, //need address for each slave 1
  {'R', 'x', 'A', 'A', 'B'}, //need address for each slave 2
  {'R', 'x', 'A', 'A', 'C'}, //need address for each slave 3
  {'R', 'x', 'A', 'A', 'D'}, //need address for each slave 4
  {'R', 'x', 'A', 'A', 'E'}, //need address for each slave 5
  {'R', 'x', 'A', 'A', 'F'}  //need address for each slave 6
};

RF24 radio(CE_PIN, CSN_PIN);            // Create a Radio

char dataToSend[32] = " Unit  ";        //this [32] must match dataReceived from Rx
char txNum = '0';                       //must stay zero. keeps track of data sending
float ackData[2] = { -11.11, -11.11};   // to hold the two values coming from the slave
bool newData = false;

unsigned long currentMillis;
unsigned long prevMillis;
unsigned long txIntervalMillis = 1000;    // send request 1ce per second

//===============

void setup() {

  Serial.begin(9600);
  //Serial.println("SimpleTxAckPayload Starting");
  radio.begin();
  radio.setDataRate( RF24_250KBPS );
  radio.enableAckPayload();
  radio.setRetries(10, 8); // delay, count
  tft.reset();
  uint16_t identifier = tft.readID();
  tft.begin(identifier);
  tft.setRotation(2);  //screen, power supply port is bottom right
}

//=============

void loop() {

  currentMillis = millis();
  if (currentMillis - prevMillis >= txIntervalMillis) {
    send();
  }

}

//================

void send() {
  //tft.fillScreen(LIGHTGREY);

  for (byte n = 0; n < numSlaves; n++) {    // call each slave in turn

    // open the writing pipe with the address of a slave
    radio.openWritingPipe(slaveAddress[n]);

    // include the slave number in the message
    dataToSend[5] = n + '1';       //start 'unit no' at one

    bool rslt;
    rslt = radio.write( &dataToSend, sizeof(dataToSend) );
    // Always use sizeof() as it gives the size as the number of bytes.
    // For example if dataToSend was an int sizeof() would correctly return 2


    //Serial.print(" Data  ");
    tft.setCursor(10, 10);  //L Right,U Down print the word 'Unit1 Unit2 etc'
    tft.setTextColor(YELLOW);
    tft.setTextSize(2);
    tft.print(dataToSend);   //prints the word Unit1 Unit2 etc
    if (rslt) {
      if ( radio.isAckPayloadAvailable() ) {
        radio.read(&ackData, sizeof(ackData));
        newData = true;
      }
      else {
        tft.print("  Acknowledge but no data ");
      }
      updateMessage();
    }
    else {
      tft.print("  Tx failed");
    }
    showData();
    if (dataToSend() == '1') {
      tft.setCursor(10, 10);
    }
    if (dataToSend() == '2') {
      tft.setCursor(10, 20);
    }
    if (dataToSend() == '3') {
      tft.setCursor(10, 30);
    }
    if (dataToSend() == '4') {
      tft.setCursor(10, 60);
    }
    if (dataToSend() == '5') {
      tft.setCursor(10, 70);
    }
    if (dataToSend() == '6') {
      tft.setCursor(10, 90);
    }
    //tft.print("\n");
  }

  prevMillis = millis();
}


//=================

void showData() {
  if (newData == true) {
    // Serial.print("  Acknowledge data ");
    tft.setCursor(15, 50);  //L Right,U Down

    tft.setTextColor(YELLOW);
    tft.setTextSize(2);
    tft.println(ackData[0]);
    tft.println(" , ");
    tft.print(ackData[1]);

    newData = false;
  }
}

//================

void updateMessage() {
  // so you can see that new data is being sent
  txNum += 1;
  if (txNum > '9') {
    txNum = '0';
  }
  dataToSend[8] = txNum;
}

The way you answer questions say a lot about your character.

The way you neglect to provide details to the question as well... ::slight_smile:

This is the error message I receive:

Arduino: 1.8.5 (Windows 10), Board: "Arduino Due (Programming Port)"

In file included from C:\Users\Johan Prinsloo\Documents\Arduino\libraries\RF24-master/RF24.h:18:0,

from C:\Users\Johan Prinsloo\Documents\Arduino\DueAck1_Tx\DueAck1_Tx.ino:12:

C:\Users\Johan Prinsloo\Documents\Arduino\libraries\RF24-master/RF24_config.h:149:0: warning: "PSTR" redefined [enabled by default]

#define PSTR(x) (x)

^

In file included from C:\Users\Johan Prinsloo\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.11\cores\arduino/Arduino.h:31:0,

from sketch\DueAck1_Tx.ino.cpp:1:

C:\Users\Johan Prinsloo\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.11\cores\arduino/avr/pgmspace.h:34:0: note: this is the location of the previous definition

#define PSTR(str) (str)

^

In file included from C:\Users\Johan Prinsloo\Documents\Arduino\libraries\RF24-master/RF24.h:18:0,

from C:\Users\Johan Prinsloo\Documents\Arduino\DueAck1_Tx\DueAck1_Tx.ino:12:

C:\Users\Johan Prinsloo\Documents\Arduino\libraries\RF24-master/RF24_config.h:151:0: warning: "strlen_P" redefined [enabled by default]

#define strlen_P strlen

^

In file included from C:\Users\Johan Prinsloo\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.11\cores\arduino/Arduino.h:31:0,

from sketch\DueAck1_Tx.ino.cpp:1:

C:\Users\Johan Prinsloo\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.11\cores\arduino/avr/pgmspace.h:69:0: note: this is the location of the previous definition

#define strlen_P(a) strlen((a))

^

In file included from C:\Users\Johan Prinsloo\Documents\Arduino\libraries\RF24-master/RF24.h:18:0,

from C:\Users\Johan Prinsloo\Documents\Arduino\DueAck1_Tx\DueAck1_Tx.ino:12:

C:\Users\Johan Prinsloo\Documents\Arduino\libraries\RF24-master/RF24_config.h:153:0: warning: "pgm_read_word" redefined [enabled by default]

#define pgm_read_word(p) (*(p))

^

In file included from C:\Users\Johan Prinsloo\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.11\cores\arduino/Arduino.h:31:0,

from sketch\DueAck1_Tx.ino.cpp:1:

C:\Users\Johan Prinsloo\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.11\cores\arduino/avr/pgmspace.h:103:0: note: this is the location of the previous definition

#define pgm_read_word(addr) (*(const unsigned short *)(addr))

^

C:\Users\Johan Prinsloo\Documents\Arduino\DueAck1_Tx\DueAck1_Tx.ino: In function 'void send()':

DueAck1_Tx:139: error: 'dataToSend' cannot be used as a function

if (dataToSend() == '1') {

^

DueAck1_Tx:142: error: 'dataToSend' cannot be used as a function

if (dataToSend() == '2') {

^

DueAck1_Tx:145: error: 'dataToSend' cannot be used as a function

if (dataToSend() == '3') {

^

DueAck1_Tx:148: error: 'dataToSend' cannot be used as a function

if (dataToSend() == '4') {

^

DueAck1_Tx:151: error: 'dataToSend' cannot be used as a function

if (dataToSend() == '5') {

^

DueAck1_Tx:154: error: 'dataToSend' cannot be used as a function

if (dataToSend() == '6') {

^

exit status 1
'dataToSend' cannot be used as a function

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

Thanks for the help. Greatly appreciated.

Like it says, dataToSend is NOT a function but an array :slight_smile:

Like I said, it's an array. Make yourself familiar with how to use them. Then the error will be obvious.

Thanks. I have read up on arrays and Im still no closer to a solution.

/*DUE 2.8" TFT 240x320 uno shield ILI9341 multi wire
   EDITED :NO serial monitor print. ONLY print on TFT
  MultiTxAckPayload - the master or the transmitter
  works with two or more(max6) Arduinos as slaves
  each slave use this SimpleRxAckPayload program
  example address {'R','x','A','A','A'}
  and the other unit with {'R','x','A','A','B'}
*/
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#define CE_PIN  50  //nrf24
#define CSN_PIN 51  //nrf24
#include <MCUFRIEND_kbv.h>
#include <Adafruit_GFX.h>
#include <TouchScreen.h>
MCUFRIEND_kbv tft;

#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0
#define LCD_RESET A4

#define TS_MINX 167   //
#define TS_MINY 228   //
#define TS_MAXX 880   //
#define TS_MAXY 860   //

#define YP A2  // must be an analog pin, use "An" notation!
#define XM A3  // must be an analog pin, use "An" notation!
#define YM 8   // can be a digital pin
#define XP 9   // can be a digital pin

#define BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF
#define LIGHTGREY 0xDEDB
#define GREY    0xCE79

#define MINPRESSURE 10
#define MAXPRESSURE 1000

TouchScreen ts = TouchScreen(XP, YP, XM, YM, 365); //.......p0
int X, Y, Z;

const byte numSlaves = 6;   //indicates number of slaves see addresses below in { }
const byte slaveAddress[numSlaves][5] = {
  {'R', 'x', 'A', 'A', 'A'}, //need address for each slave 1
  {'R', 'x', 'A', 'A', 'B'}, //need address for each slave 2
  {'R', 'x', 'A', 'A', 'C'}, //need address for each slave 3
  {'R', 'x', 'A', 'A', 'D'}, //need address for each slave 4
  {'R', 'x', 'A', 'A', 'E'}, //need address for each slave 5
  {'R', 'x', 'A', 'A', 'F'}  //need address for each slave 6
};

RF24 radio(CE_PIN, CSN_PIN);            // Create a Radio

char dataToSend[32] = " Unit  ";        //this [32] must match dataReceived from Rx
char txNum = '0';                       //must stay zero. keeps track of data sending
float ackData[2] = { -11.11, -11.11};   // to hold the two values coming from the slave
bool newData = false;

unsigned long currentMillis;
unsigned long prevMillis;
unsigned long txIntervalMillis = 1000;    // send request 1ce per second

//===============

void setup() {

  Serial.begin(9600);
  //Serial.println("SimpleTxAckPayload Starting");
  radio.begin();
  radio.setDataRate( RF24_250KBPS );
  radio.enableAckPayload();
  radio.setRetries(10, 8); // delay, count
  tft.reset();
  uint16_t identifier = tft.readID();
  tft.begin(identifier);
  tft.setRotation(2);  //screen, power supply port is bottom right
}

//=============

void loop() {

  currentMillis = millis();
  if (currentMillis - prevMillis >= txIntervalMillis) {
    send();
  }

}

//================

void send() {

  for (byte n = 0; n < numSlaves; n++) {    // call each slave in turn

    // open the writing pipe with the address of a slave
    radio.openWritingPipe(slaveAddress[n]);

    // include the slave number in the message
    dataToSend[5] = n + '1';       //start 'unit no' at one

    bool rslt;
    rslt = radio.write( &dataToSend, sizeof(dataToSend) );
    // Always use sizeof() as it gives the size as the number of bytes.
    // For example if dataToSend was an int sizeof() would correctly return 2

    //Serial.print(" Data  ");
    tft.setTextColor(YELLOW);
    tft.setTextSize(1);
    tft.print(dataToSend);   //prints the word Unit1 Unit2 etc
    if (rslt) {
      if ( radio.isAckPayloadAvailable() ) {
        radio.read(&ackData, sizeof(ackData));
        newData = true;
      }
      else {
        tft.print("  Acknowledge but no data ");
      }
      updateMessage();
    }
    else {
      tft.print("  Tx failed");
    }
    showData();
  }

  prevMillis = millis();
}


//=================

void showData() {
  if (newData == true) {
    // Serial.print("  Acknowledge data ");
    tft.fillScreen(LIGHTGREY);
    tft.setCursor(10, 10);            //L Right,U Down
    tft.setTextColor(YELLOW);
    tft.setTextSize(1);
    tft.println(ackData[0]);
    tft.println(" , ");
    tft.println(ackData[1]);
    tft.println("\n");
    newData = false;
  }
}

//================

void updateMessage() {
  // so you can see that new data is being sent
  txNum += 1;
  if (txNum > '9') {
    txNum = '0';
  }
  dataToSend[8] = txNum;
}

I changed the code slightly and the text/unit numbers/data is printed next too one another with the screen clearing every 2 sec.

Ive tried a few other combos of coding but are unable to fix it.

Any pro's out their that want to guide me in the correct direction please?

Thanks

You changed the code, now it does compile? If so, the problem completely changed...

NOTE, coding is NOT about whacking random bits of the internet together! It DOES require you to learn.

I'm back, still no joy. Tried this below. I manage to get 6 samples but it prints the next set below the
previous until it off the screen.

/*DUE 2.8" TFT 240x320 uno shield ILI9341 multi wire
   EDITED :NO serial monitor print. ONLY print on TFT
  MultiTxAckPayload - the master or the transmitter
  works with two or more(max6) Arduinos as slaves
  each slave use this SimpleRxAckPayload program
  example address {'R','x','A','A','A'}
  and the other unit with {'R','x','A','A','B'}
*/
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#define CE_PIN  50  //nrf24
#define CSN_PIN 51  //nrf24
#include <MCUFRIEND_kbv.h>
#include <Adafruit_GFX.h>
#include <TouchScreen.h>
MCUFRIEND_kbv tft;

#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0
#define LCD_RESET A4

#define TS_MINX 167   //
#define TS_MINY 228   //
#define TS_MAXX 880   //
#define TS_MAXY 860   //

#define YP A2  // must be an analog pin, use "An" notation!
#define XM A3  // must be an analog pin, use "An" notation!
#define YM 8   // can be a digital pin
#define XP 9   // can be a digital pin

#define BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF
#define LIGHTGREY 0xDEDB
#define GREY    0xCE79

#define MINPRESSURE 10
#define MAXPRESSURE 1000

TouchScreen ts = TouchScreen(XP, YP, XM, YM, 365); //.......p0
int X, Y, Z;

const byte numSlaves = 6;   //indicates number of slaves see addresses below in { }
const byte slaveAddress[numSlaves][5] = {
  {'R', 'x', 'A', 'A', 'A'}, //need address for each slave 1
  {'R', 'x', 'A', 'A', 'B'}, //need address for each slave 2
  {'R', 'x', 'A', 'A', 'C'}, //need address for each slave 3
  {'R', 'x', 'A', 'A', 'D'}, //need address for each slave 4
  {'R', 'x', 'A', 'A', 'E'}, //need address for each slave 5
  {'R', 'x', 'A', 'A', 'F'}  //need address for each slave 6
};

RF24 radio(CE_PIN, CSN_PIN);            // Create a Radio

char dataToSend[32] = "Unit: ";        //this [32] must match dataReceived from Rx
char txNum = '0';                       //must stay zero. keeps track of data sending
float ackData[2] = { -11.11, -11.11};   // to hold the two values coming from the slave
bool newData = false;

unsigned long currentMillis;
unsigned long prevMillis;
unsigned long txIntervalMillis = 1000;    // send request every second

//===============

void setup() {

  Serial.begin(9600);
  //Serial.println("SimpleTxAckPayload Starting");
  radio.begin();
  radio.setDataRate( RF24_250KBPS );
  radio.enableAckPayload();
  radio.setRetries(10, 8); // delay, count
  tft.reset();
  uint16_t identifier = tft.readID();
  tft.begin(identifier);
  tft.setRotation(2);  //screen, power supply port is bottom right
  tft.fillScreen(LIGHTGREY);  //not working here Print 1 samples,clear,
  // 1 sample below,clear, off the screen
}

//=============

void loop() {
  //tft.fillScreen(LIGHTGREY);   //not working corectly here. Print a sample,clear screen,print 
  // sample below, clear screen, next sample is of the screen
  currentMillis = millis();
  if (currentMillis - prevMillis >= txIntervalMillis) {
    send();
  }
}

//================

void send() {

  for (byte n = 0; n < numSlaves; n++) {    // call each slave in turn

    radio.openWritingPipe(slaveAddress[n]);

    // include the slave number in the message
    dataToSend[5] = n + '1';       //start 'unit no' at one
    bool rslt;
    rslt = radio.write( &dataToSend, sizeof(dataToSend) );
    
    //tft.fillScreen(LIGHTGREY);   //not working corectly here. Print a single line, then clear,
    // this will continue till its at bottom off the screen
    //tft.setCursor(10, 10);            // NOT working here
    tft.setTextColor(GREEN);
    tft.setTextSize(1);
    tft.print(dataToSend);   //prints everyting BUT the values
    if (rslt) {
      if ( radio.isAckPayloadAvailable() ) {
        radio.read(&ackData, sizeof(ackData));
        newData = true;
      }
      else {
        tft.println(" Acknowledge but no data ");
      }
      updateMessage();
    }
    else {
      tft.println(" Tx failed");
    }
    showData();
    tft.print("\n"); //unit no
  }
  prevMillis = millis();
}


void showData() {
  if (newData == true) {
    // Serial.print("  Acknowledge data ");
    //tft.setCursor(100, 10);            //L Right,U Down  not working here
    tft.setTextColor(YELLOW); // the values ONLY
    tft.setTextSize(1);
    tft.print(ackData[0]);  // the values ONLY
    tft.print("\ , ");
    tft.println(ackData[1]);  // the values ONLY
    tft.println();
    newData = false;
    tft.fillScreen(LIGHTGREY);  //not working corectly here.print a sample,clear,
    // print another sample below, clear,off the screen
  }
}

//================

void updateMessage() {
  // so you can see that new data is being sent
  txNum += 1;
  if (txNum > '9') {
    txNum = '0';
  }
  dataToSend[8] = txNum;
}

Its like its on auto scrolling without the scrolling code.

Yes, that is what println() does... If you don't want it to go off the screen, set the cursor back to a position that IS on the screen...

There is no auto scrolling, you're just filling a screen with lines of text, top to bottom.

If you read the posted code you will see that I placed the cursor at

    //tft.setCursor(10, 10);  // NOT working here. No scrolling. Print 
    // everything on same line

142 views and no response from any body else. Must be something that is really difficult to solve.

If you read the posted code you will see that I placed the cursor at

That code is commented out, so it is NOT placing any cursor anywhere.

142 views and no response from any body else.

There is no reason for anyone else to post a response, while we are waiting for you to post data you should have posted in the first place.

No, most part is that the original problem is solved and you're not very good at explaining what you do want...

Like I said, there is NO scrolling. If you want it to scroll, you have to make that. Ever println() just print a line of text after the last. And if you change the cursor the next print() or println() will just start at that point. If you want scrolling you have to do that by printing everything on the screen but shifted up a bit.

//UNO
// SimpleRxAckPayload- the slave or the receiver
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

#define CE_PIN 6  //confirm pin connections for nrf
#define CSN_PIN 7

const byte thisSlaveAddress[6] = {'R','x','A','A','F'};//unique for each unit A=0 B=1 C=2 D=3 E=4 F=5

RF24 radio(CE_PIN, CSN_PIN);

char dataReceived[32]; // this must match dataToSend in the TX
float ackData[2] = {11.00, -20.00}; // the two values to be sent to the master
bool newData = false;

//==============

void setup() {

    Serial.begin(9600);

    Serial.println("SimpleRxAckPayload Starting");
    radio.begin();
    radio.setDataRate( RF24_250KBPS );
    radio.openReadingPipe(1, thisSlaveAddress);

    radio.enableAckPayload();
    radio.writeAckPayload(1, &ackData, sizeof(ackData)); // pre-load data

    radio.startListening();
}

//==========

void loop() {
    getData();
    showData();
}

//============

void getData() {
    if ( radio.available() ) {
        radio.read( &dataReceived, sizeof(dataReceived) );
        updateReplyData();
        newData = true;
    }
}

//================

void showData() {
    if (newData == true) {
        Serial.print("Data received ");
        Serial.println(dataReceived);
        Serial.print(" ackPayload sent ");
        Serial.print(ackData[0]);
        Serial.print(", ");
        Serial.println(ackData[1]);
        newData = false;
    }
}

//================

void updateReplyData() {
    ackData[0] += 0.01;
    ackData[1] -= 0.01;
    if (ackData[0] < 11.00) {
        ackData[0] = 11.09;
    }
    if (ackData[1] < -20.09) {
        ackData[1] = -20.00;
    }
    radio.writeAckPayload(1, &ackData, sizeof(ackData)); // load the payload for the next time
}

The number above 11.00 and -20.00 should be returned for 6 units. Each time adding or subtracting 0.01.

The number above 11.00 and -20.00 should be returned for 6 units. Each time adding or subtracting 0.01.

OK. So, what ACTUALLY happens? Geez, getting useful information from you is damned near impossible.

Currently it prints 3 full sample sets below one another then the next set is off the screen. One set is desirable at the set cursor co ordinates.

Ive tried to set the cursor but then the sample set is printed all on the same line, on top of one another.

A set should look something like this

Unit:1 Tx fail
Unit:2 11.00 -20.09
Unit:3 Tx fail
Unit:4 Tx fail
Unit:5 11.03 -20.06
Unit:6 Tx fail
[code]

[/code]

Ive tried to set the cursor

Please tell us where the code in replay #13 does ANYTHING with a tft.

Ive tried to set the cursor but then the sample set is printed all on the same line, on top of one another.

If you call setCursor() at some point, and 6 lines get printed on top of each other, that suggests that you are calling it in a loop, when you should be calling it BEFORE the loop.

Information is slow because Ive got this mandatory 5min waiting period before I can reply/ re post.

#13 is the Rx code. The Tx #2 send the request for data and the code in #13 respond with the 2 numbers.

The Tx request 6 replies from 6 units. That is to be printed on the TFT screen- as explained above.

I agree with you- the set cursor is in a loop. The same with the fillScreen. If I move any of it the result change a lot.

You need to put one of the devices away, for a while. Get the one with the TFT attached to print ANY 6 lines of data WHEREVER YOU WANT, HOWEVER YOU WANT.

ONLY when that works should you try to print specific bits of data.

Right now, you don't seem to be able to get 6 lines of text to appear on the TFT in the proper relationship, but you keep posting code that does way more that should be necessary to illustrate the problem, with some of the code commented out. THAT is not the best approach.

The code Ive posted with 'all the // and comments' is to show others what I've tried. It also assist me by keeping track of the changes and what each change did.

Disconnecting the other unit causes the TFT screen to fill up with 3 sets. (as described earlier) Like you said- as if its in a loop.