Нажмите кнопку и отправьте сообщение об ошибке
Проблема в том, что иногда мне даже не нужно нажимать кнопку, сообщение отправляется и продолжает отправляться непрерывно.
Я хочу, чтобы при нажатии кнопки отправлялось 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. Между красным и серым стоит резистор.

@Htoo, 👍-1
Обсуждение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
}
,
@Htoo
Смотрите также:
- Определение того, была ли нажата и отпущена кнопка
- SD-карта не инициализируется
- Arduino uno + cnc Shield v3 + драйвер шагового двигателя A4988 + AccelStepper?
- Хорошая кнопка debouncing/Библиотека StateChange
- Остановить мигание светодиодов
- Вопрос новичка с 4-контактной кнопкой
- Интеграция 2 кнопок для включения и выключения светодиода.
- Код Arduino для управления 4 светодиодами с 4 кнопок
У меня нет ответа на ваш вопрос по кодировке, но ваша проблема почти наверняка связана с дребезгом контактов. Настройки устранения дребезга контактов существуют, но они, как правило, односторонние. Лучше всего определить нажатие, сделать небольшую задержку и убедиться, что кнопка всё ещё нажата., @Milliways
@Milliways Я совсем новичок в этой области. Не могли бы вы подсказать мне, как в этом разобраться? Спасибо., @Htoo
Есть много ссылок, например https://playground.arduino.cc/Learning/SoftwareDebounce, @Milliways
Пытаюсь разобраться с подключением кнопки. Похоже, у вас есть +5 В -> Резистор -> Земля, а также GPIO -> Земля, и ещё один — Ничего -> Кнопка -> Земля. Узнайте, как подключить кнопку!, @Majenko