11-03-2018, 18:08
(11-03-2018, 18:04)gintur napisał(a): Witam.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.
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]
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]