19-04-2020, 18:07
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:
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ć.
Na porcie szeregowym najpierw pojawia się "ATD+48519xxxxxx;"
następnie gdy nikt nie odbierze, pojawia się "NO CARRIER"
Dlatego napisałem takie coś:
i
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.
kopia z portu:
W głównej pętli mam takie coś :
Jak ogarnąć to aby rozróżnić "NO CARRIER" po odebraniu i rozłączeniu, od "NO CARRIER" po nieodebraniu połączenia?
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?