Boa noite senhores, recentemente criei um post com meu código para automação residencial.
Agora é o seguinte, só falta uma penúltima etapa para terminar o código, que é separar as funções de acender/apagar lâmpadas, alarmes, sensores, em vários módulos slaves, de acordo com os cômodos da casa.
Reparem então no código principal, que tem todas as funções no mesmo arduino
#include <SPI.h>
#include <String.h>
#include <Ethernet.h>
byte mac[] = { 0x01,0x23,0x45,0x67,0x89,0xAB }; // Endereço Mac
byte ip[] = { 192, 168, 0, 50 }; // Endereço de Ip da sua Rede
EthernetServer server(80); // Porta de serviço
String readString = String(30); // string para buscar dados de endereço
boolean statusFiltro = false; // Variável para o status do led
boolean statusAlarme = false; // Status do meu alarme
/*
##########################
------Boolean Luzes-------
##########################
*/
boolean SL1C = false;
/*
##########################
------Boolean Luzes-------
##########################
*/
float temperatura = 0;
float ldr = 0;
int pin2 = 13;
//Definição dos componentes do alarme
int pinBuzzer = 7;
int pinSensorPIR = 8;
int pinLed = 9;
int valorSensorPIR = 0;
void setup(){
// Inicia o Ethernet
Ethernet.begin(mac, ip);
// Define o pino como saída
// Inicia a comunicação Serial
Serial.begin(9600);
pinMode(pinBuzzer, OUTPUT);
pinMode(pinSensorPIR, INPUT);
pinMode(pinLed, OUTPUT);
}
void loop(){
// Criar uma conexão de cliente
valorSensorPIR = digitalRead(pinSensorPIR); // Configuração do sensor
Serial.print("Valor do Sensor PIR: ");
Serial.println(valorSensorPIR);
delay(300);
EthernetClient client = server.available();
int valorLido = analogRead(0);
temperatura = (valorLido/31);
int valorLdr = analogRead(1);
ldr = (valorLdr);
if (client) {
while (client.connected())
{
if (client.available())
{
char c = client.read();
// ler caractere por caractere vindo do HTTP
if (readString.length() < 30)
{
// armazena os caracteres para string
readString += (c);
}
//se o pedido HTTP terminou
if (c == '\n')
{
Serial.print("Mensagem recebida: ");
Serial.println(readString);
if(readString.indexOf("lAlarme")>=0){ // Se o comando lAlarme for recebido ele muda o status e faz a função ligarAlarme
Serial.println("Alarme ACTIVADO.");
statusAlarme = true;
}
if(readString.indexOf("dAlarme")>=0){ // Se receber o comando dAlarme, apenas muda o status e desliga o alarme
Serial.println("Alarme DESACTIVADO.");
statusAlarme = false;
desligarAlarme();
}
if(readString.indexOf("lFiltro")>=0){
statusFiltro = true;
}
if(readString.indexOf("dFiltro")>=0){
statusFiltro = false;
}
if(readString.indexOf("L1C")>=0){ //COMANDO QUE QUERO USAR NO SLAVE
if(SL1C){
digitalWrite(pin2, LOW);
SL1C = false;
}else{
digitalWrite(pin2, HIGH);
SL1C = true;
}
}
// dados HTML de saída começando com cabeçalho padrão
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
client.print("<font size='20'>");
// separa as linhas
if(statusAlarme){
client.print("AlarmeOn");
}else{
client.print("AlarmeOff");
}
client.print("<P>");
if(statusFiltro){
client.print("FiltroOn");
}else{
client.print("FiltroOff");
}
client.print("<P>");
client.print("Temperatura: ");
client.print(temperatura);
client.print(" graus Celsius");
client.print("<P>");
client.print("LDR: ");
client.print(ldr);
client.print(" lux");
client.print("<P>");
if(SL1C){
client.print("LuzOn");
}else{
client.print("LuzOff");
}
client.print("<P>");
if(valorSensorPIR == 1){
client.print("MovOn");
}else{
client.print("MovOff");
}
//limpa string para a próxima leitura
readString="";
// parar cliente
client.stop();
}
}
}
}
if (valorSensorPIR == 1 && statusAlarme == 1) {
ligarAlarme();
}
}
void ligarAlarme() {
digitalWrite(pinLed, HIGH);
tone(pinBuzzer,1500);
}
void desligarAlarme() {
//Desligando o led
digitalWrite(pinLed, LOW);
//Desligando o buzzer
noTone(pinBuzzer);
}
Aí tem algumas funções. Queria fazer o seguinte. Ao receber o comando "L1C", quero que ele ligue o led que será ligado em outro arduino, o slave.
Porém não faço a menor ideia de quais alterações devo fazer no programa principal, e o que deve ter no programa secundário.
O modelo de RF 433MHz que tenho é esse:
Já tenho a biblioteca VirtualWire.h instalada, mas não está inclusa no programa.
Li vários tópicos relacionados, mas não consegui entender. Se puderem me dar a base de um led, acho que posso fazer para o restante.
Qualquer informação que esteja faltando, me avise que informarei.
Desde já agradeço.