Запись тел.ноера в СИМ

stboris
Offline
Зарегистрирован: 12.04.2015
Для записи тел. номера в СИМ используется команда:
 
gsm.SimpleWriteln( "AT+CPBW = 5, "+380671234566 ","  ) ;
 
При компилировании выдается ошибка:
GSM_GPRSLibrary_AT_MY_PROJECT.ino:95:50: error: expected ')' before string constant
Error compiling.
ino:95:50  соответствует порядковому номеру данной команды в программе
 
Помогите осознать в чем ошибка?
При вводе команды из терминала номер записывается без проблем
Спасибо
 
X-Dron
Offline
Зарегистрирован: 24.01.2015

IMHO +380671234566 нужно принудительно перевести в строку. + может оцениваться как конкатинация строк

Datak
Offline
Зарегистрирован: 09.10.2014

Кавычки там неправильно расставлены, проверьте.
И последняя запятая - зачем она, если после неё ничего нет?

stboris
Offline
Зарегистрирован: 12.04.2015

А как правильно кавычки расставить?Я их уже по разному расставлять пробовал.Ничего не меняется.Запятая случайно осталась

X-Dron
Offline
Зарегистрирован: 24.01.2015

а так?

gsm.SimpleWriteln( "AT+CPBW = 5, +380671234566");
или
gsm.SimpleWriteln( "AT+CPBW = 5,"+"+380671234566");
или
String CmdString =  String("AT+CPBW = 5,"+"+380671234566");
gsm.SimpleWriteln(CmdString);

 

stboris
Offline
Зарегистрирован: 12.04.2015
1)Компиляция проходит,но прив ыполнении программы в Serial Мonitor модем возврашает

OK
Phone book nomber will be save

ERROR 
и номер не сохраняется

2)

GSM_GPRSLibrary_AT_MY_PROJECT.ino:96:36: error: invalid operands of types 'const char [13]' and 'const char [14]' to binary 'operator+'


3)C:\Users\66\Documents\Arduino\libraries\GSMSHIELDv3.071beta/SIM900.h:37:10: note:   no known conversion for argument 1 from 'String' to 'int'

 

stboris
Offline
Зарегистрирован: 12.04.2015

gsm.SimpleWriteln( "AT+CPBW = 5, "+380671234566");

Если ввести из терминала , то номер сораняется успешно

stboris
Offline
Зарегистрирован: 12.04.2015
gsm.SimpleWriteln( "AT+CPBW = 5, "+380671234566"');
Вот так ,если из терминала ввести то все сохраняется

 

inspiritus
Offline
Зарегистрирован: 17.12.2012

Хм ... Сигналку для монтенегры творите ?

я всегда думал, что кавычек " должно быть четное количество, а именно две.

Datak
Offline
Зарегистрирован: 09.10.2014

stboris пишет:

А как правильно кавычки расставить?Я их уже по разному расставлять пробовал.Ничего не меняется.

Я же не знаю, какую вы команду набираете в терминале. :)

Вот, X-Dron написал - первый вариант скорее всего будет работать.









gsm.SimpleWriteln( "AT+CPBW = 5, +380671234566" );

Второй и третий, насколько я понимаю, будут работать неправильно, даже если скомпилируются без ошибок.
Строковые константы объединяются без знака "+", вот так:









gsm.SimpleWriteln( "AT+CPBW = 5, " "+380671234566" );

Разницы с первым вариантом никакой.

Объекты типа String суммировать плюсом можно, но для этого компилятор должен понять, что хотя бы одно из слагаемых имеет этот тип. Как-нибудь так:









String CmdString = String( "AT+CPBW = 5," ) + "+380671234566";

Правда, аргумент типа String скорее всего не понравится функции gsm.SimpleWriteln, и придётся его снова преобразовывать в обычную строку.

-----

И ещё, там в строках пробелы встречаются. Не знаю, допустимы ли они в модемных командах. Если не работает - попробуйте без них.

stboris
Offline
Зарегистрирован: 12.04.2015
AT+CPBW = 5,"+380671234566"
Это формат команды в терминале и она успешно сохраняет номер

 

stboris
Offline
Зарегистрирован: 12.04.2015

В первом варианте компиляция проходит  успкшн   нр при выполнении модем возвращает ошибку и номер не сохраняется

Datak
Offline
Зарегистрирован: 09.10.2014

stboris пишет:





AT+CPBW = 5,"+380671234566"
Это формат команды в терминале и она успешно сохраняет номер

А, понял. Кавычки тоже должны входить в передаваемую строку. :)



gsm.SimpleWriteln( "AT+CPBW=5,\"+380671234566\"" );

 

X-Dron
Offline
Зарегистрирован: 24.01.2015

По описанию команды в SimpleWriteln в библиотеке, она имеет всегда один аргумент. (char *comm, или char const *comm, или const __FlashStringHelper *pgmstr, или int comm)
Соответственно, там не должно быть ничего кроме строки символов. Как уже рекомендовали попробуйте убрать лишние пробелы, или создайте строку с указанием, что номер в международном формате.
gsm.SimpleWriteln( "AT+CPBW=5,+380671234566");
или
gsm.SimpleWriteln( "AT+CPBW=5,+380671234566,145");

насчет \" тоже хорошая идея

stboris
Offline
Зарегистрирован: 12.04.2015
gsm.SimpleWriteln( "AT+CPBW=5,\"+380671234566\"" );


Это работает.

 

stboris
Offline
Зарегистрирован: 12.04.2015

Datak,X-Dron огромное спасибо.

Благодарность всем принявшим участие в обсуждении