Управление переменными через смс SIM800L
- Войдите на сайт для отправки комментариев
Втр, 18/04/2017 - 13:54
Всем доброго дня! Хочу в будущем собрать один большой проект на ардуино. А пока времяни на это нет изучаю программирование. в общем информации для моего проекта достаточно, хотелось бы иметь и дополнительное управление по смс. интернет там не ловит. смс без проблем. На просторах интернета я не нашел информации о том что можно изменять какие то переменные программы через смс. или хотя бы отправлять смс с сразу несколькими командами. ибо каждый параметр изменять одним смс может быть достаточно накладно и не удобно.
Помогите кто сколько сможет!!!!!
1. Я не понял вопроса. Собственно вопроса-то в Вашем тексте как такового нет.
2. Какой именно помощи Вы ожидаете? У Вас же нет скетча, на который можно посмотреть и что-то подсказать. Также, если я правильно понял, у Вас не оборудования га котором Вы можете что-то пробовать (или есть?). Чего Вы ждёте от помогающего?
оборудование в проекте.
это первый вопрос.
программа почти написана. но она сейчас разбросана клоками. собрать их в кучу не проблема.
но вопросы у меня только в этих двух кусках относительно модуля GSM.
команды работают только в формате 1-1 и т.д.
1 команда за 1 смс.
Я видел как кто-то делал 4команды за 1 смс. в формате например в смс 1-0 2-1 3-1 4-2
я как не пытался но повторить не смог. при отправки команд даж в формате 1-1 2-1 он вообще ничего не делает.
как это сделать?
это второй вопрос
Можно ли через смс изменять значение ">30"?
это первый вопрос.
Можно.
Это первый ответ.
Я видел как кто-то делал 4команды за 1 смс. в формате например в смс 1-0 2-1 3-1 4-2
я как не пытался но повторить не смог. при отправки команд даж в формате 1-1 2-1 он вообще ничего не делает.
как это сделать?
это второй вопрос
Рабирать полученную строку. Рабивать её на команды и исполнять их по одной. Т.е. алгоритм примерно такой:
1. Установить "начало команды" на начало строки
2. Идём по строке и сравниваем каждый символ со спец. символом "конец команды"
3. Если найден "конец команды" или строка закончилась, то исполнить одну команду содержащуюся в строке в позициях от "начала команды" до текущего символа
4. Если в п.3 был найдет символ "конец команды", то установить начало команды на следующий символ и перейти к п. 2.
5. Завершить работу.
Прежде чем расписывать подробнее, мне бы хотелось посмотреть как именно Вы "как не пытался" и уже оттуда плясать. Или может быть, сейчас, после того, как я описал алгоритм Вы захотите ещё раз попытаться.
Это второй ответ.
1. Установить "начало команды" на начало строки
2. Идём по строке и сравниваем каждый символ со спец. символом "конец команды"
3. Если найден "конец команды" или строка закончилась, то исполнить одну команду содержащуюся в строке в позициях от "начала команды" до текущего символа
4. Если в п.3 был найдет символ "конец команды", то установить начало команды на следующий символ и перейти к п. 2.
5. Завершить работу.
Принцип мне понятен. Но как это сделать програмно просто не знаю.
Я по образованию инженер-механик. и обучение по ардуино основано на скачивании чужих скетчей. сидел разбирался. вникал. читал описание библиотек.
Я думаю что на мои попытки смотреть смысла нет. я сам уже понял что все что я применял полный бред.
начинаю соображать.
char
Str3[8] = {
'a'
,
'r'
,
'd'
,
'u'
,
'i'
,
'n'
,
'o'
,
'\0'
};
таким образом мы разбиваем сообщение на символы... вот начало и конец.
и потом их можно обрабативать в виде:
if (a == чему то; r == чему то;) {
сделать это;
}
Я в правильном направлении?
Нет.
Вы получиди строку. Строка состоит из команд (в общем виде они называются лексемами). 1. Вы должны уметь отделять оду лексему от другой. Проще всего это сделать, имея символ разделитель. Например, все команды разделяются символом ';'. Теперь Вы знаете, что первая команда у Вас идёт от начала строки до символа ';' или до конца строки (что вперёд попадётся). Если первая команда закончилась ;, значит есть вторая, которая начинается сразу за ; и идёт до новой ; или до конца строки (что вперёд встретится). И так далее. По этой ; Вы разделяете строку на команды.
Как конкретно это делается - гуглите "примеры использования функции strtok"
Извиняюсь за вопросы немного не в тему.
1. Если подобным образом все время принимать и принимать СМС то не переполнится ли на модуле память и не получится ли из-за этого какого-либо конфликта при дальшейней работе с модулем?
2. Если переполнение возможно то как лучше всего почистить память применительно к данному алгоритму?
Спасибо.
1. Если подобным образом все время принимать и принимать СМС то не переполнится ли на модуле память и не получится ли из-за этого какого-либо конфликта при дальшейней работе с модулем?
2. Если переполнение возможно то как лучше всего почистить память применительно к данному алгоритму?
1. Переполнится. У вас в скетче СМС сохраняются на СИМ-карту - (строка 22, команда gprsSerial.print("AT+CPBS=\"SM\"\r");). Памяти на СИМ-ке обычно хватает на десяток-другой СМС, как только она заполнится, новые СМС приниматься не будут.
2. Командой AT+CMGD нужно стирать ненужные СМС с карты
Спасибо !
А если память под СМСки заполнена, то модуль и отправлять СМС тоже не будет?
А если память под СМСки заполнена, то модуль и отправлять СМС тоже не будет?
Вроде бы не должно влиять, но лучше проверить. Я бы для надежности в начале скетче стирал все СМС с СИМ-карты, а потом принимал СМС и сразу удалял их