UNO and SIM900R
- Войдите на сайт для отправки комментариев
Пнд, 27/03/2017 - 10:28
Добрый день. Помогите разобраться. Sim900R и UNO. Собраны бутербродом, TX с модуля подключен к 11PIN уны, RX к 10 pin. Заливаю скетч стандартный из библиотеки и во всех результатах приходит INIT ERROR. Что делаю не так. Пару дней нормально работало, потом все вот пропало и никак не могу подцепиться. Не отвечает ни на какие команды. По индикации сеть находит и регистрируется.
// она нужна для работы библиотеки GPRS_Shield_Arduino #include <SoftwareSerial.h> // создаём объект mySerial и передаём номера управляющих пинов RX и TX SoftwareSerial mySerial(10, 11); // буфер PC Serial char bufferPC_Serial[64]; // буфер GPRS Serial char bufferGPRS_Serial[64]; int i = 0; int j = 0; void setup() { // включаем GPRS-шилд gprs_OnOff(); // открываем последовательный порт для мониторинга действий в программе Serial.begin(9600); // открываем последовательный порт // для связи с GPRS-устройством со скоростью 9600 бод mySerial.begin(9600); while (!Serial) { // ждём, пока не откроется монитор последовательного порта // для того, чтобы отследить все события в программе } // пока не установится связь с GPRS-устройством, будем крутиться в теле функции gprsTest(); } void loop() { // считываем данные с компьютера и записываем их в GPRS Shield serialPCread(); // считываем данные с GPRS Shield и выводим их в Serial-порт serialGPRSread(); } void serialPCread() { i = 0; // если появились данные с компьютера if (Serial.available() > 0) { while (Serial.available() > 0) { // пока идёт передача данных, // записываем каждый байт в символьный массив bufferPC_Serial[i++]=(Serial.read()); } // добавляем символ конца строки bufferPC_Serial[i] = '\0'; // записываем данные в GPRS Shield mySerial.println(bufferPC_Serial); Serial.println(""); // очищаем буфер PC Serial clearBufferPC_Serial(); } } void serialGPRSread() { j = 0; // если появились данные с GPRS Shield if (mySerial.available() > 0) { while (mySerial.available() > 0) { // пока идёт передача данных, // записываем каждый байт в символьный массив bufferGPRS_Serial[j++]=(mySerial.read()); } // добавляем символ конца строки bufferGPRS_Serial[j] = '\0'; // выводим полученные данные с GPRS Shield в Serial-порт Serial.write(bufferGPRS_Serial); // очищаем буфер GPRS Serial clearBufferGPRS_Serial(); } } void clearBufferPC_Serial() { for (int t = 0; t < i; t++) { // очищаем буфер, // присваивая всем индексам массива значение 0 bufferPC_Serial[t] = 0; } } void clearBufferGPRS_Serial() { for (int t = 0; t < j; t++) { // очищаем буфер, // присваивая всем индексам массива значение 0 bufferGPRS_Serial[t] = 0; } } void gprsTest() { // бесконечный цикл while (1) { // ждём 1 секунду delay(1000); j = 0; // посылаем в GPRS Shield АТ-команду "AT" mySerial.println("AT"); // если появились данные с GPRS Shield if (mySerial.available() > 0) { while (mySerial.available() > 0) { // пока идёт передача данных, // записываем каждый байт в символьный массив bufferGPRS_Serial[j++] = mySerial.read(); } // добавляем символ конца строки bufferGPRS_Serial[j] = '\0'; // посылаем АТ-команду "AT"; если GPRS Shield исправен, // он должен вернуть команду "AT"; // сравниваем всё что находиться в буфере GPRS Shield // со строкой "AT\r\n\r\nOK\r\n" if (strcmp(bufferGPRS_Serial, "AT\r\n\r\nOK\r\n") == 0) { // если всё верно выводим в Serial порт "State OK" // и выходим из бесконечного цикла Serial.println("State OK"); break; } else { // если строки разные, значит произошла ошибка // выводим сообщение об ошибке и продолжаем цикл Serial.println("Init ERROR"); } } // очищаем буфер GPRS Serial clearBufferGPRS_Serial(); } } void gprs_OnOff() { // настраиваем пин №2 в режим выхода pinMode(2, OUTPUT); // проверяем состояние 3 пина if (digitalRead(3) != HIGH) { // если на нём «низкий уровень» // подаём на пин 2 «высокий уровень» digitalWrite(2, HIGH); // ждём 3 секунды delay(3000); } // подаём на пин 2 «низкий уровень» digitalWrite(2, LOW); }
День добрый.
Попробуйте вывести в последовательный порт, что модем на AT отвечает. Перед 123 строкой Serial.println(bufferGPRS_Serial)
Спасибо. решилась проблема по другому. Был включен режим сна - AT+CSCLK=1. Поэтому модуль не отвечал ни на что. AT+CSCLK=0 все исправило