buenas tardes amigos.. les cuento
Estoy realizando un proyecto para encender un led por medio de un sms que se enviara desde otro telefono a la SIM900. La SIM900 la estoy alimentando de una fuente externa que pueda entregar la corriente necesaria para su funcionamiento. He probado las placas mediante el monitor serial de arduino, envian un mensaje desde la sim900 a otro celular y me ha funcionado de maravilla. El código fuente fue modificado de un proyecto muy similar, pero solo para reducir los pines de salida para encender mas leds.
He probado con diferentes pines de salida sin interferir en los rx y tx pero al enviar el mensaje de texto para generar la salida digital no he obtenido resultados... Al haber hecho las pruebas con el monitor serial he podido descartar problemas de alimentación y funcionamiento.. Ahora lo unico que me queda es que el problema puede estar en el código.. esto puede ser por un error en este, ya que en windows 10 me aparece un error al verificar, pero en mac verifica correctamente..
Aqui les dejo el codigo para que le hechen un vistazo...
Saludos y Muchas Gracias!
#include <SoftwareSerial.h>
#include <string.h>
SoftwareSerial Sim900Serial(2, 3);
byte buffer[64]; //Buffer para recibir datos del puerto serie
int count=0;
int led8 = 8;
#define phonenumber "+5696456XXXX" //Cambiar por su número de teléfono, el número de teléfono debe ser el mismo que el formato que recibe el SMS,
//Quizá debe incluir el código de país.
void setup()
{
pinMode(led8, OUTPUT);
digitalWrite(led8, LOW); //Aca dejo encender el vehiculo al reiniciar el arduino
Sim900Serial.begin(19200);//Velocidad del puerto serie por Software pines 2 y 3
Serial.begin(19200); //Velocidad del puerto serie por Hardware pines 0 y 1
delay(500);
Sim900_Inti();
}
void loop()
{
if (Sim900Serial.available())
{
while(Sim900Serial.available()) //Leyendo datos del arreglo de caracteres
{
buffer[count++]=Sim900Serial.read(); //Almacenando los datos del arreglo en un buffer
if(count == 64)break;
}
Serial.write(buffer,count);
Cmd_Read_Act();
clearBufferArray();
count = 0;
}
if (Serial.available()) // Verifica si se dispone de datos en el puerto serie por hardware
Sim900Serial.write(Serial.read()); // y los escribe en el escudo SIM900
}
// Limpia el buffer
void clearBufferArray()
{
for (int i=0; i<count;i++)
{ buffer[i]=NULL;} // borrar todos los índices del arreglo
}
void Sim900_Inti(void)
{
Sim900Serial.println("AT+CMGF=1");
delay(500);
Sim900Serial.println("AT+CNMI=2,2");
delay(500);
}
//////Esta función lee los SMS enviados al escudo SIM900 y actua en base a esa orden.
void Cmd_Read_Act(void)
{
char buffer2[64];
char comparetext[25];
for (int i=0; i<count;i++)
{ buffer2[i]=char(buffer[i]);}
memcpy(comparetext,buffer2,25);
if (strstr(comparetext,phonenumber))
{
if (strstr(buffer2,"Apagar"))
{
digitalWrite(led8, HIGH); //Aca enciendo el led
}
if (strstr(buffer2,"Encender"))
{
digitalWrite(led8, LOW); //Aca apago el led
}
}
}