سلام
یک برنامه خیلی ساده رو از اینترنت گرفتم که از طریق sim800l تعریف شده اگر پیامک D1 اومد یک رله رو فعال و بعد از 1000 میلی ثانیه غیرفعال کنه تا درب باز بشه
برنامه کار میکنه اما بعد از چند بار استفاده هر پیامکی که واسش ارسال بشه درب رو باز میکنه
;کد برنامه :
رله و LED ها به پین های آنالوگ متصل شدن و یک پایه هم به منفی متصل شده
یک برنامه خیلی ساده رو از اینترنت گرفتم که از طریق sim800l تعریف شده اگر پیامک D1 اومد یک رله رو فعال و بعد از 1000 میلی ثانیه غیرفعال کنه تا درب باز بشه
برنامه کار میکنه اما بعد از چند بار استفاده هر پیامکی که واسش ارسال بشه درب رو باز میکنه
;کد برنامه :
[FONT=Yekan]#include <SoftwareSerial.h>[/FONT]#include <EEPROM.h>
int addr = 0;
SoftwareSerial SIM(8, 7);
const byte PIN_RLY1 = A2;
const byte YELLOW = A0;
const byte RED = A1;
const byte BUZZER = A3;
const byte GREEN = A4;
const byte PIN_LED = 13;
int _timeout;
String _buffer;
int ledState = LOW;
const long interval = 500;
unsigned long previousMillis = 0;
void setup()
{
Serial.begin(9600);
Serial.println("Start ...");
SIM.begin(9600);
_buffer.reserve(255);
pinMode(PIN_RLY1, OUTPUT);
pinMode(PIN_LED, OUTPUT);
pinMode(YELLOW, OUTPUT);
pinMode(RED, OUTPUT);
pinMode(BUZZER, OUTPUT);
pinMode(GREEN, OUTPUT);
digitalWrite(PIN_RLY1, LOW);
digitalWrite(YELLOW, LOW);
digitalWrite(RED, LOW);
digitalWrite(BUZZER, LOW);
digitalWrite(GREEN, LOW);
digitalWrite(PIN_LED, HIGH);
digitalWrite(RED, HIGH);
delay(500);
digitalWrite(RED, LOW);
Serial.println("30 Seconds Delay");
delay(3000);
digitalWrite(YELLOW, HIGH);
delay(500);
digitalWrite(YELLOW, LOW);
SerialOk();
Serial.println("Serial Ok");
GsmOk();
Serial.println("GSM Ok");
BasicSettings();
Serial.println("Basic Setting Ok");
DelAllSms();
Serial.println("All SMS Removed Success");
digitalWrite(PIN_LED, LOW);
digitalWrite(BUZZER, HIGH);
delay(500);
digitalWrite(BUZZER, LOW);
digitalWrite(GREEN, HIGH);
delay(1000);
digitalWrite(GREEN, LOW);
}
void loop()
{
if (SIM.available())
{
_buffer = SIM.readString();
if (_buffer.indexOf("+") != -1)
{
digitalWrite(YELLOW, HIGH);
delay(1000);
digitalWrite(YELLOW, LOW);
_buffer = "";
RxdSms();
}
_buffer = "";
digitalWrite(GREEN, HIGH);
delay(500);
digitalWrite(GREEN, LOW);
}
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval)
{
previousMillis = currentMillis;
if (ledState == LOW)
{
ledState = HIGH;
} else {
ledState = LOW;
}
digitalWrite(PIN_LED, ledState);
}
}
void SerialOk()
{
while (_readSerial("AT").indexOf("OK") == -1) {
delay(1000);
}
}
void GsmOk()
{
while (_readSerial("AT+CGREG?").indexOf("+CGREG: 0,1") == -1) {
delay(1000);
}
}
void BasicSettings()
{
while (_readSerial("ATE0").indexOf("OK") == -1) {
delay(1000);
}
while (_readSerial("AT+CMGF=1").indexOf("OK") == -1) {
delay(1000);
}
while (_readSerial("AT+MORING=1").indexOf("OK") == -1) {
delay(1000);
}
while (_readSerial("AT+CSMP=17,167,0,0").indexOf("OK") == -1) {
delay(1000);
}
}
void DelAllSms() {
while (_readSerial("AT+CMGDA=\"DEL ALL\"").indexOf("OK") == -1) {
delay(1000);
}
}
void RxdSms()
{
_readSerial("AT+CMGR=1");
digitalWrite(PIN_LED, HIGH);
//Serial.println(get_mobile(_buffer));
//Serial.println(get_message(_buffer));
if (_buffer.indexOf("D1") != -1)
{
if (get_mobile(_buffer) == "930xxxxxxx" || get_mobile(_buffer) == "930xxxxxxx" || get_mobile(_buffer) == "930xxxxxxx")
{
digitalWrite(BUZZER, HIGH);
delay(500);
digitalWrite(BUZZER, LOW);
delay(500);
digitalWrite(PIN_RLY1, HIGH);
delay(1000);
digitalWrite(PIN_RLY1, LOW);
delay(500);
send_sms("Dar Baz Shod", get_mobile(_buffer));
delay(1000);
digitalWrite(GREEN, HIGH);
delay(500);
digitalWrite(GREEN, LOW);
_buffer = "XxXxXxXxXxXxXxXxXxXx";
} else {
digitalWrite(BUZZER, HIGH);
digitalWrite(RED, HIGH);
delay(1500);
digitalWrite(BUZZER, LOW);
digitalWrite(RED, LOW);
}
}
DelAllSms();
digitalWrite(PIN_LED, LOW);
ledState = LOW;
_buffer = "XxXxXxXxXxXxXxXxXxXx";
}
String _readSerial(String _print)
{
SIM.flush();
if (SIM.readString() != "")
{
while (SIM.readString() != "") {
}
}
_buffer = "";
if (_print != "")
{
SIM.println (_print);
_timeout = 0;
while (!SIM.available() && _timeout < 12000 )
{
delay(1);
_timeout++;
}
if (SIM.available())
{
_buffer = SIM.readString();
}
}
return _buffer;
}
String get_mobile(String textBuffer)
{
String mobile = midString(textBuffer ,"\",\"+98", "\",");
return mobile;
}
String get_message(String textBuffer)
{
String first_line = midString(_buffer ,"+CMGR", "\n");
String msg = midString(_buffer ,"+CMGR"+ first_line +"", "OK");
msg.trim();
return msg;
}
String midString(String str, String start, String finish)
{
int locStart = str.indexOf(start);
if (locStart==-1) return "";
locStart += start.length();
int locFinish = str.indexOf(finish, locStart);
if (locFinish==-1) return "";
return str.substring(locStart, locFinish);
}
void send_sms(String message, String mobile)
{
SIM.println("AT+CMGF=1"); // Configuring TEXT mode
updateSerial();
SIM.println("AT+CMGS=\"+98"+ mobile +"\"");//change ZZ with country code and xxxxxxxxxxx with phone number to sms
updateSerial();
SIM.print(message); //text content
updateSerial();
SIM.write(26);
}
void updateSerial()
{
delay(500);
while (Serial.available())
{
SIM.write(Serial.read());//Forward what Serial received to Software Serial Port
}
while(SIM.available())
{
Serial.write(SIM.read());//Forward what Software Serial received to Serial Port
}
[FONT=Yekan]}[/FONT]
رله و LED ها به پین های آنالوگ متصل شدن و یک پایه هم به منفی متصل شده
دیدگاه