Skocz do zawartości

Ardu i SIM800l, ogólna dyskusja...


farmaceuta

Pomocna odpowiedź

14 minut temu, SOYER napisał:

@farmaceuta 

że to nie Twój program nie widzi dzwonienia, tylko, że sim nie informuje Twojego programu o tym ,że ktoś dzwoni.

Jeśli chodzi o SMS to jeszcze bym zrozumiał że coś "uciekło" i mam błędne info, bo SMS nie zapisuje więc mam tylko jedną szansę odczytania go bezpośrednio na serialu, no ale dzwonienie wysyła cykliczny komunikat więc powinno "wkoncu" złapać...no ale sprawdzę jeszcze jedna rzecz....

Link do komentarza
Share on other sites

2 minuty temu, farmaceuta napisał:

no ale sprawdzę jeszcze jedna rzecz....

wklej do szkicu linijki wypisujące na serial monitorze wszystko co wysyła sim i zadzwoń na moduł. Nic więcej nie musisz robić na razie  

  • Lubię! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Dnia 31.01.2023 o 20:31, SOYER napisał:

wklej do szkicu linijki wypisujące na serial monitorze wszystko co wysyła sim i zadzwoń na moduł. Nic więcej nie musisz robić na razie  

Tak..zrobiłem to i działa na sprawnych płytkach...ale po jakimś czasie zaczynają Arduina świrować i nie da się już nic wgrać ani odczytać z SIM...

Link do komentarza
Share on other sites

Czyli to nie tak, że simy się wieszały i nic nie wysyłały, jednak to nie była ich wina?

Teraz to arduino świrują, a jak to się objawia?

Link do komentarza
Share on other sites

46 minut temu, SOYER napisał:

Czyli to nie tak, że simy się wieszały i nic nie wysyłały, jednak to nie była ich wina?

No wychodzi na to że nie...tak jakby po jakiś czasie pracy na uart sprzętowym z SIM, Ardu zaczyna świrować...

Link do komentarza
Share on other sites

@farmaceuta wstaw tu Twój szkic, który masz wgrany. Niech koledzy na niego popatrzą, szczególnie pod kątem tego co robisz z tym co wysyła sim.

Wklej.

Edytowano przez SOYER
Link do komentarza
Share on other sites

(edytowany)
void wjazdSIM() {

  uint32_t numer_adm = 0;
  uint32_t numer = 0;
  uint32_t admin = 0;
  String nr_adminS = "";
  bool flaga = 0;


  while (Serial.available()) {
    delay(10);
    dane1 = Serial.readString();
    // Serial.println(dane1);
  }

  if (dane1.indexOf("+CMT") != -1) {         //czy odebrano sms
    nr_adminS = dane1.substring(12, 21);
    numer_adm = atol(nr_adminS.c_str());
    if (numer_adm == baza_nr[0]) {
      flaga = 1;
    } else {
      flaga = 0;
    }
  }

  if (dane1.indexOf(haslo) != -1) {           //zapisanie nr administratora
    numer = nr(haslo, 10, 1);
    eeprom_write_dword(&epr_nr[0], numer); 
    baza_nr[0] = numer;
    wyslij_sms("ZAPISANO NR ADMINISTRATORA");
  }

  if (dane1.indexOf("ZAPISZ") != -1 && flaga == 1) {   //zapisanie nr do bazy
    numer = nr("ZAPISZ", 10, 1);
    for (int x = 1; x < ILOSC_NR; x++) {
      if (baza_nr[x] == numer) {
        return;

      }
    }
    for (int x = 1; x < ILOSC_NR; x++) {
      if (baza_nr[x] == 0) {
        eeprom_write_dword(&epr_nr[x], numer );
        baza_nr[x] = numer;
        wyslij_sms("ZAPISANO NUMER");
        break;
      }
    }
    flaga = 0;
  }

  if (dane1.indexOf("USUN") != -1 && flaga == 1) {   //usuniecie nr z bazy
    numer = nr("USUN", 10, 1);

    for (int x = 1; x < ILOSC_NR; x++) {
      if (baza_nr[x] == numer) {
        eeprom_write_dword(&epr_nr[x], 0);
        baza_nr[x] = 0;
        wyslij_sms("USUNIETO NUMER");
        break;
      }
    }
    flaga = 0;
  }

  if (dane1.indexOf("+CLIP") != -1) {            //sprawdzenie czy dzwoni
    numerS = dane1.substring( 21, 30);
    numer = atol(numerS.c_str());
    for (int x = 0; x < ILOSC_NR; x++) {
      if (baza_nr[x] == numer) {
        wjazd_flaga = 1;
        digitalWrite(pin_brama, LOW);
        delay(1000);
        digitalWrite(pin_brama, HIGH);
        Serial.println("ATH");
        delay(100);
        return;
      }
    }
  }
  if (dane1.indexOf("+CREG") != -1) {                            //sprawdzenie czy jest polaczenie
    if (dane1.indexOf("1") == -1 && dane1.indexOf("5") == -1) {
      Serial.println("AT+CFUN=0");
      delay(2000);
      Serial.println("AT+CFUN=1");
    }
  }
  if (millis() - czas_sygnal > 60000UL) {          //sprawdzanie polaczenia co 60s
    czas_sygnal = millis();
    Serial.println("AT+CREG?");
    delay(10);
  }
  
}
uint32_t nr(String str, int a, int b) {                //funkcja zwracajaca liczbe/nr
  indeks = dane1.indexOf(str);
  numerS = dane1.substring(indeks - a, indeks - b);
  return atol(numerS.c_str());
}

void wyslij_sms(String str) {                       //wysylanie sms
  String nr = (String)baza_nr[0];
  Serial.println("AT+CMGS=\"+48" + nr + "\"");
  Serial.println(str);
  delay(2000);
  Serial.write(26);



}


void wyjazdSIM() {


  String numerSS = "";
  uint32_t numerr = 0;

  while (simWYJAZD.available()) {
    delay(10);
    dane2 = simWYJAZD.readString();
    // Serial.println(dane2);
  }

  if (dane2.indexOf("+CLIP") != -1) {
    numerSS = dane2.substring(21, 30);
    numerr = atol(numerSS.c_str());
    for (int x = 0; x < ILOSC_NR; x++) {
      if (baza_nr[x] == numerr) {
        wyjazd_flaga = 1;
        digitalWrite(pin_brama, LOW);
        delay(1000);
        digitalWrite(pin_brama, HIGH);
        simWYJAZD.println("ATH");
        delay(100);
        return;

      }
    }
  }
  
  if (dane2.indexOf("+CREG") != -1) {
    if (dane2.indexOf("1") == -1 && dane2.indexOf("5") == -1) {
      simWYJAZD.println("AT+CFUN=0");
      delay(2000);
      simWYJAZD.println("AT+CFUN=1");
    }
  }
  if (millis() - czas_sygnal2 > 60000UL) {
    czas_sygnal2 = millis();
    simWYJAZD.println("AT+CREG?");
    delay(10);
  }
}

W kodzie nie ma nic nadzwyczajnego...jak coś przyjdzie to zapisuje do Stringa, a później sprawdzam w if'ach czy znalazłem dana fraze...jeśli tak to zapisuje/kasuje dany nr lub reaguje na dzwonienie...i tyle...

Edytowano przez farmaceuta
Link do komentarza
Share on other sites

1 godzinę temu, farmaceuta napisał:

jak coś przyjdzie to zapisuje do Stringa, a później sprawdzam w if'ach

A jak nic nie przyjdzie to sprawdzasz co przyszło poprzednio...

Link do komentarza
Share on other sites

(edytowany)
3 godziny temu, ethanak napisał:

A jak nic nie przyjdzie to sprawdzasz co przyszło poprzednio...

Ok sprawdzę zaraz...chociaż to już mnie nie martwi, a to że dwa pro mini już chyba dokończyły żywota, a Uno już kilka razy zdechło, a mam tylko Uno jeszcze na chodzie, jak padnie to dupa...😕 (ESP za cholerę nie podłącze)

Edytowano przez farmaceuta
Link do komentarza
Share on other sites

Skoro tak Ci padają te arduina to trzeba wpierw znaleźć przyczynę a nie liczyć na to że się jakoś uda, być może z modułu przedostają się jakieś szpilki napięciowe i to je uszkadza - w co wątpię ale też nie da się określić co jak jest połączone jak nie chcesz podać dokumentacji. Nie bez powodu pisałem żebyś te moduły przetestował na zwykłych przejściówkach i podawał polecenia z ręki. Dałoby Ci to pogląd na to jak sterować tymi modułami i co one i kiedy zwracają. No ale jak ktoś jest uparty to nic nie wskóramy 

I nie ględź że tu czy tu opisujesz to jak masz połączone, to jest forum techniczne i tobie powinno zależeć na tym aby ułatwić nam udzielenie pomocy.

Edytowano przez _LM_
Link do komentarza
Share on other sites

25 minut temu, farmaceuta napisał:

Ok sprawdzę zaraz...chociaż to już mnie nie martwi, a to że dwa pro mini już chyba dokończyły żywota, a Uno już kilka razy zdechło, a mam tylko Uno jeszcze na chodzie, jak padnie to dupa...😕 (ESP za cholerę nie podłącze)

@farmaceuta powinno Cię martwić to co napisał @ethanak, rozumiesz co on napisał?

Jeśli coś przyszło z sim to zapisujesz do swojego Stringa.

Jednak jeśli nie przyszło to i tak robisz którąś z akcji zawartą w funkcji, bo w swoim sstringu z odczytu masz pozapisywane dane z poprzednich akcji.

Jesli odpalisz funkcję wjazdSIM() program i tak wykonuje jakieś działanie, niezależnie od tego czy coś przyszło z sim czy nie przyszło.

Więc jeśli masz funkcję wjazdSIM() w pętli głównej, to nie dziwota, że muli Ci albo arduino albo sim, a ty myślisz, że sie wieszają...

Niech szanowni koledzy mnie poprawią jeśli się mylę.

Edytowano przez SOYER
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.