Arduino Polska Forum
Problem z kodem - nie dzwoni na podany numer - Wersja do druku

+- Arduino Polska Forum (https://forum.arduinopolska.pl)
+-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino)
+--- Dział: Programowanie w Arduino (https://forum.arduinopolska.pl/dzial-programowanie-w-arduino)
+--- Wątek: Problem z kodem - nie dzwoni na podany numer (/watek-problem-z-kodem-nie-dzwoni-na-podany-numer)

Strony: 1 2 3


RE: Problem z kodem - nie dzwoni na podany numer - es2 - 11-07-2018

(11-07-2018, 14:52)mojojek napisał(a): EDIT3: Moduł poprawnie reaguje na komendy AT i wysyła informacje zwrotne. Problemem był Brak masy między SIM800 a Nano. Testuję dalej.
Sam na to wpadłeś? https://www.elektroda.pl/rtvforum/topic3479221.html


RE: Problem z kodem - nie dzwoni na podany numer - mojojek - 11-07-2018

Nie ale Ty mi w tym w ogóle nie pomogłeś.


RE: Problem z kodem - nie dzwoni na podany numer - es2 - 11-07-2018

(11-07-2018, 19:04)mojojek napisał(a): Nie ale Ty mi w tym w ogóle nie pomogłeś.

A kto pomógł?


RE: Problem z kodem - nie dzwoni na podany numer - mojojek - 11-07-2018

Byłeś na elektrodzie więc dobrze wiesz kto. Skoro Ci to tak bardzo potrzebne abym napisał to pomógł użytkownik nowyARM.


RE: Problem z kodem - nie dzwoni na podany numer - es2 - 11-07-2018

(11-07-2018, 19:28)mojojek napisał(a): Byłeś na elektrodzie więc dobrze wiesz kto. Skoro Ci to tak bardzo potrzebne abym napisał to pomógł użytkownik nowyARM.
Pomógł? Czemu więc nie kliknąłeś "pomógł" ani nawet pomocny post?


RE: Problem z kodem - nie dzwoni na podany numer - kaczakat - 11-07-2018

NowyARM==es2 jakbyś jeszcze na to nie wpadł. Też masz inne pseudo na elektrodzie, ale sposób pisania daje do myślenia.


RE: Problem z kodem - nie dzwoni na podany numer - mojojek - 11-07-2018

(11-07-2018, 19:40)es2 napisał(a):
(11-07-2018, 19:28)mojojek napisał(a): Byłeś na elektrodzie więc dobrze wiesz kto. Skoro Ci to tak bardzo potrzebne abym napisał to pomógł użytkownik nowyARM.
Pomógł? Czemu więc nie kliknąłeś "pomógł" ani nawet pomocny post?

Najmocniej przepraszam i dziękuję za wszystkie wskazówki, nie wiedziałem, że piszę z tą samą osobą. Oczywiście cofam to co wcześniej napisałem i bez Twojej pomocy pewnie bym tego nie ogarnął. Mam nadzieję, że nie żywisz żadnej urazy i stosowne podziękowania oczywiście na elektrodzie kliknę.
Nie wiem tylko gdzie mam teraz odpisywać, tutaj, czy tam.

Wkleję również tutaj omawiany kod (może komuś się przyda):

Kod:
#include <SoftwareSerial.h>

SoftwareSerial GPRS(11, 12);
boolean state, lastState;

void setup()
{
pinMode(2, INPUT_PULLUP);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
state = digitalRead(2);
lastState = state;

GPRS.begin(9600);
Serial.begin(9600);

GPRS.println("AT+CMGF=1");

delay(1000);
}

void loop()
{
while(GPRS.available()) {
  Serial.write(GPRS.read());
}

lastState = state;
state = digitalRead(2);

if ( state != lastState ) {
  sendSMS();
  digitalWrite(3, HIGH);
  digitalWrite(4, LOW);
}

delay(500);
}

void sendSMS() {
Serial.print("ALARM ");
Serial.println(state ? "WLAMANIE!" : "UZBROJONY" );

GPRS.println("AT+CMGS=\"+48xxxxxxxxx\"");

delay(500);

GPRS.print("ALARM ");
GPRS.println(state ? "WLAMANIE!" : "UZBROJONY" );
GPRS.write( 0x1a ); // ctrl+Z character

delay(500);
}

Odnośnie zawieszenia programu po "AT+CMGS", o którym wspomniałeś. Nic takiego póki co się nie wydarzyło jednak jak temu zaradzić? Co konkretnie należałoby dopisać do kodu?

Jest jakieś inne wyjście prócz zapamiętaniem stanu pinu? Rozumiem, że zapamiętać musi za każdym razem w pamięci flash?


RE: Problem z kodem - nie dzwoni na podany numer - es2 - 11-07-2018

(11-07-2018, 20:10)mojojek napisał(a): Odnośnie zawieszenia programu po "AT+CMGS", o którym wspomniałeś. Nic takiego póki co się nie wydarzyło jednak jak temu zaradzić? Co konkretnie należałoby dopisać do kodu?
Nie zdarzyło, szanse sa małe ale są. Skoro tak to należy temu zapobiegać. Jakbyś swój soft miał w 400 modemach, to pewnie szanse na błąd rosną.

1. Po każdej komendzie czeka na odpowiedź z odpowiednim timeout. W DS znajdziesz te czasy dla każdej komendy. Często jest to 1 sekunda, czasem 0, czasem 60 sekund.
2. Jak modem nie odpowiada wyślij CTRL+Z.
3. Jak dalej nie odpowiada trzeba modem włączyć bo pewnie jest wyłączony.

(11-07-2018, 20:10)mojojek napisał(a): Jest jakieś inne wyjście prócz zapamiętaniem stanu pinu? Rozumiem, że zapamiętać musi za każdym razem w pamięci flash?
Inny sposób niż zapamiętanie stanu pinu nie przychodzi mi do głowy. Stan pinu najlepiej zapamiętać w EERPOM. Trzeba tylko pamiętać o max gwarantowanej liczbie zapisów i backupie.


RE: Problem z kodem - nie dzwoni na podany numer - mojojek - 11-07-2018

Rozumiem, że zapamiętany ma być stan na pinie 2 (po każdej jego zmianie) i po zaniku/podaniu zasilania ma być ten stan odczytany tylko przy włączeniu. Następnie w zależności od stanu ustaw diody low lub high. Czy dobrze to rozumiem?

Mogę prosić o jakiś przykładowy kod z zapamiętaniem i odczytem stanu?

Aha i czy od ciągłego, częstego zapisu i odczytu EEPROM szybciej nie padnie? Wiem, że te pamięci mają swoją żywotność.


RE: Problem z kodem - nie dzwoni na podany numer - es2 - 11-07-2018

(11-07-2018, 21:22)mojojek napisał(a): Rozumiem, że zapamiętany ma być stan na pinie 2 (po każdej jego zmianie) i po zaniku/podaniu zasilania ma być ten stan odczytany tylko przy włączeniu. Następnie w zależności od stanu ustaw diody low lub high. Czy dobrze to rozumiem?
Piszesz tak nieskładnie, że ciężko cokolwiek zrozumieć Narysuj sobie algorytm działania, przemyśl to co zrobisz, napisz soft, wypróbuj.

(11-07-2018, 21:22)mojojek napisał(a): Mogę prosić o jakiś przykładowy kod z zapamiętaniem i odczytem stanu?
Klauzula sumienia nie pozwala mi odwalać "czarnej" roboty.

(11-07-2018, 21:22)mojojek napisał(a): Aha i czy od ciągłego, częstego zapisu i odczytu EEPROM szybciej nie padnie? Wiem, że te pamięci mają swoją żywotność.
"Padnie", jakie są tego efekty poczytaj. Metod rozwiązania małej liczby zapisów do EEPROM jest kilka. Najlepiej użyć metody używanej przez producentów uC gdzie najczęściej EEPROM jest emulowany w pamięci FLASH. Obejrzyj biblioteki STM-a, jak to rozwiązali (STM32, poza STM32L, nie maja emulowanego EEPROM, trzeba to robić programem). Są też rozwiązania sprzętowe (zapis przy zaniku zasilania, .pamięć FRAM, NVRAM).