Помощь с кнопкой в скетче
- Войдите на сайт для отправки комментариев
Втр, 22/06/2021 - 10:48
Всем привет .
Возникла маленькая проблема , собираю телефон с одной кнопкой , в программирование уровень копи-паста .
Проблема в том что у меня получилось звонить с кнопки , но я не могу сбросить вызов этой же кнопкой .
Не знаю куда записать строку сброса sendATCommand("ATH;", true); .
Логика такова , нажал на кнопку пошел вызов , нажал еще раз на кнопку , вызов сброшен .
Кнопку которую вставил сам находится в loop в самом начале .
Буду рад помощи .
#include <SoftwareSerial.h> // Библиотека програмной реализации обмена по UART-протоколу
SoftwareSerial SIM800(8, 9);// RX, TX
String _response = ""; // Переменная для хранения ответа модуля
const int buttonPin = 2; // вывод для кнопки
const int ledPin = 13; // вывод для светодиода
#include <SoftwareSerial.h>
int buttonState = 0;
void setup() {
Serial.begin(9600); // Скорость обмена данными с компьютером
SIM800.begin(9600); // Скорость обмена данными с модемом
Serial.println("Start!");
pinMode(ledPin, OUTPUT);
// режим ввода для кнопки
pinMode(buttonPin, INPUT);
sendATCommand("AT", true);
// / Отправили AT для настройки скорости обмена данными
// Команды настройки модема при каждом запуске
_response = sendATCommand("AT+CLIP=1", true); // Включаем АОН
_response = sendATCommand("AT+CRSL=100", true);
//_response = sendATCommand("AT+DDET=1", true); // Включаем DTMF
}
String sendATCommand(String cmd, bool waiting) {
String _resp = ""; // Переменная для хранения результата
Serial.println(cmd); // Дублируем команду в монитор порта
SIM800.println(cmd); // Отправляем команду модулю
if (waiting) { // Если необходимо дождаться ответа...
_resp = waitResponse(); // ... ждем, когда будет передан ответ
// Если Echo Mode выключен (ATE0), то эти 3 строки можно закомментировать
if (_resp.startsWith(cmd)) { // Убираем из ответа дублирующуюся команду
_resp = _resp.substring(_resp.indexOf("\r", cmd.length()) + 2);
}
Serial.println(_resp); // Дублируем ответ в монитор порта
}
return _resp; // Возвращаем результат. Пусто, если проблема
}
String waitResponse() {
// Функция ожидания ответа и возврата полученного результата
String _resp = ""; // Переменная для хранения результата
long _timeout = millis() + 10000; // Переменная для отслеживания таймаута (10 секунд)
while (!SIM800.available() && millis() < _timeout) {}; // Ждем ответа 10 секунд, если пришел ответ или наступил таймаут, то...
if (SIM800.available()) { // Если есть, что считывать...
_resp = SIM800.readString(); // ... считываем и запоминаем
}
else { // Если пришел таймаут, то...
Serial.println("Timeout..."); // ... оповещаем об этом и...
}
return _resp; // ... возвращаем результат. Пусто, если проблема
}
void loop() {
//////////////////////////////////////////////////////////////////////////////////////вот это я добавил
buttonState = digitalRead(buttonPin); // считываем состояние кнопки
if (buttonState == HIGH) { // если кнопка нажата, то её состояние HIGH:
digitalWrite(ledPin, HIGH); // включаем светодиод
Serial.println("Нажата");
sendATCommand("ATD+сюда вписывается номер;", true);
} else {
digitalWrite(ledPin, LOW); // иначе выключаем светодиод
}
////////////////////////////////////////////////////////////////////////////////////////////
if (SIM800.available()) { // Если модем, что-то отправил...
_response = waitResponse(); // Получаем ответ от модема для анализа
_response.trim(); // Убираем лишние пробелы в начале и конце
Serial.println(_response);
// Если нужно выводим в монитор порта
if (_response.startsWith("RING")) { // Есть входящий вызов
sendATCommand("ATA", true); // Отвечаем на вызов
// или
sendATCommand("ATH", true);
// Отклоняем вызов
}
}
if (Serial.available()) { // Ожидаем команды по Serial...
SIM800.write(Serial.read()); // ...и отправляем полученную команду модему
};
}
Логика такова , нажал на кнопку (1) пошел вызов (2), нажал еще раз на кнопку (3), вызов сброшен (4).
1) если flag==0
2) flag=1
3) если flag==1
4) flag=0
Примерно так. И кнопку достаточно читать раз в 20-40 мс.
А можете добавить это в коде ? пожалуйста ..
А можете добавить это в коде ? пожалуйста ..
Нет
Спасибо большое , разобрался , ваша подсказка помогла )))
Скоро похоже наконец то заработает система ЭРА-ГЛОНАСС :-)
Неделю назад проходил тех осмотр. Проверщик ткнул в кнопочку. Тётенька ответила - проверщик сказал проверка техосмотр и всё погасло. На что проверщик сказал - О! Уже работает!