Нажмите кнопку и отправьте сообщение об ошибке

Проблема в том, что иногда мне даже не нужно нажимать кнопку, сообщение отправляется и продолжает отправляться непрерывно.

Я хочу, чтобы при нажатии кнопки отправлялось 1 сообщение.

Я не могу понять, почему это происходит. Пожалуйста, помогите мне разобраться.

 #define CUSTOM_SETTINGS
    #define INCLUDE_GPS_SHIELD
    #define INCLUDE_SMS_SHIELD
    #define INCLUDE_VIBRATION_SHIELD

/* Include 1Sheeld library.*/
#include <OneSheeld.h>
#include <string.h>
#define SW 8


/* Define a boolean flag. */

float lat;
float lon;
String Message;
String Message1;
String Message2;
char latitude[10];
char longitude[10];


void setup() 
{
  pinMode(SW, INPUT);
  /* Start communication.*/
  Serial.begin(9600);
  OneSheeld.begin();

}

void Emergency() {

      /* Send SMS. */
      if(digitalRead(SW) == 1)
      {  
        lat = GPS.getLatitude();
        lon = GPS.getLongitude();
        Message1 = String(lat,8);
        Message2 = String(lon,8);

        Message = "I need Help! Google Maps - https://www.google.co.in/maps/place/" + Message1 + "," + Message2;
        Serial.println(Message);

        SMS.send("0637200721",Message);
        //Vibration.start(1000,2000);

        delay(3000);
      }
}

void loop()
{ 
  Emergency();

  delay(1000);
}

Вот как я подключаю кнопку. Серый провод — для заземления, красный — для 5 В, а оранжевый — к контакту 8. Между красным и серым стоит резистор.

, 👍-1

Обсуждение

У меня нет ответа на ваш вопрос по кодировке, но ваша проблема почти наверняка связана с дребезгом контактов. Настройки устранения дребезга контактов существуют, но они, как правило, односторонние. Лучше всего определить нажатие, сделать небольшую задержку и убедиться, что кнопка всё ещё нажата., @Milliways

@Milliways Я совсем новичок в этой области. Не могли бы вы подсказать мне, как в этом разобраться? Спасибо., @Htoo

Есть много ссылок, например https://playground.arduino.cc/Learning/SoftwareDebounce, @Milliways

Пытаюсь разобраться с подключением кнопки. Похоже, у вас есть +5 В -> Резистор -> Земля, а также GPIO -> Земля, и ещё один — Ничего -> Кнопка -> Земля. Узнайте, как подключить кнопку!, @Majenko


1 ответ


Лучший ответ:

-1

Проблема в том, что я не добавил следующие строки и заменил физическую кнопку на кнопку, предоставляемую 1Sheeld с мобильного устройства. Ниже представлен рабочий код.

#define CUSTOM_SETTINGS
#define INCLUDE_GPS_SHIELD
#define INCLUDE_SMS_SHIELD
#define INCLUDE_VIBRATION_SHIELD
#define INCLUDE_PUSH_BUTTON_SHIELD

/* Include 1Sheeld library.*/
#include <OneSheeld.h>
#include <string.h>


/* Define a boolean flag. */
boolean isMessageSent = false;
float lat;
float lon;
String Message;
String Message1;
String Message2;
char latitude[10];
char longitude[10];


void setup() 
{
  /* Start communication.*/
  Serial.begin(9600);
  OneSheeld.begin();
  PushButton.setOnButtonStatusChange(&Emergency);
}

void loop()
{ 

}


void Emergency(byte isButtonPressed) {
 if(isButtonPressed)
      {  
        if(!isMessageSent)
        lat = GPS.getLatitude();
        lon = GPS.getLongitude();
        Message1 = String(lat,8);
        Message2 = String(lon,8);

        Message = "I need Help! Google Maps - https://www.google.co.in/maps/place/" + Message1 + "," + Message2;
        Serial.println(Message);

        SMS.send("0637200721",Message);
        isMessageSent = true; // This line 
      }
      else{
        isMessageSent = false; // This line
      }
,