#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);
#include <Separador.h>
Separador s;
String direccion;
String slave1 = "101"; // Direccion del esclavo1
String slave2 = "102"; // Direccion del esclavo2
String slave3 = "103"; // Direccion del esclavo3
String slave4 = "104"; // Direccion del esclavo4
String S1_datosrecibidos;
String S1_dato1;
String S1_dato2;
String S1_dato3;
String S2_datosrecibidos;
String S2_dato1;
String S2_dato2;
String S2_dato3;
String S3_datosrecibidos;
String S3_dato1;
String S3_dato2;
String S3_dato3;
int Nivel_TK;
int Temp_H2o;
int Temp_Amb;
int PE_Slave1;
int SensorFLAMA_Slave3;
#define RS_MODE 2 // Pin para seleccionar modo transmisor o receptor del RS485
byte flag_rx = 0; // Variable de estado para el modo receptor
unsigned long t_millis; // Contador de tiempo transcurrido en milisegundos
void setup()
{
pinMode(RS_MODE, OUTPUT); // Pin de seleccion de modo del modulo RS485 como salida
Serial.begin(9600); // Configuracion del puerto serial a 9600 baudios
lcd.init();
lcd.backlight();
lcd.clear();
}
///////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////
void loop()
{
lcd.setCursor(0,0);lcd.print("****RS232 RS485****");
lcd.setCursor(0,1); lcd.print("Nivel:");
if((S1_dato2.toInt()) < 70)
{
lcd.print("BAJO");
}
else
{
lcd.print("OK ");
}
lcd.setCursor(14,1);lcd.print(" %:");lcd.print(S1_dato2.toInt());
lcd.setCursor(0,2);lcd.print("Temp H2o:");lcd.setCursor(10,2);lcd.print(S2_dato2.toInt());
lcd.setCursor(14,2);lcd.print(" PE:");lcd.print(S1_dato3.toInt());
lcd.setCursor(0,3);lcd.print("Temp Amb:");lcd.setCursor(10,3);lcd.print(S3_dato3.toInt());
lcd.setCursor(14,3);lcd.print(" SF:");lcd.print(S3_dato2.toInt());
///////////////////////////////////////////////////////////
////////////// COMUNICACION CON EL ESCLAVO 1 //////////////
///////////////////////////////////////////////////////////
digitalWrite(RS_MODE, HIGH); // Modo transmisor
Serial.print(slave1); // Envia la direccion del esclavo1
Serial.print("*"); // Final de trama
Serial.flush(); // Espera a que se transmitan los datos al esclavo
digitalWrite(RS_MODE, LOW); // Modo receptor
flag_rx = 1;
t_millis = millis();
while(flag_rx == 1) // Espera a que responda el esclavo
{
if((millis() - t_millis) >= 1000 && flag_rx == 1) // Si el esclavo no responde en 1 segundo, el maestro vuelve a transmitir datos
{
flag_rx = 0;
}
while(Serial.available() > 0) // Verifica si ha recibido datos del esclavo
{
flag_rx = 0;
S1_dato1 = Serial.readStringUntil(',').toInt();
S1_dato2 = Serial.readStringUntil(':').toInt();
S1_dato3 = Serial.readStringUntil('*').toInt();
}
}
delay (10);
///////////////////////////////////////////////////////////
////////////// COMUNICACION CON EL ESCLAVO 2 //////////////
///////////////////////////////////////////////////////////
digitalWrite(RS_MODE, HIGH); // Modo transmisor
Serial.print(slave2); // Envia la direccion del esclavo1
Serial.print("*"); // Final de trama
Serial.flush(); // Espera a que se transmitan los datos al esclavo
digitalWrite(RS_MODE, LOW); // Modo receptor
flag_rx = 1;
t_millis = millis();
while(flag_rx == 1) // Espera a que responda el esclavo
{
if((millis() - t_millis) >= 1000 && flag_rx == 1) // Si el esclavo no responde en 1 segundo, el maestro vuelve a transmitir datos
{
flag_rx = 0;
}
while(Serial.available() > 0) // Verifica si ha recibido datos del esclavo
{
flag_rx = 0;
S2_dato1 = Serial.readStringUntil(',').toInt();
S2_dato2 = Serial.readStringUntil('*').toInt();
}
}
delay (10);
///////////////////////////////////////////////////////////
////////////// COMUNICACION CON EL ESCLAVO 3 //////////////
///////////////////////////////////////////////////////////
digitalWrite(RS_MODE, HIGH); // Modo transmisor
Serial.print(slave3); // Envia la direccion del esclavo1
Serial.print("*"); // Final de trama
Serial.flush(); // Espera a que se transmitan los datos al esclavo
digitalWrite(RS_MODE, LOW); // Modo receptor
flag_rx = 1;
t_millis = millis();
while(flag_rx == 1) // Espera a que responda el esclavo
{
if((millis() - t_millis) >= 1000 && flag_rx == 1) // Si el esclavo no responde en 1 segundo, el maestro vuelve a transmitir datos
{
flag_rx = 0;
}
while(Serial.available() > 0) // Verifica si ha recibido datos del esclavo
{
flag_rx = 0;
S3_dato1 = Serial.readStringUntil(',').toInt();
S3_dato2 = Serial.readStringUntil(':').toInt();
S3_dato3 = Serial.readStringUntil('*').toInt();
}
}
delay(900);
lcd.clear();
}
///////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////