• 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
Informacje w porcie szeregowym arduino
#1
Kod:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(11,12);  // (Rx,Tx  > Tx,Rx)

char incomingByte;
String inputString;
int relay = 5;// Wyjście do sterowania przekaźnikiem
int relaya = 4;
void setup()
{
     pinMode(2,INPUT);
     pinMode(relay, OUTPUT);
     pinMode(relaya,OUTPUT);
     digitalWrite(relay, LOW); // Stan wyjścia przekaźnikowego po uruchomieniu układu
     digitalWrite(relaya,LOW);
     Serial.begin(9600);
     mySerial.begin(9600);
     attachInterrupt(digitalPinToInterrupt(2),alarm,RISING);
     
    while(!mySerial.available()){
       mySerial.println("AT");
       delay(1000);
       Serial.println("Connecting...");
       }
     Serial.println("Connected!");
    mySerial.write("AT+CMGF=1\r\n");
    delay(100);
   mySerial.write("AT+CMGS=\"+48xxxxxxxx[attachment=3]20180517_163038.jpg[/attachment]\"\r\n");
delay(100);
mySerial.write("START SYSTEMU");
delay(100);
mySerial.write((char)26);
delay(100);
     
     mySerial.println("AT+CMGF=1");  //Ustawiamy SMSy w tryb tekstowy
     delay(1000);  
     mySerial.println("AT+CNMI=1,2,0,0,0");  //Procedura, która obsługuje nadchodzące wiadomości  
     delay(1000);
     mySerial.println("AT+CMGL=\"REC UNREAD\""); // Komdenda odczytu nowych wiadomości
    }
    void alarm(){
mySerial.write("AT+CMGF=1\r\n");
delay(1000);
//wpisujemy numer telefonu pod który nasze urządzenie ma wysyłaś SMS
mySerial.write("AT+CMGS=\"+485xxxxxxxx\"\r\n");
delay(1000);
//treść wiadomości w przypadku alarmu
mySerial.write("ALARM");
delay(1000);
mySerial.write((char)26);
delay(1000);
}

void loop()
{  
 if(mySerial.available()){
     delay(100);

     // Serial Buffer
     while(mySerial.available()){
       incomingByte = mySerial.read();
       inputString += incomingByte;
       }

       delay(10);      

       Serial.println(inputString);
       inputString.toUpperCase(); // Zmiana wszystkich liter na wielkie w odebranej wiadomości

       //turn RELAY ON or OFF
       if (inputString.indexOf("LON") > -1){
         digitalWrite(relay, HIGH);
         }
        if (inputString.indexOf("LOFF") > -1){
         digitalWrite(relay, LOW);
         }          

       delay(50);
        if (inputString.indexOf("WLA") > -1){
         digitalWrite(relaya, HIGH);
         }
        if (inputString.indexOf("WYA") > -1){
         digitalWrite(relaya, LOW);
         }          

       delay(50);

       // Tutaj kasujemy wiadomości w modemie, aby oszczędzać pamięć
       if (inputString.indexOf("OK") == -1){
       mySerial.println("AT+CMGDA=\"DEL ALL\"");

       delay(1000);}

       inputString = "";
 }
}
[/code]
Witam.

Mam złożony układ na podstawie tego tematu

https://majsterkowo.pl/alarm-z-powiadom ... s-arduino/

dodatkowo "dorzuciłem" sterowanie smsem 2 wyjściami z arduino D4 i D5.Za pomocą komend

"WLA" stan wysoki dla D4

"WYL" stan niski dla D4

"LON" stan wysoki dla D5

"LOFF" stan niski dla

Wyjście D4 daje napięcie zasilające na czujnik PIR ma to być taki wyłącz/włącz tego "alarmu"
Wiem ,że kod jest słabiutki bo już były takie opinie ale jak na moje możliwości .....
Układ składa się z SIM800l ,konwerter poziomów logicznych,arduino nano,2 regulatory napięcia i to wszystko zasilane 2 aku Li-Ion.
Problem polega na tym ,że nie zawsze ten układ działa a ja nie wiem o co chodzi.Wgrywam w/w kod do arduino i po chwili otzrymuje smsa "START SYSTEMU
   
Wysyłam komendę np. "WLA" i nic się nie dzieje
   
Ale kiedy np. na arduino wgram jakiś tam inny kod a potem znowu wgram ten w/w no to za którymś tam razem układ DZIALA
   
   
 
Odpowiedź
#2
Witam. Parę podobnych tematów było, tu jest coś co działa: http://forum.arduinopolska.pl/watek-ster...%C5%82-gsm jak nie wystarczy to pytaj dalej.
 
Odpowiedź
#3
Nawaliłeś tych delay, nie sprawdzasz w jakim stanie jest modem, czy dał odpowiedź, jaką. Gubisz znaki albo wysyłasz do modemu dane gdy nie może ich przyjąć i tyle.
Z logów z monitora (co to za moda na fotki? jak pokażesz mi log składający się z 20 ekranów?) widać że modem nie odbiera SMS.Może wysyłasz komendy gdy np jest w trybie oczekiwania na treść SMS? Może wysyłasz komendę gdy kasuje SMS? Poczytaj komendy modemu, każda ma napisane w jakim czasie odpowiada, np wysłanie SMS to max 60 sekund. W tym czasie modem nie będzie reagował na komendy (o ile dobrze pamiętam).
Nie sprawdzasz czy modem jest zalogowany do sieci a próbujesz wysyłać SMS. Na telefonie, jak jest napis "BRAK SIECI" albo "TYLKO SOS" wysyłasz SMS i dziwisz sie dlaczego nie dotarł do nadawcy?
Pomagam (nie prowadzę kursów), tylko, gdy w poście załączone są niezbędne materiały (kod, schemat) a pytający zna podstawy.

Na kod z Delay szkoda czasu.
Kod wymaga komentowania.
Kod bez WDT jest niepewny.



 
Odpowiedź
  


Skocz do:


Przeglądający: 2 gości