Hola
¿Podrías brindarme ayuda con mi código?
Estoy realizando un proyecto el cual consiste en la utilización de un Adafruit FONA 808 Cellular + GPS Breakout el cual esta programado para funcionar como un botón de pánico el cual manda un MSN a un numero de celular con las coordenadas del lugar en el que fue presionado el botón; También estoy utilizando un sensor ultrasonido Max-Sonar HRLV-EZ0 el cual puede detectar la distancia entre el sensor y algún obstáculo con alta precisión, el cual mediante un mini motor vibrador de disco responderá variando su vibración de acuerdo a las lecturas del dicho sensor;
Cada código por separado de cada una de estas partes funciona correctamente, el problema viene a la hora de juntar los 2 códigos, específicamente al presionar el botón de pánico ya que al hacerlo este envía el SMS pero solo con la mitad de las coordenadas y las mediciones del sensor se vuelven inestables y se queda en un estado de vibración fuerte o bajo según las mediciones que estaba tomando mientras se presionaba el motor.
Me gustaría saber si alguien pudiera guiarme en el tema para encontrar una posible solución ya que he investigado algo sobre posibles soluciones como retrasos con milis pero la verdad no he sabido aplicarlos bien.
De antemano gracias por leer mi post.
Anexo mi codigo
#include "Adafruit_FONA.h"
#include <SoftwareSerial.h>
#define FONA_RX 2
#define FONA_TX 3
#define FONA_RST 4
#include <SoftwareSerial.h>
SoftwareSerial fonaSS = SoftwareSerial(FONA_TX, FONA_RX);
SoftwareSerial *fonaSerial = &fonaSS;
// Usa esto para FONA 800 y 808s
Adafruit_FONA fona = Adafruit_FONA(FONA_RST);
// para respuestas más tarde
char replybuffer[255];
uint8_t readline(char *buff, uint8_t maxbuff, uint16_t timeout = 0);
uint8_t type;
unsigned long previousMillis = 0;
const long interval = 1000;
const int buttonPin = 8;
const int BuzzerPin = 11;
int pwm = 10;
float motor;
void setup() {
{
Serial.begin(115200); // Inicia la comunicación serial
pinMode(pwm,OUTPUT);
pinMode(motor,OUTPUT);
}
while (! Serial);
Serial.begin(115200);
Serial.println(F("Inicializando FONA... (Puede tardar algunos segundos)"));
fonaSerial->begin(4800);
if (! fona.begin(*fonaSerial)) {
Serial.println(F("No se puede encontrar FONA"));
while(1);
}
Serial.println(F("FONA esta BIEN"));
// Intenta habilitar GPRS
Serial.println(F("Habilitando GPS..."));
fona.enableGPS(true);
delay(4000);
pinMode(BuzzerPin, OUTPUT);
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
{
int analogValue = analogRead(0);
int analogValue1= analogValue*1;
motor = (analogRead(0));
Serial.print("Distancia ");
Serial.println(motor);
analogWrite(pwm,-(analogRead(0)));
delay(150);
Serial.println(analogValue);
delay(10);
}
int buttonState;
buttonState = digitalRead(buttonPin);
// si se mantiene presionado el botón (es decir, el pánico)
if (buttonState == LOW) {
// obtener la ubicación gps
float latitude, longitude;// variables para mantener lecturas GPS iniciales
boolean gps_success = fona.getGPS(&latitude, &longitude);
if (gps_success) {
Serial.print("GPS lat:");
Serial.println(latitude, 6);
Serial.print("GPS long:");
Serial.println(longitude, 6);
//enviar SMS
char message[141];
char LAT1[10];// cadena de latitud larga sin analizar y desbordante
char LAT[10];
char LONG[10];
dtostrf(latitude, 10, 7, LAT1); // recopilar datos de GPS en un formato que se puede enviar
dtostrf(longitude, 10, 7, LONG);
// inicializa la matriz deseada de una matriz no analizada
for(int i = 0; i < 9; i++) {
LAT[i] = LAT1[i];
}
LAT[9] = '\0';// truncar la matriz al último valor deseado
sprintf(message, "¡PULSE MI BOTON DE PANICO!¡NECESITO AYUDA! https://www.google.com/maps?q=%s,%s", LAT, LONG);
Serial.println(LAT);Serial.println(LAT1);Serial.println(LONG);
Serial.println(message) ; // imprime el mensaje en el monitor serial antes de enviar
char sendto[21] = "+523334492748"; // pone el número de teléfono de destino deseado para sms aquí
fona.sendSMS(sendto, message) ; // envía el mensaje por SMS}
// SE ENCIENDE EL BUZZER DURANTE 5 SEGUNDOS PARA NOTIFICAR QUE EL TEXTO ENVIADO
for (int i = 0; i < 5; i++){
digitalWrite(BuzzerPin, HIGH);
delay(1000);
digitalWrite(BuzzerPin, LOW);
delay(1000);
}
} else {
Serial.println("Esperando el arreglo FONA GPS 3D ...");
}
// Verifica la red, luego GPRS
Serial.println(F("Comprobando la red celular ..."));
if (fona.getNetworkStatus() == 1) {
// red y GPRS? ¡Estupendo! Imprima la ubicación GSM para comparar
float latitude, longitude;
boolean gsmloc_success = fona.getGSMLoc(&latitude, &longitude);
if (gsmloc_success) {
Serial.print("GSMLoc lat:");
Serial.println(latitude, 6);
Serial.print("GSMLoc long:");
Serial.println(longitude, 6);
} else {
Serial.println("La ubicación GSM falló ...");
Serial.println(F("Desactivando GPRS"));
fona.enableGPRS(false);
Serial.println(F("Habilitando GPRS"));
if (!fona.enableGPRS(true)) {
Serial.println(F("Error al encender GPRS "));
}
}
}
}
}