Función según string

Hola, trato de hacer un programa, que según el dato que reciba por puerto serie actuará sobre uno u otro relé.
El dato a enviar puede ser ireledosf, o ireletresf, así, cuando se reciba reledos actuará sobre el relé 2, y si es reletres, sobre el relé 3.
Sin embargo, no consigo que con ese dato pueda ejecutar la función.
Me da error de string y char, sé que no son compatibles, pero no sé cómo leer esa cadena para que se inicie la función.

#define RELE_PIN3 8 
#define RELE_PIN2 9
void setup() {
  
  pinMode(RELE_PIN2,OUTPUT);
  digitalWrite (RELE_PIN2, HIGH);
  pinMode(RELE_PIN3,OUTPUT);
  digitalWrite (RELE_PIN3, HIGH);

Serial.begin(9600);
}

void loop() {
    if (Serial.available()) { 

    if (Serial.read ()=='i') {
      String dato = Serial.readStringUntil('f');
      if (Serial.read() == 'f');
      { funcion (dato);

}}}}

void funcion ( String dato) {
    if (dato == 'reletres') {
    digitalWrite (RELE_PIN3, LOW);
    }
    else if (dato == 'reledos') {
    digitalWrite (RELE_PIN2, LOW);
    }   
    else {
    digitalWrite (RELE_PIN2, HIGH);
    digitalWrite (RELE_PIN3, HIGH);
}}

Debes usar string.equals en las comparaciones de strings

string.equals(string2)

Ahora tu método es complicado. comparas i, comparas f, y ademas comparas el interior.

A ver esta versión?

deja solo dos o tres y suficiente y espera retorno de carro o line feed = 0x0A o '\n'

He hecho las modificaciones, pero me sigue dando error.

#define RELE_PIN3 8
#define RELE_PIN2 9
void setup() {
 
  pinMode(RELE_PIN2,OUTPUT);
  digitalWrite (RELE_PIN2, HIGH);
  pinMode(RELE_PIN3,OUTPUT);
  digitalWrite (RELE_PIN3, HIGH);

Serial.begin(9600);
}

void loop() {
    if (Serial.available()) {

    if (Serial.read ()=='i') {
      String dato = Serial.readStringUntil('f');
      if (Serial.read() == 'f');
      { funcion (dato);

}}}}

void funcion ( String dato) {
    string.equals(dato,reletres);
    digitalWrite (RELE_PIN3, LOW);
    
    string.equals(dato,reledos);
    digitalWrite (RELE_PIN2, LOW);
     
    digitalWrite (RELE_PIN2, HIGH);
    digitalWrite (RELE_PIN3, HIGH);
}

Intenta concentrarte en el problema de reconocer la orden y deja de lado todo lo demás.

Mira el ejemplo readStringUntil

Y además de que equals retorna boolean; o sea, se usa en la condición de un if o while.

Vale, creo que me voy acercando, aunque sigo con errores.

void setup() {
 
  #define RELE_PIN3 8
  #define RELE_PIN2 9

Serial.begin(9600);
}

void loop() {
    if (Serial.available()) {

    if (Serial.read ()=='i') {
      String dato = Serial.readStringUntil('f');
      if (Serial.read() == 'f');
      }}
      

   if (string.equals(dato,reletres) == true){
    digitalWrite (RELE_PIN3, LOW);
   }
   else if (string.equals(dato,reledos) == true){
    digitalWrite (RELE_PIN2, LOW);
   }
   else {  
    digitalWrite (RELE_PIN2, HIGH);
    digitalWrite (RELE_PIN3, HIGH);
   }}

esto

if (string.equals(dato,reletres) == true){

es lo mismo que poner esto

if (string.equals(dato,reletres)){

aunque no cambia tu problema

Vamos de nuevo
reletres es una cadena!! si no la pones entre comillas no la toma, la busca como variable!!!

debe ser asi

 if (string.equals(dato,"reletres")){

Pues aún haciendo las correcciones indicadas, me reporta esto:

sketch_dec28a.ino: In function ‘void loop()’:
sketch_dec28a.ino:18:8: error: ‘string’ was not declared in this scope
sketch_dec28a.ino:18:22: error: ‘dato’ was not declared in this scope

Hola,
String es con la S mayúscula y dato como lo declaras dentro del if una vez que el if finaliza la variable se destruye.

Te sugiero que busques un ejemplo de Serial.readStringUntil()
Prueba y vuelve a comenzar