Как сюда всобачить 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().