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

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

  1. SergeiL

    SergeiL Оракул Модератор

    А тут все спать ложатся. :)
    Пенсионеры возвращаются по своим квартирам. ;)
     
  2. parovoZZ

    parovoZZ Гуру

    Указатель на указатель бутылки возвращает указатель на дно?
     
  3. DetSimen

    DetSimen Guest

    я уже давно там, мне на него и указатель не нужен. :)
     
  4. parovoZZ

    parovoZZ Гуру

    примусы?!

    в тырнет же из под чего-то заходишь? Значит, лукавишь)
     
  5. DetSimen

    DetSimen Guest

    дак я ж не один живу. у мня есть комп, телефон и планшет.
     
  6. parovoZZ

    parovoZZ Гуру

    те ещё до дна, как мне до богатства
     
  7. DetSimen

    DetSimen Guest

    Аналоги примусов. Почти. 1572778407912-682165281.jpg
     
    Andrey12 нравится это.
  8. Irinka

    Irinka Нерд

    А подскажите по моему коду,
    Код (C++):
    #include <SoftwareSerial.h>
    SoftwareSerial SIM800(6,7);



    //Нужные АТ команды
    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
    };

    uint8_t Kol_Kom;



    void setup() {
      SIM800.begin(38400);
      Serial.begin(38400);
      Serial.println(F("Zagruzka"));
      delay(1000);
      SIM800.println("AT");//Автонастройка скорости обмена
      //SIM800.println("ATE1");//ЭХО-включено по умолчанию
      Kol_Kom = sizeof(AT_komandu)/sizeof(AT_komandu[0]);
    }





    void Actions(uint8_t act){

    switch (act) {
      case 0:
        Serial.println("Modul` otvechaet");
      break;

      case 1:
        Serial.println("Set` nai`zhena");
      break;

      case 2:
        Serial.println("Ustanovlen AON");
      break;
      case 3:
        Serial.println("Text mode");
      break;
      case 4:
        Serial.println("Sms udaleny");
      break;

      case 5:
        Serial.println("Sbros vhodiashchego ");
      break;

    }

    }//



    void sendATCommand(String cmd,bool waiting){
      SIM800.println(cmd);
      Serial.println("Komanda: "+cmd);
    }




    void loop() {

    if (Serial.available())SIM800.write(Serial.read());
    if(SIM800.available()){
      String Otvet="";
      Otvet = SIM800.readString();
      Otvet.trim();
      Serial.println(".."+Otvet);
      String result=Otvet.substring(0,Otvet.indexOf("\r"));

    //Обработка незапрашиваемых сообщений
    if (Otvet.startsWith("RING")) {
    Serial.println(F("Vhodiashchii` vy`zov"));
    sendATCommand("ATH",false);
    }
    else if (Otvet.startsWith("+CMTI:")) {
    Serial.println(F("Polucheno SMS"));
    sendATCommand("AT+CMGDA=\"DEL ALL\"",false);
    }
    //Обработка незапрашиваемых сообщений

        for (int i=0; i <= Kol_Kom-1; i++){
          if  (result==AT_komandu[i] && Otvet.indexOf(result) > -1  && Otvet.indexOf(AT_otvetu[i]) > -1 ) {
            Actions(i) ;
            break;
          }
        }//for
    }//if(SIM800.available()){

    }//loop


    что лучше использовать, цикл

    Код (C++):
        for (int i=0; i <= Kol_Kom-1; i++){
          if  (result==AT_komandu[i] && Otvet.indexOf(result) > -1  && Otvet.indexOf(AT_otvetu[i]) > -1 ) {
            Actions(i) ;
            break;
          }
        }//for
    или конструкцию else if ?