Retorno del tipo de dato

Hola! Buenas noches!

Tengo una consulta, estuve varias horas buscando soluciones.

Tengo una sentencia de IF:

if (typeid (Wire.read()) == "bool") {

Lo que quiero hacer es comparar si lo que estoy leyendo es un boleano o un entero.
No encuentro la forma de hacerlo.

No puede usar typeid

Para usarla debes tener habilitada la libreria RTTI, que por defecto en el IDE de arduino está deshabilitada. Ten en cuenta que esta libreria absorve muchos recursos como para usarla en un arduino con recursos muy limitados.

Seguro que hay forma de habilitarlo, pero quizás no sea recomendable.

No sabemos el contexto del programa, pero parece que estas intentando crear una especie de "protocolo". Mi sugerencia es que el primer byte que leas te indice que tipo es, y con los siguientes que leas obtengas el dato (del tamaño del primer byte leido).

Lo que quiero hacer, es comunicar dos arduinos por I2C. Cuando el maestro envie la infomarcion, descriminar si es un numero (la temperatura que setea al esclavo) o si es la función de interruptor (prender o apagar).

Pero desde el vamos trate de buscar si hay alguna forma de ver si reconoce que tipo de datos recibo. y no la encuentro.

Otro dato, estoy usando la plataforma web de Arduino para programar., así que por lo que me decís, menos aun me sirve typeid.

Habrá alguna otra función?

victorjam:
. Mi sugerencia es que el primer byte que leas te indice que tipo es, y con los siguientes que leas obtengas el dato (del tamaño del primer byte leido).

Como sería la función que lea el tipo de byte?
No sería lo mismo que quiero hacer yo?

Y no es mas fácil ponerle etiquetas previas a la cadena enviada y de ese modo tu puedas identificar lo que se está recibiendo?

Quiero dejar una cosa clara: Wire solo lee y manda bytes., cualquier tipo de dato diferente tendrá que ser "parseado", es decir, convertido a bytes, y enviar/leer esos bytes uno a uno.

Asi que el maestro debe distingir si es un comando o un dato, para ello usamos dos valores diferentes:

const byte esDato = 1;
const byte esComando = 2;

int temperatura;

void enviarTemperatura() {
  Wire.beginTransmission(idEsclavo);
  Wire.write(esDato); // indicamos que es un dato.
  Wire.write(highByte(temperatura)); // Enviamos la temperatura.
  Wire.write(lowByte(temperatura));
  Wire.endTransmission();
}

void enviarComando(bool accion) {
  Wire.beginTransmission(idEsclavo);
  Wire.write(esComando); // indicamos que es comando.
  Wire.write((byte)accion);
  Wire.endTransmission();
}

Y el esclavo tiene que determinar que hacer con lo que recibe en el evento:

void receiveEvent(int howMany) {
  // Leemos el primer byte.
  byte tipo = wire.read();
  if ( tipo == esDato ) {
    // es un dato asi que debemos leer dos bytes.
    byte a = wire.read();
    byte b = wire.read();
    temperatura = (int)(a<<8 | b); // montamos el word.
  } 
  else
  if ( tipo==esComando ) {
    bool accion c = (bool)wire.read(); // Leemos la accion que es un byte y lo convertimos a bool.
    if ( accion==true ) digitalWrite(pin, 1);
    else digitalWrite(pin,2);
  }

Es un ejemplo, de como hacerlo, no he comprobado errores ni nada, simplemente para que se vea lo que hay que hacer.

Perfecto! lo voy a probar

De todo esto me surge una duda, en el caso de la temperatura, como es para una heladera, como maneja los valores negativos en grados centígrados?