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...