Sim900 и Arduino UNO

Тема в разделе "Arduino & Shields", создана пользователем motomac, 29 июн 2017.

Метки:
  1. zabigundi

    zabigundi Нуб

    Код (C++):
    // библиотека для работы с GPRS устройством
    #include <GPRS_Shield_Arduino.h>
    #include <SoftwareSerial.h>
    Вод собственно сам код приема звонка:
    Код (C++):
    // ожидаем звонка
      if (gprs.ifcallNow()) {
        // если поступает входящий звонок
        // выводим сообщение
        Serial.println("Incoming call");
        myOLED.clrScr();                                   // Чистим экран.
        myOLED.print( "Входящий вызов!"    ,  OLED_C, 0);    // Выводим текст по середине
     

     
        // по истечении 3 секунд берём трубку
        delay(3000);
        gprs.answer();
        // выводим сообщение о начале разговора
        delay(1000);
        Serial.println("Call a conversation");
        myOLED.print( "Ответил на звонок!"  , OLED_C, 3);    // Выводим номер по центру 2 строки.
        while (!gprs.ifcallEnd()) {
          // ждём пока месть абонент не положит трубку
        }
        // выводим сообщение о конце разговора
        Serial.println("Call over");
    Как мне получить номер входящего звонка подскажите все перепробовал.

    Так же параллельный вопрос а как запускать модуль программно не долгим нажатием на PWRKEY а программно возможно?
     
    Последнее редактирование: 27 фев 2019
  2. MDV

    MDV Гик

    Должна быть еще подключена библиотека gsm.shield там вроде есть нужный тебе функционал
     
  3. MDV

    MDV Гик

    Потроводу совтового включения смотри вики там это популярно расписано, засада обычно в том, что на новом модуле не запаяно соответствующая перемычка
     
  4. MDV

    MDV Гик

    Для более точного ответа необходимо знать какой у тебя модуль
     
    zabigundi нравится это.
  5. zabigundi

    zabigundi Нуб

    Модуль sim900 как на картинке в первом посте.
     
  6. zabigundi

    zabigundi Нуб

    Номер входящего удалось получить только следующим образом:
    Код (C++):
    //Переменные для получения входящего номера
    #define TELEPHONE_NUM_LENGTH  12
    char incomingPhoneNumber[TELEPHONE_NUM_LENGTH]="";
    char numberToCallActive[TELEPHONE_NUM_LENGTH] = "";

    *************************************

    //получаем номер входящего звонка
        gprs.isCallActive(incomingPhoneNumber);
        gprs.isCallActive(numberToCallActive);
        Serial.println(numberToCallActive);


     
    Так и не понял нахера isCallActive вызывать два раза.
     
  7. ИгорьК

    ИгорьК Гуру

    А зачем иметь два массива для повторения? Попробуйте дважды записать в один.
     
    zabigundi нравится это.
  8. zabigundi

    zabigundi Нуб

    Пробовал увы, сам не пойму.
    Когда в два разных все работает.
     
  9. MDV

    MDV Гик

    По софт включению, смотри кусочек кода
    Код (C++):
    digitalWrite(9, HIGH);
      delay(3000);
      digitalWrite(9, LOW);
      delay(1000);
    Только проверь запаяна ли необходимая перемычка
     
    zabigundi нравится это.
  10. MDV

    MDV Гик

    И не забудь назначить 9 пин как выход
     
  11. MDV

    MDV Гик

    По поводу двойного запроса, скорей всего в каком то из них нет инициализации сериала
     
  12. zabigundi

    zabigundi Нуб

    Что то не могу найти перемычку, кто знает где она злаполучная?
    [​IMG] [​IMG] [​IMG]
     
  13. MDV

    MDV Гик

    ищи радом с красным клемником
     
    zabigundi нравится это.
  14. zabigundi

    zabigundi Нуб

    Вроде нашел там одну у нее написано R13 но на ней ничего нет, позже попробую спаять ее, напишу по результату.
     
  15. zabigundi

    zabigundi Нуб

    Да Вы были правы 9 пин с запаянной перемычкой рядом все ок благодарю за помощь.
    А подскажите новичку как сделать следующее: мне нужно в функцию передать строки, попробовал вот так, отображается заместо текста цифра 4:
    Код (C++):
    expectation("В режиме");
    ***********************************************
    void expectation(char text){
        myOLED.clrScr();        // Чистим экран.
        myOLED.print( text , OLED_C, 1);            // Выводим текст по центру 1 строки.}
    А вот так все классно написано "В режиме":
    Код (C++):
    myOLED.print( "В режиме" , OLED_C, 1);            // Выводим текст по центру 1 строки.}
     
    Последнее редактирование: 28 фев 2019
  16. zabigundi

    zabigundi Нуб

    А что СМС я как понял только на латинеце да ? :(
     
  17. MDV

    MDV Гик

    про смс не скажу я на латинице передавал, но думаю если потрудиться то и на русском можно будет
    по вопросу вывода 4-х строк, у меня нет oled дисплея :)
    смотри примеры что идут к библиотеке
    обычно, есть функции myOLED.print(); а бывает еще myOLED.println или еще как нибудь
     
  18. MDV

    MDV Гик

    изучай

    print(st, x, y);
    Распечатать строку в указанных координатах в буфере экрана
    Можно использовать как литералы LEFT, CENTER и RIGHT, так и числовые координаты, чтобы выровнять строку на экране.
    Параметры:
    st: строка для печати
    x: координата верхнего левого угла первого символа по горизонтали
    y: координата верхнего левого угла первого символа по вертикали
    Пример: myOLED.print("Hello World",CENTER,0); // Печать строки "Hello World" по центру в верхней части экрана (в буфере экрана)
    Примечания: Строка для печати может быть либо массив символов или строковый объект
    printNumI(num, x, y[, length[, filler]]);
    Распечатать целое число в указанных координатах в буфере экрана.
    Можно использовать как литералы LEFT, CENTER и RIGHT, так и числовые координаты, чтобы выровнять строку с числом на экране.
    Параметры:
    num: Число для вывода на экран (от -2147483648 до 2147483647). Допускаются только ЦЕЛЫЕ числа
    x: координата верхнего левого угла первой цифры/знака по горизонтали
    y: координата верхнего левого угла первой цифры/знака по вертикали
    length: <необязательный параметр> минимальное количество цифр / символов (включая знак) для отображения на экране
    filler: <необязательный параметр> Символ для заполнения, чтобы получить минимальную длину.Символ будет вставлен перед номером, но после знака. Умолчанию '' " (пробел).
    Пример: myOLED.printNumI(num,CENTER,0); // Печать значения переменной "num" по центру в верхней части экрана (в буфере экрана)
    printNumF(num, dec, x, y[, divider[, length[, filler]]]);
    Распечатать число с плавающей точкой в указанных координатах в буфере экрана.
    Можно использовать как литералы LEFT, CENTER и RIGHT, так и числовые координаты, чтобы выровнять строку с числом на экране.
    Внимание: Числа с плавающей точкой имеют погрешность при округлении и могут давать неверные результаты при сравнении. Используйте на свой страх и риск.
    Параметры:
    num: Число для вывода на экран
    Dec: количество цифр после запятой (в дробной части) (допустимые значения 1-5). Число 0 не поддерживается, для этого используйте printNumI ()
    x: координата верхнего левого угла первой цифры/знака по горизонтали
    y: координата верхнего левого угла первой цифры/знака по вертикали
    divider: <необязательный параметр> Одиночный символ для использования в качестве десятичной точки. По умолчанию '.'
    length: <необязательный параметр> минимальное количество цифр / символов (включая знак) для отображения на экране
    filler: <необязательный параметр> Символ для заполнения, чтобы получить минимальную длину.Символ будет вставлен перед номером, но после знака. Умолчанию '' " (пробел).
    Пример: myOLED.printNumF(num, 3, CENTER,0); // Печать значения переменной "num" с 3-мя знаками после запятой по центру в верхней части (в буфере экрана)
    Примечания: Поддерживаемые диапазон зависит от количества цифр в дробной части.
    Диапазон приблизительный +/- 2 * (10 в степени 9) - для десятичной системы.
     
  19. zabigundi

    zabigundi Нуб

    Да с экранчиком, я разобрался у меня проблемс в том чтобы вывод на него засунуть в функцию и передавать ей текст что вывести на экран.
    Все разобрался нужно было заместо char использовать Strig :)
    Код (C++):
    void expectation(String text)
     
    Последнее редактирование: 1 мар 2019