Go Down

Topic: GSM ARDUINO (Read 273 times) previous topic - next topic

Danyedgr

Nov 22, 2018, 08:17 am Last Edit: Nov 22, 2018, 02:23 pm by surbyte Reason: Titulo editado y modificación de texto en mayúsculas x minúsculas
Ayuda, no he podido programar mi GSM. Nunca había utilizado este tipo de módulos y no logro entender

Este es mi código:

Code: [Select]
#include <Wire.h>
#include <SoftwareSerial.h> //Incluimos la libreria Software Serial  
SoftwareSerial SIM800L(1, 0); //Instanciamos el objeto SIM800L y le pasamos los parametros de los pines TX y RX
String Mensaje;
int enviar = 0;
int valor = 0;
#define RELAY_ON 0
#define RELAY_OFF 1
int ESTROBOSVOLTAJE = 6;
int ESTROBOSF1 = 7;
int ESTROBOSF2 = 8;
int LUCES = 9;
int M1IZQ = 10;
int M1DER = 11;
int M2IZQ = 12;
int M2DER = 13;

void setup() {
 Serial.begin(19200);
 Serial1.begin(19200);                 //Velocidad de comunicacion con el modulo SIM800L
 Serial1.println("AT+CMGF=1");         // Configurar el módulo en modo de texto
 delay(500);                           //Tiempo de espera para que el modulo se conecte a una red
 Serial1.println("AT+CNMI=2,2,0,0,0"); //Configuracion de la forma como recibir mensajes
 
 pinMode(ESTROBOSF1, OUTPUT);
 pinMode(ESTROBOSF2, OUTPUT);
 pinMode(ESTROBOSVOLTAJE, OUTPUT);
 pinMode(LUCES, OUTPUT);
 pinMode(M1IZQ, OUTPUT);
 pinMode(M1DER, OUTPUT);
 pinMode(M2IZQ, OUTPUT);
 pinMode(M2DER, OUTPUT);
 
 digitalWrite (5, RELAY_OFF);
 digitalWrite (6, RELAY_OFF);
 digitalWrite (7, RELAY_OFF);
 digitalWrite (8, RELAY_OFF);
 digitalWrite (9, RELAY_OFF);
 digitalWrite (10, RELAY_OFF);
 digitalWrite (11, RELAY_OFF);
 digitalWrite (12, RELAY_OFF);
 digitalWrite (13, RELAY_OFF);
}

void loop() {
 if (SIM800L.available())//Lograr que nos muestre lo que nos llega de mensaje por el monitor serial.
 {
   if (Mensaje.indexOf ("A") >= 0) {
     digitalWrite(M1IZQ, RELAY_OFF);
     digitalWrite(M1DER, RELAY_OFF);
     digitalWrite(M2IZQ, RELAY_OFF);
     digitalWrite(M2DER, RELAY_OFF);
     Serial.println("ALTO");  //Imprime el mensaje
   }
   if (Mensaje.indexOf ("B") >= 0) {
     digitalWrite(M1IZQ, RELAY_OFF);
     digitalWrite(M1DER, RELAY_ON);
     digitalWrite(M2IZQ, RELAY_OFF);
     digitalWrite(M2DER, RELAY_ON);
     Serial.println("IZQUIERDA");  //Imprime el mensaje
   }
   if (Mensaje.indexOf ("C") >= 0) {
     digitalWrite(M1IZQ, RELAY_ON);
     digitalWrite(M1DER, RELAY_OFF);
     digitalWrite(M2IZQ, RELAY_ON);
     digitalWrite(M2DER, RELAY_OFF);
     Serial.println("DERECHA");  //Imprime el mensaje
   }
   if (Mensaje.indexOf ("D") >= 0) {
     digitalWrite(M1IZQ, RELAY_ON);
     digitalWrite(M1DER, RELAY_OFF);
     digitalWrite(M2IZQ, RELAY_OFF);
     digitalWrite(M2DER, RELAY_ON);
     Serial.println("ADELANTE");  //Imprime el mensaje
   }
   if (Mensaje.indexOf ("E") >= 0) {
     digitalWrite(M1IZQ, RELAY_OFF);
     digitalWrite(M1DER, RELAY_ON);
     digitalWrite(M2IZQ, RELAY_ON);
     digitalWrite(M2DER, RELAY_OFF);
     Serial.println("REVERSA");  //Imprime el mensaje
   }
   if (Mensaje.indexOf ("F") >= 0) {
     digitalWrite(LUCES, RELAY_OFF);
     Serial.println("REFLECTORES APAGADOS");  //Imprime el mensaje
   }
   if (Mensaje.indexOf ("G") >= 0) {
     digitalWrite(LUCES, RELAY_ON);
     Serial.println("REFLECTORES ENCENDIDOS");  //Imprime el mensaje
   }
   if (Mensaje.indexOf ("H") >= 0) {
     digitalWrite(ESTROBOSVOLTAJE, RELAY_OFF);
     Serial.println("ESTROBOS APAGADOS");  //Imprime el mensaje
   }
   if (Mensaje.indexOf ("I") >= 0) {
     digitalWrite(ESTROBOSVOLTAJE, RELAY_ON);
     digitalWrite(ESTROBOSF1, RELAY_ON);
     Serial.println("ESTROBOS EN FUNCION 1 ENCENDIDOS");  //Imprime el mensaje
   }
   if (Mensaje.indexOf ("J") >= 0) {
     digitalWrite(ESTROBOSVOLTAJE, RELAY_ON);
     digitalWrite(ESTROBOSF2, RELAY_ON);
     Serial.println("ESTROBOS EN FUNCION 2 ENCENDIDOS");  //Imprime el mensaje
   }

 }
}

void MQ2 ()
{
 Serial.print("Valor del sensor: ");
 Serial.println(analogRead(0));
 valor = digitalRead(A0);
 if (analogRead(0) > 250)  // Capturo analogRead (0) que es el valor analogico del sensor
 {
   void SMSMQ2();
   Serial.println("ALERTA: SE HA DETECTADO PRESENCIA DE MONOXIDO DE CARBONO");  //Imprime el mensaje
   delay (150); // Pausa
 }
}

void serialEvent() {
 if (Serial.available())
 {
   String text = Serial.readString();
   Serial1.println(text);
 }
}
//Rutina de servicio a la interrupcion para el monitor serie 1

void serialEvent1() {
 if (Serial1.available() > 0 )
 {
   Mensaje = Serial1.readStringUntil("\n");
   Serial.println("Nuevo Mensaje:");
   Serial.println(Mensaje);
 }
}
void SMSMQ2() {
 if (enviar == 0)
 {
   Serial1.println("AT+CMGF=1");
   delay(200);
   Serial1.println("AT+CMGS=\"+526143035348\"");
   delay(200);
   Serial1.print("ALERTA: SE HA DETECTADO PRESENCIA DE MONOXIDO DE CARBONO");
   delay(200);
   Serial1.print((char)26);
   delay(200);
   Serial1.println();
   delay(200);
   enviar++;
 }
}



surbyte

Los pines 1,0 son los pines físicos para TX, RX asi que jamás uses SoftwareSerial para estos pines.
No hay restricción para los demás, salvo los que usaste.

Comienza por ahi.

_jose_

#2
Nov 22, 2018, 05:00 pm Last Edit: Nov 22, 2018, 05:01 pm by _jose_
Ademas de lo dicho por surbyte,si creas un objeto SIM800L con softwareserial,porque luego inicializas y usas Serial1 en vez de SIM800L?

Go Up