Получаю странные данные от Cosmo GSM
  • Пишу библиотеку для отправки СМС. Нагуглил http://code.google.com/p/gsm-playground/source/browse/trunk/Platform_Arduino/AT.cpp и взял за основу, точнее упрощаю ее по максимуму.

    Вот следующий код:


    char GSM::sendSMS(char* phoneNumber, char* message) {
    char retVal = 0;
    byte i;
    if (CLS_FREE != getCommLineStatus())
    return -1;

    setCommLineStatus(CLS_ATCMD);

    // Set text mode for messages
    Serial.println("AT+CMGF=1");

    // Здесь получаю ответ "ОК"
    if (RX_FINISHED_STR_RECV != waitResp(START_XXLONG_COMM_TMOUT, MAX_LONG_INTERCHAR_TMOUT, "OK")) {
    retVal = -1;
    } else {
    // Пишем номер
    Serial.print("AT+CMGS=\"");
    Serial.print(phoneNumber);
    Serial.print("\"\r");

    // Ждем приглашение на ввод сообщения
    if (RX_FINISHED_STR_RECV == waitResp(START_XXLONG_COMM_TMOUT, MAX_LONG_INTERCHAR_TMOUT, ">")) {
    Serial.print(message);
    Serial.print(26, BYTE);
    attempts++;
    // Здесь должны получать +CMGS ... но получим текст SMS сообщения (WTF?!!!),
    // причем если пробовать читать данные еще до отправки Serial.print(26, BYTE); то результат будет один и тот же.
    if (RX_FINISHED_STR_RECV == waitResp(START_XXLONG_COMM_TMOUT, MAX_LONG_INTERCHAR_TMOUT, "+CMGS")) {
    // SMS was send correctly
    retVal = 1;
    sentCount += 1;
    }

    // Если здесь повторно что-то прочитать, то "+CMGS" будет присутствовать.
    // SMS будет отправлено в любом случае.
    }
    }
    setCommLineStatus(CLS_FREE);
    return retVal;
    }


    Если юзать гипертерминал, все четко.

    В чем ошибка может быть?

    PS: Перемычки в положении MEGA, остальные 2 в замыкают (1 и 2).

    PPS: Зачем отсоединять arduino от USB (так написано в вашем примере отправки смс)?
  • Отвечу сам, интуиция подсказала, что модуль делает что-то вроде echo. Так и было:

    2.21 E: Command echo 
    The setting of this parameter determines whether or not the DCE echoes characters 
    received from the DTE during command state and online command state.

    Решается просто: Serial.println("ATE0");
  • У нас в скором времени будет проводится конкурс на лучший проект под Ардуино.
    Так что если будет желание - обязательно поучаствуйте.
    За анонсами следите в нашем твиттере - http://twitter.com/#!/jt5_russia
  • а подробней о конкурсе можно?
  • а подробней о конкурсе можно?



    Конкурс на интересный проект под Ардуино. Нужно будет рассказать о собранном вами устройстве, для чего собирался, какие области применения задумывались. Также нужно будет описать процесс сборки и программирования, какие возникали сложности или может быть дополнительные потребности...

    На конкурс принимаются проекты, которые были сконструированы самостоятельно.

    Более подробная информация будет опубликована в правилах конкурса.

Привет, незнакомец!

Похоже, вы новенький! Чтобы пообщаться с нами, кликните на одну из кнопок ниже :)

Войти с помощью OpenID

В этом теме: