Как сюда всобачить flag?

Mestniy96
Offline
Зарегистрирован: 31.08.2015

Добрый день! Хотелось бы, чтобы смс приходило не постоянно, когда значение меняется...

Вот когд:

#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);
}

 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Меня больше эта конструкция добила.

if (digitalRead(RELE_PIN == LOW))

может надо так

if (digitalRead(RELE_PIN) == LOW) // 1 вариант 
if (!digitalRead(RELE_PIN)) // 2 вариант

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

qwone пишет:

Меня больше эта конструкция добила.

if (digitalRead(RELE_PIN == LOW))

А чем эта контсрукция не нравится?

В зависимости от значения RELE_PIN происходит чтение либо с 0 либо с 1 пина. В зависимости от прочитанного - выполняется или нет ветка условия.

UserDead
UserDead аватар
Offline
Зарегистрирован: 29.11.2015

Мне кажется неправильным считывать OUTPUT функцией digitalRead. модет компилятор так позволяет, но я для таких случаев использую нечто вроде flagState. Я вижу он заточен толкько под выход тогда он должен быть INPUT если вы читаете им значение. А если все таки это увравляемый выход тогда делается это объявлением переменной

boolean state=0;

а когда хотите поменять значение выхода тогда сделать

state = !state;

digitalWrite(PIN, state);

Но все таки разберитесь или поясните почему у вас RELE_PIN как выход но данные с него читаються как INPUT а управляющих команд нет.

Mestniy96
Offline
Зарегистрирован: 31.08.2015

Пфффф. Блин точно - нужен инпут!!!

Logik
Offline
Зарегистрирован: 05.08.2014

andriano пишет:

qwone пишет:

Меня больше эта конструкция добила.

if (digitalRead(RELE_PIN == LOW))

А чем эта контсрукция не нравится?

В зависимости от значения RELE_PIN происходит чтение либо с 0 либо с 1 пина. В зависимости от прочитанного - выполняется или нет ветка условия.

Вот только знает ли об этом автор... Судя по строке 2 в коде, то нет)))

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Logik пишет:

Вот только знает ли об этом автор... Судя по строке 2 в коде, то нет)))

Зато какой простор для оптимизатора кода!

Mestniy96
Offline
Зарегистрирован: 31.08.2015

Ехехеех. Ладно спасибо!!!

Mestniy96
Offline
Зарегистрирован: 31.08.2015

  https://drive.google.com/open?id=0BwtVOS-V9C9AWU9GeGlKc0FiTjA

Решил скомпилировать и вот что. Пните пожалуйста, где я накосячил?

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Подними функцию sms() наверх, перед setup() и loop().