Ayuda con GSM para mandar mensajes y crear una clave.

Buen día a todos, soy nuevo en el foro y tambien en cuanto al uso con arduino y necesito ayuda. Estoy trabajando en un proyecto en el cual quiero activar un dispositivo por medio del celular, deseo mandar un mensaje de texto, el cual comparare con una clave predefinida y determinar el encendido y apagado de un led, pero estoy batallando con la conversion y comparacion entre las variables. El programa me arroja este error {invalid conversion from 'char*' to 'char' [-fpermissive]} y no se como realizar la comparacion para cuendo el arduino reciba el mensaje (por cierto estoy utilizando la shield SIM900) esté lo compare con una clave predefinida y así, decida el encendido de un led. Les dejo el código para que lo vean mejor, gracias de antemano, espero y me puedan ayudar. :slight_smile:

Codigo.txt (1.38 KB)

Prueba3.ino (1.33 KB)

no subas archivos usa las etiquetas </> para que leamos tu codigo.
Ese error es porque intentas enviar un puntero cuando espera un array a una funcion

Correcto, muchas gracias por el consejo maxid, error de novato (alguna vez todos fuimos navatos cierto :stuck_out_tongue: jeje) bueno aqui esta el código. Lo que entiendo con esé error es como lo comentas, tengo un puntero y necesito una array para que se pueda comparar, mi pregunta es, como puedo hacer dicha conversión para poder comparar ambas variables y que el programa tome una decision? (Si me pudieras dar un ejemplo sería estupendo) Espero tu respuesta y de nuevo gracias por tu ayuda :slight_smile:

#include <SoftwareSerial.h>
#include "SIM900.h"
#include "sms.h"
SMSGSM sms;

boolean started=false;
int Mensaje_presente;
char Texto[7];
char sms_position;
char phone_number[20];
char sms_text[100];
char Bienvenida[] = "Comunicacion Serial OK.";
char Mensaje[] = "ARDUINO SMS";
char CI[] = "CLAVE INCORRECTA";
char clave[] = "LEDON";  [b]//CLAVE PREDEFINIDA Y QUE SERA COMPARADA CON LO QUE LLEGUE EN EL MENSAJE
[/b]


void setup()
{
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  Serial.begin(9600);                  // Velocidad del puerto serie     
  if (gsm.begin(9600)) 
    {
        Serial.println(Bienvenida);
        started=true;
    } 
}
void loop()
{
  if(started){
     Mensaje_presente = sms.IsSMSPresent(SMS_UNREAD); //Espera a que llegue un mensaje
  // esperamos un caracter cualquiera en el puerto serie
  if (Mensaje_presente) {
      digitalWrite(12, HIGH); //prendo un led para indicar que llego un msj
      sms.GetSMS(sms_position, phone_number, sms_text, 100); //obtiene los datos del mensaje recibido y los guarda en variables
      Texto[7] = sms_text;    [b]//AQUI ES DONDE ME MARCA EL ERROR[/b]
      delay(1000);
      digitalWrite(12, LOW);
      if(Texto == clave){ 
      enviar_mensaje();
      digitalWrite(13, LOW); 
      }
      else{
        Serial.print(CI);
      }
  }
 }
}
void enviar_mensaje(){
 // enviamos el sms  
 sms.SendSMS("+526367009653", Mensaje);
 digitalWrite(13, HIGH); //Led para indicar que se envio el mensaje
 delay(1000);
}

Donde te marca el error?
Te pregunté por privado pero no indicas o copias el error que recibes

Correcto primero que nada gracias por responder, y segundo una disculpa me encontraba leyendo las Normas del foro (ya que estaba tan apurado por una respuesta y no me tome el tiempo para leerlas).
El error me lo marca en la línea 38 (te la dejo marcada con comentarios en Mayúsculas en el código).
Estoy utilizando un Arduino UNO y la libreria GSM (la descargue de este link):

link de la libreria: http://educ8s.com/Arduino/SMS/

Espero puedan ayudarme, de nuevo una disculpa y si me pudisen dar un ejemplo de como hacer la comparación o realizar la conversión entre las variables para así poder realizar la comparación sería estupendo. De antemano mil gracias.

El error completo es el siguiente:

Prueba3.ino: In function 'void loop()':
Prueba3:38: error: invalid conversion from 'char*' to 'char' [-fpermissive]
invalid conversion from 'char*' to 'char' [-fpermissive]

Y este es el código:

#include "SIM900.h"
#include "sms.h"
SMSGSM sms;

boolean started=false;
int Mensaje_presente;
char Texto[7];
char sms_position;
char phone_number[20];
char sms_text[100];
char Bienvenida[] = "Comunicacion Serial OK.";
char Mensaje[] = "ARDUINO SMS";
char CI[] = "CLAVE INCORRECTA";
char clave[] = "LEDON";   //Esta es la clave que predefini para compararla con lo que resiva del mensaje



void setup()
{
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  Serial.begin(9600);                  // Velocidad del puerto serie     
  if (gsm.begin(9600)) 
    {
        Serial.println(Bienvenida);
        started=true;
    } 
}
void loop()
{
  if(started){
     Mensaje_presente = sms.IsSMSPresent(SMS_UNREAD); //Espera a que llegue un mensaje
  if (Mensaje_presente) {
      digitalWrite(12, HIGH); //prendo un led para indicar que llego un msj
      sms.GetSMS(sms_position, phone_number, sms_text, 100); //obtiene los datos del mensaje recibido y los guarda en variables
      Texto[7] = sms_text;     [u]//AQUI ES DONDE ME MARCA EL ERROR.[/u]
      delay(1000); 
      digitalWrite(12, LOW);
      if(Texto == clave){ 
      enviar_mensaje();
      digitalWrite(13, LOW); 
      }
      else{
        Serial.print(CI);
      }
  }
 }
}
void enviar_mensaje(){
 // enviamos el sms  
 sms.SendSMS("+526367009653", Mensaje);
 digitalWrite(13, HIGH); //Led para indicar que se envio el mensaje
 delay(1000);
}

esta mal como asignas el texto a la variable.
Texto[7] = sms_text;    [u]//AQUI ES DONDE ME MARCA EL ERROR.[/u]
le indicas que copie todo un vector en la posicion 7 de otro vector.

usa la funcion strcpy() para copiar textos con fines de linea. Sino en este caso strncpy() para n caracteres

 strncopy(Texto,sms_text,7); // copia 7 caracteres de la variable sms_text

@maxid hermano mil gracias¡¡ me ha servido mucho tu ayuda, al fin me ha quedado :slight_smile: puse el código que me propusiste y he agregado algunos detalles extra y así es como quedo la parte de la comparación (les dejo el código más abajo), espero que esto ayude a muchos otros si se les presenta este mismo problema, de nuevo muchas gracias a todos los que me respondieron, y por tomarse su valiosisimo tiempo para ayudarme, que dios los bendiga.

void loop()
{
  inicio:
    if(started) 
    {
        sms_position=sms.IsSMSPresent(SMS_UNREAD);
        delay(2000);
        if (sms_position) 
        {
            Serial.print("SMS positon:");
            Serial.println(sms_position,DEC);
            sms.GetSMS(sms_position, phone_number, sms_text, 100);
            Serial.println(phone_number);
            strncpy(Texto,sms_text,7); // copia 7 caracteres de la variable sms_text
            if(Texto[0] == clave[0] && Texto[1] == clave[1] && Texto[2] == clave[2] && Texto[3] == clave[3] && Texto[4] == clave[4])
            {
            Encender(); //Mando llamar una subfunción llamada Encender y en la cual solamente prendo el led
            goto inicio;
            }
            else
            Serial.println("Clave Incorrecta"); 
            if(Texto[0] == clave2[0] && Texto[1] == clave2[1] && Texto[2] == clave2[2] && Texto[3] == clave2[3] && Texto[4] == clave2[4] && Texto[5] == clave2[5])
            {
            Apagar();  //Mando llamar una subfunción llamada Apagar y en la cual solamente apago el led
            goto inicio;
            }
            else
            Serial.println("Clave Incorrecta"); 
        }      
        delay(2000);
    }
}

            goto inicio; :o :o :o :o :o :o :o :o :o :o
Que es esto????

Dennis M. Ritchie se debe retorcer en la tumba!!!!
Eso se dejo de usar desde que la programacion paso a ser estructurada.

Van con tono de broma.

aca te lo mejor al codigo

void loop()
{
    if(started) //que es esta variable?
    {
        sms_position=sms.IsSMSPresent(SMS_UNREAD);
        delay(2000); //ojo con esto que detiene todo x 2 segundos
        if (sms_position) 
        {
            Serial.print("SMS positon:");
            Serial.println(sms_position,DEC);
            sms.GetSMS(sms_position, phone_number, sms_text, 100);
            Serial.println(phone_number);
            strncpy(Texto,sms_text,7); // copia 7 caracteres de la variable sms_text
            if( strncmp(Texto,clave,5)) //compara 5 caracteres de la posicion 0 a la 4
              Encender(); //Mando llamar una subfunción llamada Encender y en la cual solamente prendo el led
            else
              if( strnc//ojo con esto que detiene todo x 2 segundosmp(Texto,clave2,5)) //compara 5 caracteres de la posicion 0 a la 4
                Apagar();  //Mando llamar una subfunción llamada Apagar y en la cual solamente apago el led
              else
                Serial.println("Clave Incorrecta"); 
        }      
        delay(2000); //ojo con esto que detiene todo x 2 segundos
    }
}