errore: call of overloaded 'write(float&)' is ambiguous - come risolverlo

Buongiorno a tutti,
ho un problema con il mio modulo bluetooth HC-05..
Compilando questo sketch:

float h, t;
unsigned long tempoPrecedente = 0;
unsigned long intervallo = 2000;
#include "DHT.h"
#define DHTPIN 7
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHT22);

void setup ()
{
  Serial.begin(9600);
  dht.begin();
  pinMode(DHTPIN, INPUT);
}
void loop ()
{
  unsigned long tempoAttuale = millis();
  if (tempoAttuale - tempoPrecedente >= intervallo)
  {
    tempoPrecedente = tempoAttuale;
    t = dht.readTemperature();
    h = dht.readHumidity();
    if (isnan(h) || isnan(t))
    {
      Serial.println("Errore lettura DHT");
      return;
    }
    if ( Serial.available() )
    {
      char comandoBT = Serial.read();
      if (comandoBT == 'dati')
      {
        Serial.write(t);
        Serial.write("\n");
        Serial.write(h);
        Serial.write("\n");
        Serial.write("\n");
      }
    }
  }
}

mi da questo errore nella stringa n°33 ovvero Serial.write(t);

exit status 1
call of overloaded 'write(float&)' is ambiguous

Io vorrei che con un app collegata tramite bluetooth ad arduino, alla scritta 'dati' corrisponda alla stampa della temperatura e umidità...non capisco dove sbaglio!

... e secondo te quello è un errore dell'HC-05 ? ? ? :o :o :o ... in tutta onestà, e affinche tu possa raggiungere gli obiettivi che ti prefiggi ... sarà il caso che prendi un buon testo di 'C' e studi un po' le basi del linguaggio ::slight_smile:

Guglielmo

P.S.: cambia il titolo al thread, che l'HC-05 non c'entra nulla ...
*P.P.S: ... e studia la differenza tra Serial.write() e Serial.print() ... *

cercando online non trovo nulla a riguardo...

P.S: ho cambiato titolo al post :wink:

Ci sono DUE tipi di errore FONDAMENTALI in quel codice ...

  1. if (comandoBT == 'dati')

  2. Serial.write(t); e Serial.write(h);

... prova a capire perché !

Guglielmo

Scusami, quando io eseguo questo sketch:

    char c = Serial.read();
    if (c == 'accendi')
    {
      digitalWrite(13, HIGH);
      Serial.write("LED aceso\n");
    }
    if (c == 'spegni')
    {
      digitalWrite(13, LOW);
      Serial.write("LED spento\n");

    }

Problemi non me ne da, mi accende tranquillamente il led e stampa nel terminale BT.

L'errore madornale sta nel tipo di variabile scelto..char può contenere solo un carattere...quindi è meglio utilizzare un array:
char comandoBT [10];

per Serial.write(t) e Serial.write(h) so solo che cambiando il tipo di variabile da float a int non mi da più quell'errore

  1. NON PUOI FARE CONFONTI (==) con array di char ... viene confrontato sempre e solo il PRIMO carattere

  2. NON hai capito la differenza tra Serial.print() e Serial.write()

Ripeto che purtroppo ... senza studiare NON si va da nessuna parte ... ::slight_smile:

Guglielmo

Grazie per i consigli...come posso allora fare un confronto di una stringa di caratteri?

Gianky00:
Grazie per i consigli…come posso allora fare un confronto di una stringa di caratteri?

Impara ad usare le funzioni che trovi nella libreria standard (… che, oltretutto, è automaticamente inclusa dal IDE) AVR libc ed, in particolare, quanto è in <string.h>

Guglielmo

P.S.: … suggerimento … in <string.h> studia la strcmp()