Problema con HC06

Ciao a tutti, vi posto il mio codice

#include <SoftwareSerial.h>
#include <dht11.h>

// VARIABILI COMUNI PER ANTIRIMBALZO ---------------------------------------------------------
int attesaDebounce = 50;
//-----------------------------------------------------------------------
// LOCALE CUCINA ---------------------------------------------------------
const int pulsanteCucina = 42, releCucina = 48; //pin
//Variabili per antirimbalzo
int cucina_pulsanteStato, cucina_ultimaLettura = LOW;
unsigned long cucina_ultimoTempoDebounce = 0;
//-----------------------------------------------------------------------
// LOCALE SALA ---------------------------------------------------------
const int pulsanteSala = 43, releSala = 49; //pin
//Variabili per antirimbalzo
int sala_pulsanteStato, sala_ultimaLettura = LOW;
unsigned long sala_ultimoTempoDebounce = 0;
//-----------------------------------------------------------------------
// SENSORE TEMPERATURA DHT -----------------------------------------------
dht11 DHT;
const int pinSensTemp = 11;
long sensTempo = millis();
int tempInt;
//-----------------------------------------------------------------------
// CONDIZIONATORE -----------------------------------------------
int tempImp = 15;
int pinCond = 6;
//-----------------------------------------------------------------------

int input;
SoftwareSerial bluetooth(2, 3);

void setup() {
  Serial.begin(9600); //set baud rate
  bluetooth.begin(9600); //set baud rate
  pinMode(releCucina, OUTPUT);
  pinMode(releSala, OUTPUT);
  pinMode(pulsanteCucina, INPUT);
  pinMode(pulsanteSala, INPUT);
  pinMode(pinCond , OUTPUT);
  digitalWrite(releCucina, LOW);

  inizializzaSpie();
  inizializzaTemperatura();

}

void loop() {

  if (bluetooth.available()) {
    input = bluetooth.read();
    switch (input) {

      case 'M':
        digitalWrite(releCucina, !digitalRead(releCucina));
        if (digitalRead(releCucina) == HIGH)
          bluetooth.write("*LR0G247B0*");
        else
          bluetooth.write("*LR255G0B0*");
        break;

      case 'Y':
        digitalWrite(releSala, !digitalRead(releSala));
        if (digitalRead(releSala) == HIGH)
          bluetooth.write("*KR0G247B0*");
        else
          bluetooth.write("*KR255G0B0*");
        break;

      case 'U':
        if (tempImp < 35) {
          tempImp++;
          bluetooth.print("*Q");
          bluetooth.print(tempImp);
          bluetooth.print("*");
          bluetooth.print("*W");
          bluetooth.print(tempImp);
          bluetooth.print("*");
        }
        break;

      case 'P':
        if (tempImp > 15) {
          tempImp--;
          bluetooth.print("*Q");
          bluetooth.print(tempImp);
          bluetooth.print("*");
          bluetooth.print("*W");
          bluetooth.print(tempImp);
          bluetooth.print("*");
        }
        break;
    }//chiusura switch
  }//chiusura if


  //Accensione mediante pulsante fisico
  leggiPulsCucina();
  leggiPulsSala();
  if (millis() > sensTempo + 2000) {
    tempInt = leggiSensTemp();
    Serial.println(tempInt);
    condizionatore();
    sensTempo = millis();
  }

}

void inizializzaSpie() {
  bluetooth.write("*LR255G0B0*");
  bluetooth.write("*KR255G0B0*");
}

void leggiPulsCucina() {
  int lettura = digitalRead(pulsanteCucina);
  if (lettura != cucina_ultimaLettura)
    cucina_ultimoTempoDebounce = millis();
  if ((millis() - cucina_ultimoTempoDebounce) > attesaDebounce) {
    if (lettura != cucina_pulsanteStato and lettura == HIGH) {
      digitalWrite(releCucina, !digitalRead(releCucina));
      if (digitalRead(releCucina) == HIGH)
        bluetooth.write("*LR0G247B0*");

      else
        bluetooth.write("*LR255G0B0*");
    }
    cucina_pulsanteStato = lettura;
  }
  cucina_ultimaLettura = lettura;
}

void leggiPulsSala() {
  int lettura = digitalRead(pulsanteSala);
  if (lettura != sala_ultimaLettura)
    sala_ultimoTempoDebounce = millis();
  if ((millis() - sala_ultimoTempoDebounce) > attesaDebounce) {
    if (lettura != sala_pulsanteStato and lettura == HIGH) {
      digitalWrite(releSala, !digitalRead(releSala));
      if (digitalRead(releSala) == HIGH)
        bluetooth.write("*KR0G247B0*");

      else
        bluetooth.write("*KR255G0B0*");
    }
    sala_pulsanteStato = lettura;
  }
  sala_ultimaLettura = lettura;
}

void inizializzaTemperatura() {
  bluetooth.print("*Q");
  bluetooth.print(tempImp);
  bluetooth.print("*");
  bluetooth.print("*W");
  bluetooth.print(tempImp);
  bluetooth.print("*");
}

int leggiSensTemp() {
  int chk, t;

  chk = DHT.read(pinSensTemp);
  t = DHT.temperature;

  bluetooth.print("*D");
  bluetooth.print(t);
  bluetooth.print("*");
  bluetooth.print("*F");
  bluetooth.print(t);
  bluetooth.print("*");

  return t;
}

void condizionatore() {
  if (tempInt > tempImp)
    digitalWrite(pinCond, HIGH);
  else
    digitalWrite(pinCond, LOW);
}

Questo è un codice che dovrebbe simulare una casa domotica comandata anche da cellulare. Su Arduino Uno non ho nessun problema; lo stesso codice su Arduino Mega (clone)da problemi con il modulo HC06 che trasmette ma non riesce a ricevere. Sembra che Arduino non riesca ad entrare nell' if(bluetooth.available()).
Come può essere? Quello che ho fatto io è stato caricare lo stesso codice su Arduino Mega, cambiando ovviamente i numeri dei pin. Ho preferito mettervi il codice intero, così forse rendo meglio l'idea.
Grazie...

Ale_S:
... Su Arduino Uno non ho nessun problema; lo stesso codice su Arduino Mega (clone)da problemi con il modulo HC06 che trasmette ma non riesce a ricevere.

Che numero di pin hai cambiato ? Su quali pin hai messo il modulo BT ? Il codice postato è quello della UNO o della MEGA ? ... visti alcuni pin direi per la MEGA, ma attendo conferma ... ::slight_smile:

Comunque ... se i pin sono quelli della MEGA ... NON mi meraviglia affatto che NON funzoni ...
... vogliamo studiarlo il reference della SoftwareSerial ? ? ? :smiling_imp: :smiling_imp: :smiling_imp:

Guglielmo

Grazie Guglielmo.
Si, il codice è quello del Mega. Ho risolto semplicemente con SoftwareSerial bluetooth(10, 9).

Ale_S:
Ho risolto semplicemente con SoftwareSerial bluetooth(10, 9).

Ovviamente ... come da reference della SoftwareSerial :wink:

Guglielmo

scusa, ma sulla mega perché usi la softseriale visto che di seriali hardware ne ha 4?

-zef-:
scusa, ma sulla mega perché usi la softseriale visto che di seriali hardware ne ha 4?

... in effetti ... ::slight_smile:

Guglielmo