• 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
Problem z kodem - nie dzwoni na podany numer
#1
Witam,

Skleciłem prosty układ z 2 diodami i kontaktronem. Przy zwarciu kontaktrona świeci się czerwona dioda, natomiast po rozwarciu gaśnie i zapala się zielona. Podpiąłem SIM800L v2 i chciałbym aby przy rozwarciu moduł wykonywał połączenie na mój numer. Po dodaniu opcji dzwonienia (nie wiem czy poprawnej) nic się nie dzieje a diody zaczynają świrować:


Kod:
}
void loop(){
   Serial.println("AT");
   delay(500);
   Serial.print("ATD");
   Serial.println("99XXXXXXX8;");
   delay(20000);
   Serial.println("ATH");


Mój obecny kod wygląda tak i chciałbym do niego dodać wykonywanie połączenia:


Kod:
#include <SoftwareSerial.h>
SoftwareSerial gsm800(11,12);

void setup()
{
  pinMode(2, INPUT_PULLUP);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  digitalWrite(3,LOW);
  digitalWrite(4,LOW);
  Serial.begin(9600);
}
void loop()
{
  if (digitalRead(2)==LOW)
{
  digitalWrite(4,HIGH);
  digitalWrite(3,LOW);
}
else
{
  digitalWrite(4,LOW);
  digitalWrite(3,HIGH);
}
}

Moduł SIM800L poprawnie wysyła mi SMS kiedy wgram "gotowca", który wysyła wiadomość przy starcie. Zakładam więc, że jest poprawnie podłączony. Czy może mi ktoś pomóc i dodać do obecnego kodu funkcję wykonywania połączenia?
Z góry dziękuję i pozdrawiam
 
Odpowiedź
#2
Pakarz swój niedziałający kod " Po dodaniu opcji dzwonienia".
 
Odpowiedź
#3
Zacznij od tego, czy w ogóle Twój moduł obsługuje połączenia głosowe, mój 800L np. nie - tylko GPRS i SMS. Podłącz sobie terminal przez UART do modułu i pogadaj z nim komendami AT. Bo oczywiście przeczytałeś już wszystko o GSM na tym forum, czy może myślisz że jesteś taki wyjątkowy i taki problem pojawił się pierwszy raz?
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#4
(11-07-2018, 09:46)es2 napisał(a): Pakarz swój niedziałający kod " Po dodaniu opcji dzwonienia".

Skleciłem coś takiego (oczywiście numer tel nie jest tutaj ustawiony) ale chyba w złym miejscu wrzuciłem funkcję dzwonienia i zaczynają mi świrować diody :Smile Jeśli ciężko zrobić aby tylko przy zielonej diodzie (tzn. zerwany obwód kontaktronu) było wykonywane połączenie to urządzało by mnie również wykonywanie połączenia (raz) przy każdej zmianie stanu gdzie podłączony jest kontaktron (D2).

Kod:
#include <SoftwareSerial.h>
//piny na których jest podłączona komunikacja z modułem GSM
SoftwareSerial gsm800(11,12);

void setup()
{
 Serial.begin(9600);
 pinMode(2, INPUT_PULLUP);
 pinMode(3, OUTPUT);
 pinMode(4, OUTPUT);
 digitalWrite(3,LOW);
 digitalWrite(4,LOW);
}
void loop()
{
 if (digitalRead(2)==LOW)
{
 digitalWrite(4,HIGH);
 digitalWrite(3,LOW);
}
else
{
 digitalWrite(4,LOW);
 digitalWrite(3,HIGH);
   Serial.println("AT");
   delay(500);
   Serial.print("ATD");
   Serial.println("99XXXXXXX8;");
   delay(20000);
   Serial.println("ATH");
}
}
 
Odpowiedź
#5
(11-07-2018, 10:30)kaczakat napisał(a): Zacznij od tego, czy w ogóle Twój moduł obsługuje połączenia głosowe, mój 800L np. nie - tylko GPRS i SMS. Podłącz sobie terminal przez UART do modułu i pogadaj z nim komendami AT. Bo oczywiście przeczytałeś już wszystko o GSM na tym forum, czy może myślisz że jesteś taki wyjątkowy i taki problem pojawił się pierwszy raz?

Przeglądnąłem większość tutaj tematów i zainteresował mnie jeden gdzie przy zwarciu pinu do masy było wykonywane połączenie lub pisał sms'a. U mnie pin zwarty znaczy, że jest w porządku a dopiero po rozwarciu musiałby dzwonić. Tam był SIM900 więc nie wiem czy mogę sobie skopiować gotowca.
 
Odpowiedź
#6
(11-07-2018, 10:42)mojojek napisał(a): i zaczynają mi świrować diody :Smile

Co znaczy świrować?
Pokaż schemat jak to wszystko zasilasz i z czego.
 
Odpowiedź
#7
(11-07-2018, 10:30)kaczakat napisał(a): Zacznij od tego, czy w ogóle Twój moduł obsługuje połączenia głosowe, mój 800L np. nie - tylko GPRS i SMS.

Jak pamiętam wszystkie SIM800 obsługują połączenia telefoniczne tyle, że niektóre moduły nie mają wyprowadzonych linii SPX i MIC co nie wyklucza możliwości komunikacji, można generować/odbierać tony DTMF i odtwarzać/zapisywać pliki audio.
 
Odpowiedź
#8
(11-07-2018, 12:21)es2 napisał(a):
(11-07-2018, 10:42)mojojek napisał(a): i zaczynają mi świrować diody :Smile

Co znaczy świrować?
Pokaż schemat jak to wszystko zasilasz i z czego.

Świrować tzn. tak jakby się zwieszały na jakiś czas, reagowały z opóźnieniem na kontaktron ale wydaje mi się, że tamten kod był po prostu źle napisany.

Odnośnie połączenia to wygląda to tak:

Zasilanie:
Nano V3 - zasilam z laptopa przez usb lub z ładowarki 5V 2A.
SIM800L v2 zasilam z ładowarki 5V 2A poprzez piny 5VIN oraz GND

Podłączenie:

SIM800 TXD - D11 Arduino
SIM800 RXD - D12 Arduino
Arduino D4 - zielona dioda przez rezystor 220Ohm
Arduino D3 - czerwona dioda przez rezystor 220Ohm
Arduino D2 - kontaktron
Arduino GND - kontaktron
Arduino GND - obie diody

Dodam, że dla testów wgrałem wczorajszy program, który w teorii powinien wysyłać testowego smsa na mój numer przy starcie systemu (wczoraj wysłał bez problemu). Niestety dziś nic mi nie wysyła. Dioda SIM800L miga po włączeniu szybko, następnie po chwili zaczyna już migać powiedzmy raz na 3 sekundy. Rozumiem, że w tym wypadku SIM800 sygnalizuje prawidłową siłę sygnału? Oczywiście podpięta jest dołączona do zestawu antenka.

Kod:
#include <SoftwareSerial.h>
SoftwareSerial gsm800(11,12);

void setup()
{
 pinMode(2, INPUT_PULLUP);
 pinMode(3, OUTPUT);
 pinMode(4, OUTPUT);
 digitalWrite(3,LOW);
 digitalWrite(4,LOW);
 Serial.begin(9600);

  while(!Serial);
gsm800.begin(9600);
delay(100);
gsm800.write("AT+CMGF=1\r\n");
delay(100);
gsm800.write("AT+CMGS=\"+48xxxxxxxxx\"\r\n");
delay(100);
gsm800.write("START SYSTEMU");
delay(100);
gsm800.write((char)26);
delay(100);
}
void loop()
{
 if (digitalRead(2)==LOW)
{
 digitalWrite(4,HIGH);
 digitalWrite(3,LOW);
}
else
{
 digitalWrite(4,LOW);
 digitalWrite(3,HIGH);
}
}
 
Odpowiedź
#9
(11-07-2018, 12:35)mojojek napisał(a): SIM800L v2 zasilam z ładowarki 5V 2A poprzez piny 5VIN oraz GND
Niewiele mi to mówi. p[okaż schemat.

(11-07-2018, 12:35)mojojek napisał(a): Dodam, że dla testów wgrałem wczorajszy program, który w teorii powinien wysyłać testowego smsa na mój numer przy starcie systemu (wczoraj wysłał bez problemu). Niestety dziś nic mi nie wysyła.
Stawiam na problemy z zasilaniem. Sprawdź oscyloskopem jakość zasilania na SIM800.

(11-07-2018, 12:35)mojojek napisał(a): Dioda SIM800L miga po włączeniu szybko, następnie po chwili zaczyna już migać powiedzmy raz na 3 sekundy. Rozumiem, że w tym wypadku SIM800 sygnalizuje prawidłową siłę sygnału?
Zapraszam do noty katalogowej SIM800. Na pamięć nie znam zachowania led wszystkich modułów produkowanych na całym Świecie. Ponadto, skorzystaj z wcześniejszej rady @kaczakat i najpierw pobaw się komendami AT z terminala. Z terminala możesz sprawdzić w jakim stanie jest moduł.

PS
1. Schematu nie dałeś.
2. Kompletnie nie znasz dokumentacji modułu.
3. Nie znasz komend AT
4. Nie umiesz pisać programów.
5. pewnie sie dowiem, że nie masz oscyloskopu a jak masz nie potrafisz się nim posługiwać.

Jak można Ci pomóc?
 
Odpowiedź
#10
Już się poprawiam.

1. Schemat w załączniku. Mam nadzieje, że czytelny i taki wystarczy.
2. Z tego co znalazłem w internecie status diody wygląda następująco:

Nie świeci - moduł nie jest uruchomiony
Świeci 64ms w odstępach 800ms - moduł nie zarejestrował się do sieci (zaraz po włączeniu)
Świeci 64ms w odstępach 3000ms - moduł zarejestrował się do sieci (po krótkiej chwili)
Świeci 64ms w odstępach 300ms - aktywne połączenie GPRS

Z tego wynika, że mój moduł zarejestrował się do sieci jednak nic nie wysyła.

3. Właśnie je poznaję i spróbuję połączyć się tak jak radzicie poprzez port szeregowy w IDE i sprawdzić czy jest komunikacja z modułem. Niestety nie mogę skompilować w swoim IDE programu, który komunikuje się z modułem. Gotowy kod pobrałem z internetu jednak przy próbie weryfikacji dostaję błąd:

"'void loop()' previously defined here
exit status 1
redefinition of 'void setup()'"


Kod:
   #include <SoftwareSerial.h>
   
   SoftwareSerial gsm(11, 12); // Piny 11 i 12 do komunikacji z SIMxxx
   
   String atCommand;
   
   void setup()  
   {
     pinMode(LED_BUILTIN, OUTPUT);
     digitalWrite(LED_BUILTIN, HIGH);
     delay(500);
     digitalWrite(LED_BUILTIN, LOW);
   
     // Ustawiamy transmisje na 9600 bodow Arduino--PC
     Serial.begin(9600);
   
     // Czekamy na inicjalizacje
     while (!Serial) {
     }
   
     // Ustawiamy transmisje na 9600 bodow SIMxxx-Arduino
     gsm.begin(9600);
   }
   
   void loop()
   {
     // Jesli SIMxxx wysyla nam dane, odbieramy i wysylamy na port szeregowy
     if (gsm.available())
     {
       Serial.write(gsm.read());
     }
   
     // Odczytujemy nasze polecenie
     while (Serial.available())
     {
       delay(10);
       if (Serial.available() > 0)
       {
         char c = Serial.read();
         atCommand += c;
       }
     }
   
     // Jesli jest polecenie, wyslij do moduly GSM
     if (atCommand.length() > 0)
     {
       gsm.println(atCommand);
       atCommand = "";
     }  
   }

4. Przyznaję się bez bicia.
5. Rzeczywiście posiadam jedynie miernik.

Czy kod na połączenie szeregowe z modułem jest poprawny? Jeśli tak to dlaczego nie mogę go skompilować?

EDIT: Już mi się udało skompilować. Spróbuję się połączyć z modułem i napiszę jakie przyniosło to rezultaty.

EDIT2: Po wgraniu tego programu i włączeniu monitora portu szeregowego w IDE nic się nie dzieje. Wpisuję komendy, zatwierdzam enterem ale nie pojawiają się poniżej (puste okno). Przy zatwierdzaniu komendy mignie zielona dioda w Arduino więc program jest chyba poprawny. Czy SIM800 jest źle podpięty czy ja źlę coś wpisuję?

Próbowałem np. AT+CPIN? oraz AT+COPS? i nic się poniżej nie wyświetla, tylko pusta strona.

EDIT3: Moduł poprawnie reaguje na komendy AT i wysyła informacje zwrotne. Problemem był Brak masy między SIM800 a Nano. Testuję dalej.


Załączone pliki Miniatury
   
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości