Cac/arduino/rele/rele.ino
2017-02-09 12:02:32 +01:00

111 lines
2.5 KiB
C++

#include <SoftwareSerial.h>
#define RELAY1 8
SoftwareSerial mySerial(4, 2); // RX, TX (seriale su cui e' settato il bluetooth)
char statoRele = 'n'; // salviamo lo stato del rele
char blueToothVal; //value sent over via bluetooth
int contatoreSecondi = 0;
const int buttonPin = 11; //pin del pulsante
int buttonState = 0; // stato del pulsante
const int ledPin = 13; //pin del led stato caldaia
void startCaldaia(){
digitalWrite(ledPin,HIGH); //accendo il led
digitalWrite(RELAY1,HIGH); //accendo il rele
statoRele = '1';
}
void stopCaldaia(){
digitalWrite(ledPin,LOW); //spengo il led
digitalWrite(RELAY1,LOW); //spengo il rele
statoRele = '0';
}
void setup() {
// Open serial communications:
Serial.begin(9600);
Serial.println("Type AT commands!");
// The HC-06 defaults to 9600 according to the datasheet.
mySerial.begin(9600);
pinMode(ledPin,OUTPUT); //il led
pinMode(RELAY1, OUTPUT); //il rele
pinMode(buttonPin, INPUT); //pulsante
contatoreSecondi = 0;
}
void loop() {
//Si autospegne se non riceve alcun messaggio per un ora
if (contatoreSecondi > 7200){
stopCaldaia();
blueToothVal=' ';
}
// Legge l'input dal raspeberry
if (mySerial.available()){
blueToothVal=(char)mySerial.read();
}
String stringContatore;
switch (blueToothVal) {
case '0'://se ricevo 0 lo spengo
stopCaldaia();
mySerial.write('0\n');
blueToothVal=' ';
contatoreSecondi = 0;
break;
case '1'://se ricevo 1 lo accendo
startCaldaia();
mySerial.write('1\n');
blueToothVal=' ';
contatoreSecondi = 0;
break;
case 's'://richiedo lo stato e azzero il contatore
mySerial.write(statoRele); //mando lo stato
mySerial.write("\n");
blueToothVal=' ';
contatoreSecondi = 0;
break;
case 't'://info sul contatore
stringContatore = String(contatoreSecondi);
char charBuf[50];
stringContatore.toCharArray(charBuf, 50);
strcat(charBuf, "\n");
mySerial.write(charBuf); //mando lo stato
break;
default:
// if nothing else matches, do the default
// default is optional
break;
}
//Parte pulsante
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
if(statoRele=='0'){
startCaldaia();
blueToothVal=' ';
contatoreSecondi = 0;
}else{
stopCaldaia();
blueToothVal=' ';
contatoreSecondi = 0;
}
}
//fine parte pulsant
delay(1000);
contatoreSecondi += 1;
}