Arduino + GSM/GPRS/GPS Shield(B) отправка СМС без подключения к USB

Vit_3
Offline
Зарегистрирован: 10.03.2017

Добрый день знатокам, подскажите пожалуйста почему не отправляются СМС при отключении Arduino от COM порта, С подключенным кабелем проблем нет. Использую Arduino UNO и GSM/GPRS/GPS Shield(B). Код стандартный.

#include <SoftwareSerial.h>
#include <EEPROM.h>
#include <MsTimer2.h>
SoftwareSerial mySerial(2, 3); // RX, TX

void Setting_Phone();
void EEPROM_Load();
void sms(String text, String phone);

void to_Timer();

// Переменные

char TelOut[30];            // переменная для хранения массива до 30 символов (Телефон)
char TimeOut[30];           // переменная для хранения массива до 30 символов (Время между сеансами)
char IPOut[30];             // переменная для хранения массива до 30 символов (IP адрес)

int LOW_INTERVAL = 500;     // сколько времени выдавать LOW
long HIGH_INTERVAL;         // сколько времени выдавать HIGH
long HIGH_INT;

void setup() {
   Setting_Phone();

   MsTimer2::set(HIGH_INTERVAL, to_Timer);  // Здесь задаем период
   MsTimer2::start();                       //Стартуем, теперь таймер запущен
}

void loop() {

   if (mySerial.available()) {
      Serial.write(mySerial.read());
      }
   if (Serial.available())   {
      mySerial.write(Serial.read());
      }
}

void Setting_Phone() {
  delay(2000);                          //время на инициализацию модуля
  Serial.begin(115200);                 //Скорость порта для связи Arduino с компьютером
 
  mySerial.begin(19200);                //Скорость порта для связи Arduino с GSM модулем
  mySerial.println("AT+CLIP=1");        //включаем АОН
  delay(100);
  mySerial.println("AT+CMGF=1");        //режим кодировки СМС - обычный (для англ.)
  delay(100);
  mySerial.println("AT+CSCS=\"GSM\"");  //режим кодировки текста
  delay(100);
  mySerial.println("AT+CMGL=ALL");
  delay(100);
  Serial.setTimeout(20);                // Время ожидания завершения передачи в порту
  EEPROM_Load();
  HIGH_INT = atol(TimeOut);             // Из String в long(большие числа)
  HIGH_INTERVAL = HIGH_INT * 1000L;
}

void EEPROM_Load() {
  // ------------------------ Чтение из EEPROM ------------------------
    EEPROM.get(0, TelOut);   // считываем массив символов по адресу addr 0
    EEPROM.get(30, TimeOut); // считываем массив символов по адресу addr 30
    EEPROM.get(60, IPOut);   // считываем массив символов по адресу addr 60
  // ------------------------------------------------------------------
}

void sms(String text, String phone) {
  Serial.println("SMS send started");
  mySerial.println("AT+CMGS=\"" + phone + "\"");
  delay(1000);
  mySerial.print(text);
  delay(300);
  mySerial.print((char)26);
  delay(300);
  Serial.println("SMS send finish");
  delay(2000);
}

void to_Timer()//Функция Таймер
{
   sms(String("Hello Word"), TelOut);
}

 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Если это действительно так

Vit_3 пишет:

С подключенным кабелем проблем нет.

На ум приходит только одна мысль - нет питания.

belousovev
Offline
Зарегистрирован: 14.02.2017

Попробуйте вот такую функцию отправки СМС:

void SendSMS (char* number, char* SMS)
{
  Serial.print("AT+CMGS=\"");delay(1000);
  Serial.print(number);delay(1000);
  Serial.print("\"\r");delay(1000);
  Serial.print(SMS);delay(1000);
  Serial.print((char)26);delay(1000);
}
Vit_3
Offline
Зарегистрирован: 10.03.2017

Дело в том, что с питанием нет проблем, если использовать библиотеку SIM900, то все отправляется, но мне необходимо чтоб можно было подключаться портом и прописывать EEPROM, не хотел переписывать весь код, да и библиотека как то работает не очень, то компилится, то нет. У меня есть такой вопросик, чем отличаются порты 2 и 3 от 7 и 8, может в них проблемма? Примерчик ваш попробую, по результатам напишу.

Vit_3
Offline
Зарегистрирован: 10.03.2017

Нашел проблемму, может быть кому то понадобиться. В посте №1 строка № 40, необходимо изменить время задержки delay(2000); на delay(10000);. Arduin-ке не хватает времени на запуск, после изменения все работает идеально. Отдельное спасибо, тем кто откликнулся.