Arduino Polska Forum

Pełna wersja: Arduino-przekazniki sterowane sms-em
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Witam.

Poniższy kod steruje 2 przekaźnikami za pomocą sms-a i działa jak na moje potrzeby.Chciałbym rozbudować ten kod o dodatkową funkcje,chodzi mi o smsa zwrotnego ze dane polecenie zostało wykonane np.jeżeli wyśle sms o treści "ON" to na wyjściu 5 pojawi się stan "WYSOKI" i chciałbym dostać sms-a na konkretny nr. o treści np. " Pin 5 HIGH".
Kod:
[code]
#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(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);

    while(!mySerial.available()){
       mySerial.println("AT");
       delay(1000);
       Serial.println("Connecting...");
       }
     Serial.println("Connected!");  
     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 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("ON") > -1){
         digitalWrite(relay, HIGH);
         }
        if (inputString.indexOf("OFF") > -1){
         digitalWrite(relay, LOW);
         }          

       delay(50);
        if (inputString.indexOf("WL") > -1){
         digitalWrite(relaya, HIGH);
         }
        if (inputString.indexOf("WY") > -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]
(11-03-2018, 18:04)gintur napisał(a): [ -> ]Witam.

Poniższy kod steruje 2 przekaźnikami za pomocą sms-a i działa jak na moje potrzeby.Chciałbym rozbudować ten kod o dodatkową funkcje,chodzi mi o smsa zwrotnego ze dane polecenie zostało wykonane np.jeżeli wyśle sms o treści "ON" to na wyjściu 5 pojawi się stan "WYSOKI" i chciałbym dostać sms-a na konkretny nr. o treści np. " Pin 5 HIGH".
Kod:
[code]
#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(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);

    while(!mySerial.available()){
       mySerial.println("AT");
       delay(1000);
       Serial.println("Connecting...");
       }
     Serial.println("Connected!");  
     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 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("ON") > -1){
         digitalWrite(relay, HIGH);
         }
        if (inputString.indexOf("OFF") > -1){
         digitalWrite(relay, LOW);
         }          

       delay(50);
        if (inputString.indexOf("WL") > -1){
         digitalWrite(relaya, HIGH);
         }
        if (inputString.indexOf("WY") > -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]
Próbowałem wstawić cos takiego ale działało nie do końca prawidłowo .Sms zwrotny przychodzi ale nie jeden tylko leci cała seria i nie wiem dlaczego przy okazji załącza się wyjście 4.
Kod:
[code]
#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(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);

    while(!mySerial.available()){
       mySerial.println("AT");
       delay(1000);
       Serial.println("Connecting...");
       }
     Serial.println("Connected!");  
     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 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("ON") > -1){
         digitalWrite(relay, HIGH);
         mySerial.println("AT+CMGF=1");    //Sets the GSM Module in Text Mode
 delay(1000);  // Delay of 1000 milli seconds or 1 second
 mySerial.println("AT+CMGS=\"+48xxxxxxxxx\"\r"); // Replace x with mobile number
 delay(1000);
 mySerial.println("Wlaczona 4");// The SMS text you want to send
 delay(100);
     
         }
        if (inputString.indexOf("OFF") > -1){
         digitalWrite(relay, LOW);
         }          

       delay(50);
        if (inputString.indexOf("WL") > -1){
         digitalWrite(relaya, HIGH);
         }
        if (inputString.indexOf("WY") > -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]