• 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
#11
(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
 
Odpowiedź
#12
Nie ale Ty mi w tym w ogóle nie pomogłeś.
 
Odpowiedź
#13
(11-07-2018, 19:04)mojojek napisał(a): Nie ale Ty mi w tym w ogóle nie pomogłeś.

A kto pomógł?
 
Odpowiedź
#14
Byłeś na elektrodzie więc dobrze wiesz kto. Skoro Ci to tak bardzo potrzebne abym napisał to pomógł użytkownik nowyARM.
 
Odpowiedź
#15
(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?
 
Odpowiedź
#16
NowyARM==es2 jakbyś jeszcze na to nie wpadł. Też masz inne pseudo na elektrodzie, ale sposób pisania daje do myślenia.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#17
(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?
 
Odpowiedź
#18
(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.
 
Odpowiedź
#19
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ść.
 
Odpowiedź
#20
(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).
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości