Arduino + GSM/GPRS/GPS Shield(B) отправка СМС без подключения к USB
- Войдите на сайт для отправки комментариев
Пт, 10/03/2017 - 16:43
Добрый день знатокам, подскажите пожалуйста почему не отправляются СМС при отключении 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);
}
Если это действительно так
С подключенным кабелем проблем нет.
На ум приходит только одна мысль - нет питания.
Попробуйте вот такую функцию отправки СМС:
Дело в том, что с питанием нет проблем, если использовать библиотеку SIM900, то все отправляется, но мне необходимо чтоб можно было подключаться портом и прописывать EEPROM, не хотел переписывать весь код, да и библиотека как то работает не очень, то компилится, то нет. У меня есть такой вопросик, чем отличаются порты 2 и 3 от 7 и 8, может в них проблемма? Примерчик ваш попробую, по результатам напишу.
Нашел проблемму, может быть кому то понадобиться. В посте №1 строка № 40, необходимо изменить время задержки delay(2000); на delay(10000);. Arduin-ке не хватает времени на запуск, после изменения все работает идеально. Отдельное спасибо, тем кто откликнулся.