Как сюда всобачить flag?
- Войдите на сайт для отправки комментариев
Чт, 01/09/2016 - 06:19
Добрый день! Хотелось бы, чтобы смс приходило не постоянно, когда значение меняется...
Вот когд:
#include <SoftwareSerial.h>
#define RELE_PIN 3
SoftwareSerial mySerial(2, 3); // RX, TX
int ch = 0;
int led = 13;
String val = "";
void setup() {
delay(2000); //время на инициализацию модуля
pinMode(led, OUTPUT);
pinMode(RELE_PIN, OUTPUT);
digitalWrite(led, LOW);
Serial.begin(9600); //скорость порта
Serial.println("GSM tester v1.0");
mySerial.begin(9600);
mySerial.println("AT+CLIP=1"); //включаем АОН
delay(100);
mySerial.println("AT+CMGF=1"); //режим кодировки СМС - обычный (для англ.)
delay(100);
mySerial.println("AT+CSCS=\"GSM\""); //режим кодировки текста
delay(100);
}
void loop() {
if (mySerial.available()) { //если GSM модуль что-то послал нам, то
while (mySerial.available()) { //сохраняем входную строку в переменную val
ch = mySerial.read();
val += char(ch);
delay(10);
}
if (Serial.available()) { //если в мониторе порта ввели что-то
while (Serial.available()) { //сохраняем строку в переменную val
ch = Serial.read();
val += char(ch);
delay(10);
}
//mySerial.println(val); //передача всех команд, набранных в мониторе порта в GSM модуль
if (digitalRead(RELE_PIN == HIGH))
{
sms(String("Sveta net"), String("+71234567890")); //отправляем СМС на номер +71234567890
}
if (digitalRead(RELE_PIN == LOW))
{
sms(String("Svet daly"), String("+71234567890")); //отправляем СМС на номер +71234567890
}
val = ""; //очищаем
}
}
void sms(String text, String phone) //процедура отправки СМС
{
Serial.println("SMS send started");
mySerial.println("AT+CMGS=\"" + phone + "\"");
delay(500);
mySerial.print(text);
delay(500);
mySerial.print((char)26);
delay(500);
Serial.println("SMS send complete");
delay(2000);
}
Меня больше эта конструкция добила.
может надо так
Меня больше эта конструкция добила.
А чем эта контсрукция не нравится?
В зависимости от значения RELE_PIN происходит чтение либо с 0 либо с 1 пина. В зависимости от прочитанного - выполняется или нет ветка условия.
Мне кажется неправильным считывать OUTPUT функцией digitalRead. модет компилятор так позволяет, но я для таких случаев использую нечто вроде flagState. Я вижу он заточен толкько под выход тогда он должен быть INPUT если вы читаете им значение. А если все таки это увравляемый выход тогда делается это объявлением переменной
boolean state=0;
а когда хотите поменять значение выхода тогда сделать
state = !state;
digitalWrite(PIN, state);
Но все таки разберитесь или поясните почему у вас RELE_PIN как выход но данные с него читаються как INPUT а управляющих команд нет.
Пфффф. Блин точно - нужен инпут!!!
Меня больше эта конструкция добила.
А чем эта контсрукция не нравится?
В зависимости от значения RELE_PIN происходит чтение либо с 0 либо с 1 пина. В зависимости от прочитанного - выполняется или нет ветка условия.
Вот только знает ли об этом автор... Судя по строке 2 в коде, то нет)))
Вот только знает ли об этом автор... Судя по строке 2 в коде, то нет)))
Зато какой простор для оптимизатора кода!
Ехехеех. Ладно спасибо!!!
https://drive.google.com/open?id=0BwtVOS-V9C9AWU9GeGlKc0FiTjA
Решил скомпилировать и вот что. Пните пожалуйста, где я накосячил?
Подними функцию sms() наверх, перед setup() и loop().