Обработка команд от SIM800

Тема в разделе "Arduino & Shields", создана пользователем Irinka, 26 окт 2019.

  1. Daniil

    Daniil Гуру

    почему? Если причины и правда весомые, то да, надо на транзисторах или триггерах шмитта (посмотрите в знаменитом радиомагазине) - они обычно толерантны к разным напряжениям и высокоскоростные(!).

    Аналогично с ресетом, но и ваше решение норм.

    Для проверки загуглите сайт DiHalta, там был обзор согласований уровней.
     
    Andrey12 нравится это.
  2. Andrey12

    Andrey12 Гик

    Я как раз оттуда брал идею согласования, вот так работает нормально для SIM800C
    Согласна даташита Для SIM800 тоже нормально будет работать.
    upload_2019-10-29_23-0-15.png
     
    Daniil нравится это.
  3. Daniil

    Daniil Гуру

    я тыкаю триггеры, по габаритам как транзюк (sot23-3), но они однонаправленные. А с транзюками я напоролся однажды на граничную частоту)
     
  4. parovoZZ

    parovoZZ Гуру

    ой, да ладно. Все приличные ВЧ транзисторы работают до 100 МГц. С полевиками похуже, но не сильно.
     
    DetSimen и Andrey12 нравится это.
  5. Irinka

    Irinka Нерд

    Все верно значит? Транзистор и по рх и по тх?
     
  6. DetSimen

    DetSimen Спамовредитель Модератор

    TX ардуины надо согласовывать по уровню с RX SIM800, обратно можно не делать, ардуина и так поймет.
     
    Andrey12 нравится это.
  7. Irinka

    Irinka Нерд

    Вышепредложенная схема будет лучше чем на резисторном делителе или это заморочки?
     
  8. DetSimen

    DetSimen Спамовредитель Модератор

    делитель проще. всё остальное - заморочки.
     
  9. Irinka

    Irinka Нерд

    Поняла. Оставлю как есть. Спасибо.
    Код (C++):
    //Нужные АТ команды
    String AT_komandu[]={
    "AT",//Проверка связи                   0
    "AT+CCALR?",//Проверка сети             1
    "AT+CLIP=1",//"Ustanovlen AON           2
    "AT+CMGF=1",//"Text mode                3
    "AT+CMGDA=\"DEL ALL\"",//Sms udaleny    4
    "ATH",//Sbros vhodiashchego             5
    };

    //Ожидаемые ответы на АТ команды
    String AT_otvetu[]={        
    "OK",//Проверка связи            0
    "+CCALR: 1",//Проверка сети      1
    "OK",//"Ustanovlen AON           2
    "OK",//"Text mode                3
    "OK",//Sms udaleny               4
    "OK",//Сброс входящего           5
    };
    Ещё бы эти команды во флеш память убрать
     
  10. DetSimen

    DetSimen Спамовредитель Модератор

    пока будешь использовать String - тока через сфинктер.
     
    Irinka и Andrey12 нравится это.
  11. DetSimen

    DetSimen Спамовредитель Модератор

    я, кста, не понял, пошто "OK" храница в нескольких экземплярах? Одного недостаточно?
     
    Andrey12 нравится это.
  12. Irinka

    Irinka Нерд

    В ответ на команду AT+CCALR? мне нужен ответ +CCALR: 1 ,а не ОК (ОК вконце ответа тоже присутствует), ну и другие команды тоже получают в ответ не только ОК, поэтому мне так удобнее.
     
  13. Irinka

    Irinka Нерд

    с char я не поняда как мне загнать полученный текст из порта в строку, пока что разбираюсь
     
  14. DetSimen

    DetSimen Спамовредитель Модератор

  15. Irinka

    Irinka Нерд

    Понимаю, вам не интересно возиться с такими задачами, элементарными для вас...но я учуть..)
    Проверьте пожалуйста:
    Код (C++):
    #include <SoftwareSerial.h>
    SoftwareSerial SIM800(6,7);

      #define MAX_SIZE_BUF 100
      char inData[MAX_SIZE_BUF];
      uint8_t index;

    void setup() {
      Serial.begin(38400);
      SIM800.begin(38400);
    }


     
    void loop(){

    if (Serial.available())SIM800.write(Serial.read());
     

    if (SIM800.available() > 0) {
      char inChar;
        if(index < MAX_SIZE_BUF-1){
          inChar = SIM800.read();
          inData[index] = inChar;
          index++;
          inData[index] = '\0';
        }
    }

    if (index!=0){
      Serial.print(inData);
      index=0;
       for (uint8_t i=0; i<MAX_SIZE_BUF; i++) {
          inData[i]=0;
      }
    }


    }//loop
     
     
  16. DetSimen

    DetSimen Спамовредитель Модератор

    совсем скучно в поезде?
     
  17. Irinka

    Irinka Нерд

    Уже дома. Погода ужас. После командировки выходных дали до понедельника.
    Лаки обновила, всё переделала, теперь можно и на форумах посидеть
    oqPc7QcsxtA.jpg
     

    Вложения:

    • oqPc7QcsxtA.jpg
      oqPc7QcsxtA.jpg
      Размер файла:
      1,9 МБ
      Просмотров:
      54
  18. Irinka

    Irinka Нерд

    Код (C++):
    #include <SoftwareSerial.h>
    SoftwareSerial SIM800(6,7);

      #define MAX_SIZE_BUF 100
      char inData[MAX_SIZE_BUF];
      uint8_t index;

    void setup() {
      Serial.begin(38400);
      SIM800.begin(38400);
    }


    void loop(){

    if (Serial.available())SIM800.write(Serial.read());

    if (SIM800.available() > 0) {
      char inChar;
        if(index < MAX_SIZE_BUF-1){
          inData[index] = SIM800.read();
          index++;
          inData[index] = '\0';
        }else{
          for (uint8_t i=0; i<MAX_SIZE_BUF; i++) {
            inData[i]=0;
          }
          index=0;
        }
    }

    if (index!=0){
      Serial.print(inData);
      index=0;
       for (uint8_t i=0; i<MAX_SIZE_BUF; i++) {
          inData[i]=0;
      }
    }


    }//loop
    Вот так правильнее
     
  19. DetSimen

    DetSimen Спамовредитель Модератор

    нам с котом пока некада, мы примусы электрофоны починяем
    примусы.jpg
     
    Irinka нравится это.
  20. DetSimen

    DetSimen Спамовредитель Модератор

    вот это, не знаю, зачем оно с алгоритмической точки зрения
    но лехко меняеца на
    Код (C++):
    memset(inData, 0, MAX_SIZE_BUF);