Problema al leer datos por puerto serie

Buenas a todos, estoy intentando terminar un proyecto en arduino y necesito leer ciertas ordenes que le mando por el pc al arduino, me da el siguiente error: conversion from 'void' to non-scalar type 'String' requested la verdad esque googleando no he encontrado gran cosa... Pero de todo lo que he leido he pensado en que una posible causa sea que me falta la libreria String, o que falla algo al convertir los codigos ascii de decimal a char. Aqui les dejo el codigo para que le echen un ojo:

#include "WString.h"

const int pinLM35Interior = 0;
const int pinLM35Exterior = 1;
const int pinVentiladorPeltier = 7;
const int pinPeltier1 = 2;
const int pinPeltier2 = 4;

const int tempReferencia = 25;
/*
int tempC1, tempC2 = 0;
const long tiempoActualizaTemperatura = 10000;
unsigned long tiempoTranscurrido;
long anteriorMilis = 0;
*/
boolean finOrden=false;
int numPalabras=1;
int asciiLeido=0;
char letraLeida=0;
String palabra="";
String orden1="";
String orden2="";
String orden3="";

void setup(){
  Serial.begin(9600);
  pinMode(pinLM35Interior, INPUT);
  pinMode(pinLM35Exterior, INPUT);
  pinMode(pinPeltier1, OUTPUT);
  pinMode(pinPeltier2, OUTPUT);
}

void loop(){
  //tiempoTranscurrido = millis();
  //if(tiempoTranscurrido-anteriorMilis>tiempoActualizaTemperatura){
    //tempC1=calcularTemperatura();
    //}
    while(Serial.available()>0){
      orden1=leerPalabra();
      if(numPalabras==2){
        orden2=leerPalabra();
      }else if(numPalabras==3){
        orden3=leerPalabra();
      }
      if(finOrden==true){
        iterpretarOrden(orden1, orden2, orden3);
        orden1="";
        orden2="";
        orden3="";
        numPalabras=1;
      }
    }
}

int calcularTemperaturaInt(){
  //Calcular temperatura con un LM35:
  return (analogRead(pinLM35Interior))*500/1024;;
}

int calcularTemperaturaExt(){
  //Calcular temperatura con un LM35:
  return (analogRead(pinLM35Exterior))*500/1024;;
}
  
void mostrarTemperaturaSerial(int temp){
  Serial.println("Temperatura: ");
  Serial.print(temp);
  Serial.println(" grados C");
}  
  
void controlTemperatura(int temp){
    if(temp>=tempReferencia + 3){                      //Histeresis de 3ºC
    digitalWrite(pinVentiladorPeltier, HIGH);
    if(digitalRead(pinPeltier1)==HIGH){                //Enfriar
      digitalWrite(pinPeltier1, LOW);
      digitalWrite(pinPeltier2, HIGH);
    }
  }else if(temp<=tempReferencia-3){
     digitalWrite(pinVentiladorPeltier, HIGH);         //Calentar
     if(digitalRead(pinPeltier2)==HIGH){
      digitalWrite(pinPeltier1, HIGH);
      digitalWrite(pinPeltier2, LOW);
     }
  }else if(temp==tempReferencia){
    digitalWrite(pinVentiladorPeltier, HIGH);          //Apagar
    digitalWrite(pinPeltier1, LOW);          
    digitalWrite(pinPeltier2, LOW);
  }
}

String leerPalabra(){
  palabra="";
  while(Serial.available()>0){
    asciiLeido=Serial.read();
    if(asciiLeido!=10 && asciiLeido!=13 && asciiLeido!=32){    //13=retorno de carro, 10=salto de linea , 32=espacio
      palabra=palabra+asciiLeido;
    }else if(asciiLeido==32){                                  //Si hay un espacio devuelve la plabra en mayusculas y aumenta numPalabras
      numPalabras++;
      return palabra.toUpperCase();                       // <--------------------- El error salta aqui
    }else if(asciiLeido==10){                                  //Si presionamos enter ya no hay mas que leer y devuelve la palabra en mayusculas
      finOrden=true;
      Serial.flush();
      return palabra.toUpperCase();                       // <--------------------- Y aqui
    }
  }
}

void iterpretarOrden(String palabra1, String palabra2, String palabra3){
  if(palabra1=="MOSTRAR"){
    if(palabra2=="TEMPERATURA"){
      if(palabra3=="EXTERIOR"){
        mostrarTemperaturaSerial(calcularTemperaturaExt());
      }else if(palabra3=="INTERIOR"){
        mostrarTemperaturaSerial(calcularTemperaturaInt());
      }
    }else if(palabra2=="HUMEDAD"){
      //mostrarHumedadSerial(calcularHumedad());
    }
  }
}

Muchas gracias a todos.