Helping a C noob: "call of overloaded print(byte [12]) is ambiguous"

Hello! yup, i understand that just that little bit isnt enough info, so here's the full error:

In file included from C:\Program Files (x86)\Arduino\libraries\TFT\src/TFT.h:36:0,

                 from C:\Users\mikep\Documents\Arduino\Robot Controll System\TestArduinoAsSlave.ino\TestArduinoAsSlave.ino.ino:2:

C:\Program Files (x86)\Arduino\libraries\TFT\src/utility/Adafruit_GFX.h:60:3: warning: #warning "The SD library was not found. loadImage() and image() won't be supported." [-Wcpp]

  #warning "The SD library was not found. loadImage() and image() won't be supported."

   ^

C:\Users\mikep\Documents\Arduino\Robot Controll System\TestArduinoAsSlave.ino\TestArduinoAsSlave.ino.ino: In function 'void receiveEvent(int)':

TestArduinoAsSlave.ino:115: error: call of overloaded 'print(byte [12])' is ambiguous

   Serial.print(controllArray); //where im getting the "call of overloaded 'print(byte [cmd])' is ambiguous"

                             ^

C:\Users\mikep\Documents\Arduino\Robot Controll System\TestArduinoAsSlave.ino\TestArduinoAsSlave.ino.ino:115:29: note: candidates are:

In file included from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Stream.h:26:0,

                 from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/HardwareSerial.h:29,

                 from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:232,

                 from sketch\TestArduinoAsSlave.ino.ino.cpp:1:

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:59:12: note: size_t Print::print(const String&) <near match>

     size_t print(const String &);

            ^

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:59:12: note:   no known conversion for argument 1 from 'byte [12] {aka unsigned char [12]}' to 'const String&'

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:60:12: note: size_t Print::print(const char*) <near match>

     size_t print(const char[]);

            ^

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:60:12: note:   no known conversion for argument 1 from 'byte [12] {aka unsigned char [12]}' to 'const char*'

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:61:12: note: size_t Print::print(char) <near match>

     size_t print(char);

            ^

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:61:12: note:   no known conversion for argument 1 from 'byte [12] {aka unsigned char [12]}' to 'char'

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:62:12: note: size_t Print::print(unsigned char, int) <near match>

     size_t print(unsigned char, int = DEC);

            ^

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:62:12: note:   no known conversion for argument 1 from 'byte [12] {aka unsigned char [12]}' to 'unsigned char'

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:63:12: note: size_t Print::print(int, int) <near match>

     size_t print(int, int = DEC);

            ^

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:63:12: note:   no known conversion for argument 1 from 'byte [12] {aka unsigned char [12]}' to 'int'

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:64:12: note: size_t Print::print(unsigned int, int) <near match>

     size_t print(unsigned int, int = DEC);

            ^

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:64:12: note:   no known conversion for argument 1 from 'byte [12] {aka unsigned char [12]}' to 'unsigned int'

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:65:12: note: size_t Print::print(long int, int) <near match>

     size_t print(long, int = DEC);

            ^

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:65:12: note:   no known conversion for argument 1 from 'byte [12] {aka unsigned char [12]}' to 'long int'

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:66:12: note: size_t Print::print(long unsigned int, int) <near match>

     size_t print(unsigned long, int = DEC);

            ^

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:66:12: note:   no known conversion for argument 1 from 'byte [12] {aka unsigned char [12]}' to 'long unsigned int'

exit status 1
call of overloaded 'print(byte [12])' is ambiguous

I am attempting to input command to an arduino from an rpi via I2C, Here is my sketch:

#include <Wire.h>
#include <TFT.h>  // Arduino LCD library
#include <SPI.h>


const int heartBeatLED = 5;
const int piScriptLED = 3;
const int piServerLED = 4;

bool heartBeatState = LOW;
bool piScriptState = LOW;
bool piServerState = LOW;

#define cs   10
#define dc   9
#define rst  8
TFT screen = TFT(cs, dc, rst);
char lastText[32] = "I am an Arduino Uno";

byte slave_adress = 5;

/* not implemented
//the who_is_this on the pi will get the iAm variable.
//first number indiacts input(0), output(1) or both(2) 
//last 3 indate unique device id, requires hardcoding
//int iAm = 1000; //example, 1 = output, 000 = device 1
*/

void setup() {
  screen.begin();
  screen.background(0,0,0);
  screen.stroke(255,255,255);
  screen.setTextSize(2);
  screen.text("I2C Comms:", 0,0);
  screen.setTextSize(1);
  screen.text("heartBeat: LOW", 0,30);
    
  pinMode(heartBeatLED, OUTPUT);
  pinMode(piScriptLED, OUTPUT);
  pinMode(piServerLED, OUTPUT);
    
  digitalWrite(heartBeatLED, heartBeatState);
  digitalWrite(piScriptLED, piScriptState);
  digitalWrite(piServerLED, piServerState);

  Serial.begin(9600);
  char lastText[32] = "I am an Arduino Uno";
  putReceiveLineText(lastText);
  
  Wire.begin(slave_adress);
  Wire.onReceive(receiveEvent);
}

void loop() {
  // each charecter is 6 pixles wide(including space)
  //just a heartbeat, so i can check my wires
  if (heartBeatState){
    heartBeatState = LOW;
    screen.stroke(0,0,0);
    screen.text("HIGH", 66,30);
    screen.stroke(255,255,255);
    screen.text("LOW", 66,30);
  }
  else{
    heartBeatState = HIGH;
    screen.stroke(0,0,0);
    screen.text("LOW", 66,30);
    screen.stroke(255,255,255);
    screen.text("HIGH", 66,30);
    }
  digitalWrite(heartBeatLED, heartBeatState);
  
  delay(500);
}

//clears the screen based on a new input message
void putReceiveLineText(char text[32]){
  /* //debugging help
  Serial.print("This Text: ");
  Serial.println(text);
  Serial.print("Last Text: ");
  Serial.println(lastText);
  Serial.print(strlen(text));
   */
  screen.stroke(0,0,0);
  screen.text(lastText, 0,20);
  screen.stroke(255,255,255); 
  screen.text(text, 0,20);
  for (int i=0; i<strlen(text); i++){
      lastText[i] = text[i];
  }
}


void receiveEvent(int howMany){
  int numOfBytes = Wire.available()-1;
  byte cmd = Wire.read(); //how many bits of a transmission are dedicated for output signals
  byte controllArray[12]; //there would only be a maximum of 12 ints/bytes for output pins (2->13)
  char recivingArray[32]; //how many chars are in a transmission
  
  for(int i=0; i<cmd; i++){
    byte data = Wire.read();
    controllArray[i] = data;
    Serial.println(data);
  }

  for(int i=0; i<numOfBytes-cmd; i++){
    char data = Wire.read();
    recivingArray[i] = data;
    Serial.println(data);
  }
  
  //putReceiveLineText(recivingArray);
  Serial.println(" ");
  Serial.print(controllArray); //where im getting the "call of overloaded 'print(byte [cmd])' is ambiguous"
  Serial.print(recivingArray); //this one is ok, though, it will compile fine if i comment the controll array out
  /*
  Serial.println("New Transmission:");
  Serial.print("Length: ");
  Serial.println(numOfBytes);
  Serial.print("Command: ");
  Serial.println(cmd);
  Serial.print("Data: ");
  Serial.println(recivingArray);
  Serial.println("Finished Transmission.");
  Serial.println(" ");
  */
}

Thanks, i program in java and python, so im not a complete noob, but i feel like i have no idea how c works. Thanks for any help!

 byte controllArray[12]; //there would only be a maximum of 12 ints/bytes for output pins (2->13)
  char recivingArray[32];

The arrays are different types , and the library knows how to print an array of char (but be careful that the string is terminated), but it doesn't know how to print an array of byte.

You could simply cast the byte pointer to be a char pointer (but be careful the string is correctly terminated)

alright, so replacing "print(controllArray)" with "print(char(controllArray))" should be OK?

No, you need to cast the pointer"print((char*)controllArray)"
But, like I said, make sure it is a valid string.