вывод в Serial данных

onniks
Offline
Зарегистрирован: 25.02.2017

Добрый день.

Есть код, в котором совершается звонок на номер телефона по событию.

Serial.println("AT + CMGS = \"+79ххххххх\"");

Эта строка встречается в коде несколько раз с одинаковым номером телефона.

Разумно номер телефона записать  в переменную в начале скетча(пусть TEL_NUMB), а потом вызывать в нужном месте.

Вопрос, как в данной строке вызвать эту переменную, учитывая все символы?

onniks
Offline
Зарегистрирован: 25.02.2017

уточню, в строке выше идет посылка сообщения, но суть не важна.

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

Можно вообще вынести в функцию и в дополнение задействовать F() макрос.

void callMe(){
Serial.println(F("AT+CMGS=\"+79xxxxxxxxx\""));
}

Также можно использовать такую конструкцию:

char* Phone = "+79xxxxxxxxx";
char* message = "ALL IS OK";

void SendSMS(char* Phone, char* message){
char buf[512];
sprintf_P(buf,PSTR("AT+CMGS=\"%s\"\013%s\026"),Phone,message);
Serial.print(buf);
}

 

onniks
Offline
Зарегистрирован: 25.02.2017

Да, уже думал над этим, если не решу вопрос с выводом, так и слделаю, спасибо.

onniks
Offline
Зарегистрирован: 25.02.2017

Вот, нашел на просторах

Serial.println("AT+CMGS=\"" + phone + "\"");

Естественно переменную phone нужно заранее объявить.

Сейчас проверю.

onniks
Offline
Зарегистрирован: 25.02.2017

проверил, если переменную phone объявлять в начале скетча с помощью #define, то строка пишется без "+"

Serial.println("AT+CMGS=\""phone"\"");

onniks
Offline
Зарегистрирован: 25.02.2017

Если делать отправку sms отдельной функцией:

void sms(String text, String phone)
        {
                  Serial.println("ATH0");                                // сбрасываем вызов если был
                  delay(1000);
                  Serial.println("AT + CMGS = \""+phone+"\"");    //ввод команды с номером телефона
                  delay(1000);
                  Serial.print((char)13);                                                    //символ ввод
                  delay(1000);
                  Serial.print(text);                      // текст смс
                  delay(1000);
                  Serial.print((char)26);                          // Отправляем Ctrl+Z
                  delay(5000);
        }

то присутствие "+" обязательно.

Забирайте, кому нужно.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

onniks,

сравниваю два Ваших поста

onniks пишет:

проверил, если переменную phone объявлять в начале скетча с помощью #define, то строка пишется без "+"

Serial.println("AT+CMGS=\""phone"\"");

onniks пишет:

Если делать отправку sms отдельной функцией:

void sms(String text, String phone)
        {
                  Serial.println("ATH0");                                // сбрасываем вызов если был
                  delay(1000);
                  Serial.println("AT + CMGS = \""+phone+"\"");    //ввод команды с номером телефона
                  delay(1000);
                  Serial.print((char)13);                                                    //символ ввод
                  delay(1000);
                  Serial.print(text);                      // текст смс
                  delay(1000);
                  Serial.print((char)26);                          // Отправляем Ctrl+Z
                  delay(5000);
        }

то присутствие "+" обязательно.

И делаю вывод, что Вы ничего не поняли. Задача решилась случайным попаданием, а понимания (например, того, что функция там или не функция - это совсем не при делах, не в функции счастье) у Вас нет.

Вы бы лучше разобрались с этим, а то такое решение, это ... до следующих граблей.

И ещё, я задолбался писать этюды про память, которые никто не читает. Пожалуйста, запомните, что вот такая запись:

void sms(String text, String phone)

оправдана только в том случае, если Вы никак не можете обойтись без того, чтобы менять Ваши параметры внутри функции, но нельзя чтобы эти изменения отразились на вызывающем коде. Если Вы уже пять раз подумали как этого избежать, но никак не можете. В любом другом случае (если Вы не собираетесь менять параметры, как в Вашем примере), передавать надо ссылку

void sms(String & text, String & phone)

ну, или указатель. Почему - подробно расписано в третьем этюде про память.

onniks
Offline
Зарегистрирован: 25.02.2017

сейчас пойду почитаю