• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Funkcja zmiany wartości String.
#5
Nie będę zakładał nowego teamtu, tylko napisze w tym samym bo i tak związanej jest to z jednym projektem.

Mam coś takiego:

Kod:
if((textMessage.indexOf("NO CARRIER")>=0) || (textMessage.indexOf(F("NO DIALTONE"))>=0) || (textMessage.indexOf(F("BUSY"))>=0) || (textMessage.indexOf(F("NO ANSWER"))>=0)){
      if(numerGlowny == numer1){
        numerGlowny = numer2;
      }else{
        numerGlowny = numer1;   
      }
      telefAlarm();
      textMessage="";
      rozlaczanieAlarm.time(STOP);                                                           
    }


W celu ponownego połączenia gdy, poprzedniego połączenia nikt nie odebrał dorzuciłem  do środka ifa  (textMessage.indexOf(F("NO CARRIER"))>=0). Działa to aż za dobrze, tzn. po odebraniu i rozłączeniu połączenia pojawia się odpowiedź "NO CARRIER" po której odczytaniu następuje wykonanie kolejnego połączenia (na inny numer niż poprzednio).

Chciałem temu zaradzić.


Kod:
17:46:48.062 -> ATD+48519xxxxxx;
17:47:38.679 -> NO CARRIER

Na porcie szeregowym najpierw pojawia się "ATD+48519xxxxxx;"
następnie gdy nikt nie odbierze, pojawia się "NO CARRIER"

Dlatego napisałem takie coś:

i
Kod:
if(textMessage.indexOf("ATD")>=0) {                                                      
       Serial.print(F("textmessage:   "));
       Serial.print(textMessage);
       if(textMessage.indexOf("NO CARRIER")>=0){                                          
         if(numerGlowny == numer1){
           numerGlowny = numer2;
           }else{
           numerGlowny = numer1;   
          }
      telefAlarm();                                                                           
      textMessage="";                                                                         
      rozlaczanieAlarm.time(STOP);                                                            
     }
    }

Niestety to nie działa. Pytanie dlaczego? W analogiczny sposób zrobiłem rozłączanie. Po odebraniu połączenia uruchamia się timer, który odlicza czas do polecenia ATH.


Kod:
if(textMessage.indexOf("+COLP:")>=0){                                                   
      delay(100);
        if(textMessage.indexOf(F("OK"))>=0){
          Serial.print(F("uruchomiono timer rozlaczanie"));
          rozlaczanieAlarm.begin(rozlaczanieAlarmOdliczanie * 1000);
          rozlaczanie = 0;                                                                   
          textMessage = "";
        }
      }


kopia z portu:

Kod:
17:50:49.423 -> ATD+48519xxxxxx;
17:51:13.838 -> +COLP: "48519xxxxxx",145,"",0,""
17:51:13.838 ->
17:51:13.838 -> OK
17:51:13.973 -> uruchomiono timer rozlaczanieATH
17:51:35.087 -> OK


W głównej pętli mam takie coś :


Kod:
char c;
  while (Serial.available()) {                                         
    c = Serial.read();
    altSerial.write(c);
  }     

  while (altSerial.available()) {                                       
    c = altSerial.read();
    textMessage = altSerial.readString(); 
    Serial.print(c);
    Serial.print(textMessage); 
  }

Jak  ogarnąć to aby rozróżnić "NO CARRIER" po odebraniu i rozłączeniu, od  "NO CARRIER" po nieodebraniu połączenia?
 
Odpowiedź
  


Wiadomości w tym wątku
Funkcja zmiany wartości String. - przez pawel296 - 17-04-2020, 17:32
RE: Funkcja zmiany wartości String. - przez ANT - 17-04-2020, 22:47
RE: Funkcja zmiany wartości String. - przez pawel296 - 19-04-2020, 18:07

Skocz do:


Przeglądający: 2 gości