Есть мега 2560, к ней подцепил GSM модуль 5 вольтовый Sim800C, выходы у него уже идут через понижение уровней. Как правильно запитать через повербанк, чтоб он заряжался и в случае пропадения внешнего питания отправлял смс. Со скетчем вопроса нет, сделаю. Вопрос больше в безопасном подключении. Ток, насколько я понимаю, на модуль идёт не слабый, поэтому от ардуинского пина 5 вольт напрямую запитывать не берусь. Идея пока такая, но рассудите знающие. К питанию повербанка подаю от внешнего питальника. Выход от повербанка сажаю один провод на сим модуль, и одновременно на USB питание ардуины. Земля общая. На входе питания повербанка поставить транзистор и подать на один из входов ардуины для контроля питания. Прав или нет.
И ещё вопрос как из сериала вытаскивать уровень сигнала в виде числа, какое можно использовать не как текс, а как число. Это чтоб он в смс сообщении писал уровень сигнала, чтоб следить за ним. Делаю напрямую через команду serial1.print
b707 Если бы нашёл пример без библиотеки gsm.h , то не спашивал бы. gsm библиотека не работает с данным шилдом, только напрямую и без всякого softserial
Зачем какие-то библиотеки для этого? Уровень сигнала запрашивается командой AT+CSQ, получаешь ответ в виде +CSQ: 17,0 и извлекаешь из него число без всяких библиотек. Все что нужно - написать на Си разбор строки, примеров этого в инете море.
b707 1. Ответ приходит совсем в другой форме, в виде 2 строк, вторую строку извлечь пока не удалось. Видать Вы проводили это на другом шилде. 2. Зачем тогда форум если всех в гугл отправлять. Для этого я и спрашиваю т.к решить проблему не могу и прошу может кто знает. 3. Не согласны, тогда goto 1
Форум - для обсуждения интересных тем. А не для того, чтобы новички по сотне раз тупо спрашивали то, что можно прочитать в документации или найти в Гугле. Извлечение уровня сигнала делается на любом модеме одинаково, поскольку базовые АТ-команды стандартные у всех модемов, изменения минимальны. Поэтому берете ЛЮБУЮ библиотеку под любой GSM-модем или шилд и находите в ней пример кода. Например, библиотека для sim900 Код (C++): bool GPRS::getSignalStrength(int *buffer) { //AT+CSQ --> 6 + CR = 10 //+CSQ: <rssi>,<ber> --> CRLF + 5 + CRLF = 9 //OK --> CRLF + 2 + CRLF = 6 byte i = 0; char gprsBuffer[26]; char *p, *s; char buffers[4]; sim900_flush_serial(); sim900_send_cmd(F("AT+CSQ\r")); sim900_clean_buffer(gprsBuffer, 26); sim900_read_buffer(gprsBuffer, 26, DEFAULT_TIMEOUT); if (NULL != (s = strstr(gprsBuffer, "+CSQ:"))) { s = strstr((char *)(s), " "); s = s + 1; //We are in the first phone number character p = strstr((char *)(s), ","); //p is last character """ if (NULL != s) { i = 0; while (s < p) { buffers[i++] = *(s++); } buffers[i] = '\0'; } *buffer = atoi(buffers); return true; } return false; }
b707 На дачу через выходные поеду скину что сериал пишет, там что-то вроде +CSQ: OK +AT: 17,0 Именно в две строки Первую разобрать сложности нет, а доступ до второй для меня сложность. Скатаюсь напишу точно.
b707 Ту процедуру, какую Вы описали может и проходит на шилде sim800 от SeedStudio, но не работает на аналогах, где вообще данная библиотека не работает. Напрямую из сериала вытащить ответ не удаётся со второй строки.
Пишите правильно - это Вам не удается вытащить ответ со второй строки, а в принципе там ничего сложного нет. Процедуру выше я вам привел КАК ПРИМЕР кода. Я не обещал, что она "из коробки" заработает. Ее надо чуть подправить под конкретный ответ модема. Если вы даже с примером не можете решить ерундовую задачу - значит надо учиться. Или обратится к кому-нибудь, кто напишет это для вас
b707 Что подправлять если то, что Вы привели это работает на основе библиотеки sim900.h, так же можно сделать и ещё проще с помощью библиотеки gsm.h. Поэтому и спросил кто подскажет как тоже самое сделать, только без использования данных библиотек. Тут нечего учить, тут всё просто ( то что Вы привели ). И модули что на m590, что на sim800-900 ответы дают идентичные, но всё они пишут в порт, откуда и надо вынимать информацию.
Вас почитать, так библиотека sim900.h написана сущестывами с другой планеты и недоступна человеческому разуму. Это не так. Исходный код доступен - посмотрите. что делают конкретные функции. Они довольно простые. Их легко заменить своим кодом и избавится от библиотеки. Одна посылает в порт строку команды - то же самое можно сделать вручную оператором Serial.println() Другая читает символы из порта в буфер. Дальше, уже непосредственно в том коде, который я привел - идет разбор содержимого буфера. Поймите, самый простой метод "написать без библиотек" - это разобрать код из библиотеки и вставить в свою программу. И что? "Вынимать информацию из порта" - это нереально сложно? В том примере, что я привел - именно это и делается, причем именно для разбора уровня сигнала сети. Если такого примера вам мало - думаю, вам надо бросить свою поделку и купить готовое устройство.
Отступление от темы: если Вы написали сообщение, но забыли что-то дописать, то нажмите кнопку "Редактировать", тогда не будет много сообщений. Красивее и удобнее.
gvera, я не вижу смысла продолжать дальше. В первом посте темы вы написали "со скетчем проблем не будет, напишу" - а теперь проявляете такой инфантилизм, что я начинаю сомневаться в правильности возраста в вашем профиле. Тех примеров и советов. что содержатся в теме - более чем достаточно, чтобы решить эту проблему. Посему отписываюсь. Удачи.