Официальный сайт компании Arduino по адресу arduino.cc
Помощь с кнопкой в скетче
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Втр, 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 мс.
А можете добавить это в коде ? пожалуйста ..
А можете добавить это в коде ? пожалуйста ..
Нет
Спасибо большое , разобрался , ваша подсказка помогла )))
Скоро похоже наконец то заработает система ЭРА-ГЛОНАСС :-)
Неделю назад проходил тех осмотр. Проверщик ткнул в кнопочку. Тётенька ответила - проверщик сказал проверка техосмотр и всё погасло. На что проверщик сказал - О! Уже работает!