Работа с разными SerialX одной функцией

Андрей А
Offline
Зарегистрирован: 28.06.2016

Добрый вечер.

Имею Arduino Mega 2560, как все знают на борту есть у неё несколько Serial(0,1,2,3) портов.

Был написан вполне рабочий скетч работы Arduino с GSM модулем Neoway M590 и всё работало, но не без проблем, данный модуль не без проблем.
В связи с этим возникла необходимость добавить ещё один модуль SIM800C с SIM картой другого оператора.
 
Основные команды для работы с GSM модулями идентичны соответственно и функции.
 
И вот тут я столкнулся с проблемой, не могу понять как заставить работать одну и ту же функцию с разными Serial (Serial1, Serial2)
 
к примеру отправка SMS
 
void gsmSendSMS(String smsText, String phoneNum) {
  Serial1.println(atpCmd + "CMGS=\"" + phoneNum + "\"");
  delay(100);
  Serial1.print(smsText);
  delay(100);
  Serial1.print((char)26);
  delay(100);
}

Подскажите как можно передать номер Serial ?

 
Спасибо.
DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Вместо Serial передавать Stream*:

void gsmSendSMS(Stream* stream, String smsText, String phoneNum)
 {
  stream->println(atpCmd + "CMGS=\"" + phoneNum + "\"");
  delay(100);
  stream->print(smsText);
  delay(100);
  stream->print((char)26);
  delay(100);
}

gsmSendSMS(&Serial,"text","123456");
gsmSendSMS(&Serial1,"text","123456");
gsmSendSMS(&Serial2,"text","123456");
gsmSendSMS(&Serial3,"text","123456");

 

Андрей А
Offline
Зарегистрирован: 28.06.2016

Попробовал, копилится.

Завтра залью проверю.

Большое спасибо за помощь.

Андрей А
Offline
Зарегистрирован: 28.06.2016

Добрый день.

Всё работает.

Но возник вопрос, возможно ли и как правильно объявить в массиве Stream * stream = &Serial1;, для того чтобы потом в цикле можно было их перебирать и подставлять в функции?

 

Спасибо.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015
Stream* streams[4] = {
&Serial,
&Seria1,
&Serial2,
&Serial3
};

for(byte i=0;i<4;i++)
{
    Stream* s = streams[i];
    s->println("Hello there!");
}

 

Андрей А
Offline
Зарегистрирован: 28.06.2016

Большое Спасибо, сейчас попробую.