Доброго времени суток! Помогите запустить третий пример "Управление светодиодами с помощью SMS" http://wiki.amperka.ru/беспроводная-связь:gprs-shield . Использую GPRS/GSM Shield на чипе AT139 http://linksprite.com/wiki/index.php5?title=ATWIN_Qua.. . В скетче поменял только пины подключения на 0, 1 и скорость 9600. (первые 2 примера работают)
Доброго. =) Какой ардуиной "раскачиваете" шилд? У Yun, например, ноги 0, 1 заняты внутренней коммуникацией с AR9331, там, можно сказать, ничего другого не вешается.
Как выяснилось, что работает только, когда открываешь сериал монитор порта в ардуино оболочке, или любую другую программу терминал. Можно ли сделать, чтобы работало автономно, не подключая USB к компьютеру? Подскажите... #include <SoftwareSerial.h> SoftwareSerial gprsSerial(1, 0); // RX, TX int greenPin = 2; int bluePin = 3; void setup() { gprsSerial.begin(38400); pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT); // Настраиваем приём сообщений с других устройств // Между командами даём время на их обработку gprsSerial.print("AT+CMGF=1\r"); delay(300); gprsSerial.print("AT+IFC=1, 1\r"); delay(300); gprsSerial.print("AT+CPBS=\"SM\"\r"); delay(300); gprsSerial.print("AT+CNMI=1,2,2,1,0\r"); delay(500); } String currStr = ""; // Переменная принимает значение True, если текущая строка является сообщением boolean isStringMessage = false; void loop() { if (!gprsSerial.available()) return; char currSymb = gprsSerial.read(); if ('\r' == currSymb) { if (isStringMessage) { //если текущая строка - SMS-сообщение, //отреагируем на него соответствующим образом if (!currStr.compareTo("Green on")) { digitalWrite(greenPin, HIGH); } else if (!currStr.compareTo("Green off")) { digitalWrite(greenPin, LOW); } else if (!currStr.compareTo("Blue on")) { digitalWrite(bluePin, HIGH); } else if (!currStr.compareTo("Blue off")) { digitalWrite(bluePin, LOW); } isStringMessage = false; } else { if (currStr.startsWith("+CMT")) { //если текущая строка начинается с "+CMT", //то следующая строка является сообщением isStringMessage = true; } } currStr = ""; } else if ('\n' != currSymb) { currStr += String(currSymb); } }
Может быть от того, что на аппаратный Serial настроен SoftwareSerial? Если общение с шилдом осуществляется по пинам 0 и 1, то, как мне кажется, следует использовать просто Serial для общения с шилдом. А если необходим SoftwareSerial, то нужно настроить шилд и почитать, через какие пины в этом случае осуществляется обмен. Насколько я понимаю, на этом шилде, как и на аналогичных, имеются перемычки, переключающие режим. Соответственно, для настройки шилда нужно установить перемычки в нужное положение согласно его описанию.
Пробовал менять в скетче SoftwareSerial на Serial, конечный результат получился тот же. Перемычки установлены правильно, в положении замыкая rx-mtx, tx-mrx.