Skocz do zawartości

Ardu i SIM800l, ogólna dyskusja...


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....

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
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...

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?

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ć...

(edytowany)

@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
(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
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...

(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
(edytowany)

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_
(edytowany)
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

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...