Доброго времени суток всем! Родителем этой темы является эта: http://forum.amperka.ru/threads/iskra-neo-gprs-shield-от-Амперки-нет-инициализации.6770/ . С теми же комплектующими: 1.ИСКРА NEO 2. GPRS шилд от Амперки 3. Работает это все на библиотеке GPRS Shield v1.0. Код: Код (C++): // библиотека для работы с GPRS устройством #include <GPRS_Shield_Arduino.h> #include <sim900.h> // библиотека для эмуляции Serial порта // она нужна для работы библиотеки GPRS_Shield_Arduino #include <SoftwareSerial.h> // номер на который будем отправлять сообщение #define PHONE_NUMBER "XXXXXXXXXX" // текст сообщения, которое будем отправлять #define MESSAGE "Привет от Ардуино" // создаём объект класса GPRS. GPRS gprs(19200); void setup() { pinMode(5, INPUT_PULLUP); pinMode(7, OUTPUT); pinMode(6, OUTPUT); pinMode(13, OUTPUT); digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(13, LOW); gprs.powerUpDown(); // проверяем, есть ли связь с GPRS-устройством while (!gprs.init()) { // если связи нет, ждём 1 секунду // процесс повторяется в цикле, // пока не появится ответ от GPRS-устройства delay(1000); digitalWrite(7, LOW); } digitalWrite(7, HIGH); } void loop() { if (!digitalRead(5)) { digitalWrite(6, HIGH); digitalWrite(13, HIGH); //Отправляем SMS gprs.sendSMS("XXXXXXXXXX", MESSAGE); } else { digitalWrite(6, LOW); digitalWrite(13, LOW); } } Лампочки для красоты =)) Захотел я отправить русские символы - получил кракозябры. АТ командами выставил AT+CSCS="UCS2". СМС тогда вообще не отправляются. В коде самой библиотеки обнаружил вот такую штуку: Код (C++): bool GPRS::sendSMS(char *number, char *data) { //char cmd[32]; if(!sim900_check_with_cmd("AT+CMGF=1\r\n", "OK\r\n", CMD)) { // Set message mode to ASCII return false; } delay(500); sim900_send_cmd("AT+CMGS=\""); sim900_send_cmd(number); //sprintf(cmd,"AT+CMGS=\"%s\"\r\n", number); //snprintf(cmd, sizeof(cmd),"AT+CMGS=\"%s\"\r\n", number); // if(!sim900_check_with_cmd(cmd,">",CMD)) { if(!sim900_check_with_cmd("\"\r\n",">",CMD)) { return false; } delay(1000); sim900_send_cmd(data); delay(500); sim900_send_End_Mark(); return true; } А конкретно вот эта строка: Код (C++): if(!sim900_check_with_cmd("AT+CMGF=1\r\n", "OK\r\n", CMD)) { // Set message mode to ASCII return false; } Проверял, AT+CMGF равен 1. Согласно мануалу в режиме "TEXT". Если поставить режим PDU, то при последующем вызове метода sendSMS() режим снова "TEXT". Люди добрые, как заставить это писать по-русски? или дохлый номер?
Код (C++): // Передача СМС в режиме PDU Serial.begin(9600); //скорость 9600 бод delay(1000); //на 1 сек } void loop(){ if (digitalRead(buttonPin)==HIGH){ delay(100); //если на кнопке "плюс"(PIN12 не на минусе) Serial.println("AT+CMGF=0\r"); // выставляем режим сообщений PDU delay(300); Serial.println("AT+CMGS=35"); //передали Serial.print((char)13); // символ <cr> delay(300); Serial.print("07919722728288F80100009100081C041F044004350432043504340020043C043504340432043504340021"); // Пишем PDU пакет Привет Мир delay(300); Serial.print((char)26); // Отправляем Ctrl+Z, обозначая, что сообщение готово Serial.print((char)13); // символ <cr> delay(10000); } } Русский-только в PDU.Где то я уже писал как правда давно это было.Идём сюда http://tinyurl.com/qv6lzt чтоб из текста получить PDU вводим номер получателя +7******* СМС центра +7****** (если не знаем оставим окошко пустым)Alphabet Size 16 (потому что русский)и текст.Жмём Конверт и в среднем окошке всё для отправки PDU. Далее пишем такой скетч то что помечено красным вставляем из среднего окошка.Компилим-грузим и всё!"AT+CMGF=0\r" можно убрать в Setup будет работать проверено!
ОГРОМНЕЙШЕЕЕЕЕ спасиБО!!!! Человек с большой буквы Ч!!! Шлет по-русски =))) Вы не пробовали сами написать кодировщик в PDU?