Pregunta:
¿Recibes SMS por Arduino GSM Shield y controlas el LED con el contenido de este SMS?
Zhu
2014-06-10 15:01:40 UTC
view on stackexchange narkive permalink

Estoy usando Arduino GSM Shield recibiendo SMS desde una aplicación de Android. Y el contenido de este SMS controlará un LED. Si el contenido de este SMS no está "apagado", el LED estará encendido y el contenido se imprimirá en el monitor serial. Pero si está "apagado", el LED se apagará inmediatamente. Además, el LED seguirá encendido hasta que llegue el mensaje de "apagado". Por ahora, utilicé el código del ejemplo del software. Pero no puedo usar el contenido de este SMS para controlar el estado del LED. Con el siguiente código, el LED no se pudo encender y el contenido no se pudo mostrar en el monitor. Creo que fue porque el boceto no logró obtener todo el contenido de este SMS. ¿Alguien podría decirme cómo solucionar este problema? Gracias.

  #include <GSM.h>GSM gsmAccess; GSM_SMS sms; char senderNumber [20]; int led = 13; void setup () {Serial.begin (9600); pinMode (led, SALIDA); digitalWrite (led, BAJO); while (! Serial) {; } Serial.println ("Receptor de mensajes SMS"); booleano notConnected = verdadero; while (notConnected) {if (gsmAccess.begin ("6442") == GSM_READY) notConnected = false; else {Serial.println ("No conectado"); retraso (1000); }} Serial.println ("GSM inicializado"); Serial.println ("Esperando mensajes");} void loop () {char c; int val = 0; val = digitalRead (led); if (val == HIGH) {digitalWrite (led, HIGH); } if (sms.available ()) {Serial.println ("Mensaje recibido de:"); sms.remoteNumber (senderNumber, 20); Serial.println (senderNumber); if (sms.peek () == '#') {Serial.println ("SMS descartados"); sms.flush (); } while (c = sms.read ()) if (c = 'off') {digitalWrite (led, LOW); } else {digitalWrite (led, HIGH); Serial.print (c); } Serial.println ("\ nFIN DEL MENSAJE"); sms.flush (); Serial.println ("MENSAJE BORRADO"); } retraso (1000);}  
Si la respuesta a continuación realmente le ayudó a solucionar su problema, márquela como respondida / correcta. Además, ayudaría a otros si pudiera editar su pregunta para reflejar los cambios que ha realizado para que funcione.
primero quiero saber dónde agregaste "smsData [smsIndex ++] = c; smsData [smsIndex] = '\ 0';" ?
@user2788 Lo agregué a continuación mientras, y luego uso strcmp (smsData, "off") == 0 para verificar si el contenido de este sms está "apagado".
Dos respuestas:
#1
+4
Dave Tweed
2014-06-10 16:12:57 UTC
view on stackexchange narkive permalink

En primer lugar, tiene un error tipográfico: necesita el operador de doble igual en

  if (c == 'off') { 

Pero lo que es más importante, no puede usar una variable char para contener o comparar más de un carácter a la vez. No conozco los detalles de la biblioteca GSM de Arduino, pero si sms.read () devuelve una cadena, entonces necesitará una variable de cadena o una matriz de char para mantener el resultado.

Logré agregar "smsData [smsIndex ++] = c; smsData [smsIndex] = '\ 0';". Gracias por tu respuesta.
#2
+1
GMishx
2017-03-05 10:28:53 UTC
view on stackexchange narkive permalink

La función sms.read () devuelve solo un byte de la cadena de SMS. Puede almacenar todos los datos en una matriz de caracteres y procesarlos más tarde de la siguiente manera:

  char c, message [140]; int i = 0; while (c = sms.read ()) {mensaje [i ++] = c;} if (strstr (mensaje, "apagado")) {// Si SMS contiene apagado en cualquier lugar digitalWrite (led, LOW);} else {digitalWrite (led, HIGH); Serial.print (mensaje);}  

Y creo que la siguiente parte de su código no es necesaria ya que no hace nada:

  val = digitalRead (led); if (val == HIGH) {digitalWrite (led, HIGH);}  


Esta pregunta y respuesta fue traducida automáticamente del idioma inglés.El contenido original está disponible en stackexchange, a quien agradecemos la licencia cc by-sa 3.0 bajo la que se distribuye.
Loading...