Problema con los comandos at sim900 con arduino

hola buenas tardes tengo un problema con el sim900 y es que despues de enviar un mensaje del sim900 a un usuario(telefono) quiero que el usuario responda con una opcion pero a la hora de querer recibir ese mensaje para pasarlo por un switch lo mando del usuario al sim900 pero no lo detecta o lo ignora.... ya trate de borrarle datos que pudo a ver tomado pero ni asi si me pudieran ayudar se los agradecería
adjunto codigo por si saben que es lo que le tengo que agregar o quitar:

#include <SoftwareSerial.h>
SoftwareSerial sim900s(7,8);

// Definir
const int PIR = 2;      // pin 2 va a la señal del sensor de movimiento
const int LED = 3;     // pin 13 encendera cuando se lo ordenemos 
int valor = 0;          // variable para leer el estado del pir
String estado=" ";
char op;
int op2;
boolean encendido=0;
String Num_Movil[] = {/*#1:*/"+525535342127",/*#2:*/ /*#3:*/ /*#4:*/}; // Numeros celulares
char   incoming_char = 0;    //Variable que guarda los caracteres que envia el SIM900
int    Cantidad_Movil = 2;

// Configuración
void setup() {
  pinMode(LED, OUTPUT); // Configurar LED como salida = OUTPUT
  pinMode(PIR, INPUT);  // Configurar pir como entrada = INPUT

  sim900s.begin(19200); // velocidad de transmision GPPS
  Serial.begin(19200);   // Configurar el puerto serial a 9600 por si queremos monitoriar
  
  sim900s.print("AT+CMGF=1\r");// comando AT recibir y enviar mensajes
  delay(100);
  sim900s.print("AT+CNMI=2,2,0,0,0\r");//Configuramos el módulo para que muestre los SMS por el puerto serie
  delay(2000);
  sim900s.println("AT+CMGD=1,4");         // Eliminar todos los mensajes
  delay(100);
  sim900s.println("AT+CMGL=\"ALL\",0 ");
  delay(2000);

  Serial.println("Comandos AT enviado correctamente.");
}
// Código principal donde ocurren en loop
void loop() {
  if(sim900s.available() >0){ // Verificamos si hay datos disponibles desde el SIM900
    op=sim900s.read();
    Serial.println(op);
    if(op=='M'){
      menu();                 // llama a la funcion menu
    }
  }                                                
  // evalua el sensor pir
  valor = digitalRead(PIR);                 // leer el pin del sensor de movimiento PIR
  if (valor == HIGH) {                      // comprobamos si la entrada es HIGH o hay movimiento
    Serial.println("Movimiento detectado por el pir");
    //mensajealerta();                         // llama a la funcion que envia mensaje
    delay(500);
  }
}
void menu()
{

Serial.println("Enviando mensaje de menu");
//opcion para mandar el mensaje a varios numeros
  delay(100);
  for (int n = 0; n < Cantidad_Movil; n++) {                                            
    delay(1000);                                                                     
    sim900s.println("AT + CMGS = \"" + Num_Movil[n] + "\"");  // Envia mensaje  
    delay(100);                                                                     
    sim900s.print("Opciones para tomar medidas\r  EL NUMERO DE EMERGENCIA ES EL 911 \r ");  // contenido del mensaje 
    sim900s.print(" A) observar la camara de vijilancia.\r   B) prender la luz.\r");
    sim900s.print("\r");
    delay(100);                                                          
    sim900s.write((char)26); //ctrl+z                                               
    delay(9000);   
    Serial.print("Mensaje numero: ");   
    Serial.print(n+1);
    Serial.println(" fue enviado");
  }
  Serial.println("Los mensajes fueron enviados");
if(sim900s.available() >0) {// Verificamos si hay datos disponibles desde el SIM900
    op=sim900s.read();          // Leemos los datos y los almcanamos en la variable op
    Serial.println(op);         // Imprime los datos entrantes uno a uno en el terminal serial

//opcion para tomar medidas
    switch(op)
  {
    case 'B':

    delay(1000);
    sim900s.print("AT+CMGS=\"+525535342127\"\r");   // numero de destino
    delay(200);                                                                     
    sim900s.print("Selecionaste la opcion de lampara 1\n 1: para prender.\n 0: para apagar");// contenido del mensaje
    sim900s.print("\r");
    delay(100);                                                          
    sim900s.write((char)26); //ctrl+z                                               
    delay(9000);   
    Serial.print("Mensaje fue enviado ");   

    if (sim900s.available() > 0) {                                                      
    incoming_char = sim900s.read();                                                    
    Serial.print(incoming_char);                                                      
  }

He estado intentando averiguar como está hecho el programa pero me he perdido. Intenta explicar en cada case lo que intentas hacer, además de poner todo el código junto como indican las normas.
En cuanto a la pregunta, no he entendido lo que quieres hacer exactamente. Creo que cuando algún teléfono reciba un SMS, ¿el usuario responda enviando otro sms?

Saludos

El código es caótico, hay partes que estan bien pero mal terminadas.
Abres switch case pero no cierras. Pones consultas al puerto serie para leer el SIM y luego vuelves a hacerlo. A eso llamo caos.
Asi que debe ordenarse.
Es un programa que lee SMS y en función de lo recibido toma acciones.
Esta hecho muchas veces en este foro. Solo debes buscar.
Hay librerías que facilitan las cosas también.

Si lo haces con comados AT se vuelve mas complicado pero bueno, es tu elección.
En el IDE tienes una librería que se llama GSM.h
El ejemplo para leer SMS es este


// include the GSM library
#include <GSM.h>

// PIN Number for the SIM
#define PINNUMBER "+525535342127"

// initialize the library instances
GSM gsmAccess;
GSM_SMS sms;

// Array to hold the number a SMS is retreived from
char senderNumber[20];

void setup() {
  // initialize serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  Serial.println("SMS Messages Receiver");

  // connection state
  boolean notConnected = true;

  // Start GSM connection
  while (notConnected) {
    if (gsmAccess.begin(PINNUMBER) == GSM_READY) {
      notConnected = false;
    } else {
      Serial.println("Not connected");
      delay(1000);
    }
  }

  Serial.println("GSM initialized");
  Serial.println("Waiting for messages");
}

void loop() {
  char c;

  // If there are any SMSs available()
  if (sms.available()) {
    Serial.println("Message received from:");

    // Get remote number
    sms.remoteNumber(senderNumber, 20);
    Serial.println(senderNumber);

    // An example of message disposal
    // Any messages starting with # should be discarded
    if (sms.peek() == '#') {
      Serial.println("Discarded SMS");
      sms.flush();
    }

    // Read message bytes and print them
    while (c = sms.read()) {
      Serial.print(c);
    }

    Serial.println("\nEND OF MESSAGE");

    // Delete message from modem memory
    sms.flush();
    Serial.println("MESSAGE DELETED");
  }

  delay(1000);

}

Prueba a ver si este código funciona con tu número y con los pines 7 y 8 que estan asignados por defecto en la librería GSM.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.