Buenas día, antes que nada saludarlos y felicitarles por su excelentes aportaciones.
Tengo un problema con el código y recurro a ustedes para que me orienten o ayuden a resolverlo, antes que nada conozco poco de programación pero me gusta mucho y quiero aprender esto para hacer proyectos.
Buscando en las redes encontré un sistema de riego por goteo Manual/Automático controlado por SMS (SIM900) y placa Arduino UNO, misma placa Arduino UNO recolecta información de los sensores de humedad/temperatura, Lluvia y activa el rele de riego para que arranque de la bomba anexo liga
de lo antes descrito: SISTEMA DE RIEGO CON ARDUINO GSM + 3 tipos de SENSORES - YouTube
ya tengo montado todo el circuito y ejecuto el código y efectivamente me llegan los SMS a mi celular de los datos obtenidos de los sensores de humedad, temperatura , cantidad de agua en el tanque posterior a ello manda un mensaje de el menú para elegir entre Manual o Automático anexo imagen de lo antes descrito
El problema parte de aquí en adelante, al momento de enviar el SMS desde mi celular con la letra A de Automático o M de Manual para ambos casos no ejecuta la opción mencionada si no que lo que realiza el código manda la instrucción de activar el Rele de la bomba para regar.
ya llevo varios días buscando el error y lo que he encontrado es que al momento de recibir el mensaje de texto en el puerto serie ejecuta el carater 13 (ASCII) correspondiente al salto de linea que llega desde el celular (\n) y no la letra (M o A), el detalle es que no logro quitarle el (\n) al mensaje de texto para que únicamente lea el caracter A de Automático o M de Manual o en su defecto 0 para salir.
anexo lo que muestra el puerto serie cuando lo ejecuto y elijo la opción M o A
SETUP LISTO
DATOS
TEMPERATURA: 28°C
MENSAJE ENVIADO
AT+CMGS="7443096720"
SMS: TEMPERATURA: 28ºC
Enviando
Enviando
Enviado, limpiando serial
HUMEDAD: 55%
MENSAJE ENVIADO
AT+CMGS="7443096720"
SMS: HUMEDAD: 55%
Enviando
Enviando
Enviando
Enviado, limpiando serial
CANTIDAD DE AGUA DISPONIBLE: 510.00ml.
MENSAJE ENVIADO
AT+CMGS="7443096720"
SMS: CANTIDAD DE AGUA DISPONIBLE: 510.00 ml.
Enviando
Enviando
Enviando
Enviando
Enviado, limpiando serial
LLUVIA NO DETECTADA
MENSAJE ENVIADO
AT+CMGS="7443096720"
SMS: LLUVIA NO DETECTADA
Enviando
Enviando
Enviando
Enviado, limpiando serial
SELECCIONE MODO DE RIEGO M(Manual)//A(Automatico)
MENSAJE ENVIADO
AT+CMGS="7443096720"
SMS: SELECCIONE MODO DE RIEGO M(Manual)//A(Automatico)
Enviando
Enviando
Enviando
Enviando
Enviando
Enviando
Enviando
Enviando
Enviando
Enviando
Enviando
Enviando
Enviando
Enviando
Enviado, limpiando serial
REGANDO
MENSAJE ENVIADO
AT+CMGS="7443096720"
SMS: REGANDO
Enviando
Enviado, limpiando serial
SE TERMINO DE REGAR
MENSAJE ENVIADO
AT+CMGS="7443096720"
SMS: SE TERMINO DE REGAR
Enviando
Enviando
Enviando
Enviado, limpiando serial
Anexo la parte del código donde tengo el problema.
void loop() {
while(cont==0){
boolean saltoEncontrado=false;
String ignore=" 20\",.\n\r";
if(SIM900.available()>0){
String mensajetemp=(String)SIM900.read();
Serial.println(mensaje);
select(mensajetemp);
if((mensajetemp=="-") && !(saltoEncontrado)){
saltoEncontrado=true;
}else{
if((saltoEncontrado)&&!(ignore.indexOf(mensajetemp)>=0)){
mensaje+=mensajetemp;
select(mensaje);
}
};
if(mensaje.equals("0")){
cont = 0;
} else {
cont = cont +1;
}
}
}
delay(500);
}
void select(String msn){
if(msn.equals("M")){
Serial.println("ENTRANDO AL MODO MANUAL");
envioMensaje("ENTRANDO AL MODO MANUAL");
Serial.println("SELECCIONE 0 PARA SALIR");
envioMensaje("SELECCIONE 0 PARA SALIR");
modoManual();
}else if(msn.equals("A")){
Serial.println("ENTRANDO AL MODO AUTOMATICO");
envioMensaje("ENTRANDO AL MODO AUTOMATICO");
modoAutomatico();
}else if(msn.equals("0")){
//Serial.println("SELECCIONE MODO DE RIEGO M(Manual)//A(Automatico)");
Serial.println("DATOS");
envioMensaje("DATOS");
datos();
}else if(msn.equals("No")){
Serial.println("SELECCIONE MODO DE RIEGO M(Manual)//A(Automatico)");
envioMensaje("SELECCIONE MODO DE RIEGO M(Manual)//A(Automatico)");
Serial.println("DATOS");
envioMensaje("DATOS");
datos();
}else if(msn.equals("Si")){
Serial.println("Indique la cantidad de segundos que desea regar");
envioMensaje("Indique la cantidad de segundos que desea regar");
}else if(msn.toInt()>0){
encenderRelay(msn);
}
}
se encuentra como dato adjunto el código completo.
espero haber sido claro y me puedan ayudar
Riego_manual_y_automatico.ino (6.81 KB)
