В чем проблема?

#include<SoftwareSerial.h>

#define HIGH_GAS_K 65 //Отсчет высокой концентрации %

#define MEDIUM_GAS_K 30 //Отсчет средней концентрации %, низкая концентрация все что меньше средней

Stringphone = "+"; //Номер телефона куда отсылать смс

int Buzzer_flag = 0, Bz= 0;

int SMS1_s = 0, SMS2_s = 0;

SoftwareSerialmySerial(2, 3); // RX, TX

void setup() {

analogReference(DEFAULT);

pinMode(A3, INPUT);

pinMode(A0, OUTPUT);

pinMode(A1, OUTPUT);

pinMode(A2, OUTPUT);

pinMode(5, OUTPUT); // объявляем пин 5 как выход

pinMode(13, OUTPUT);

Serial.begin(19200); //Скорость порта для связи Arduino с компьютером

Serial.println("Goodnightmoon!");

mySerial.begin(19200); //Скорость порта для связи Arduino с GSM модулем

mySerial.println("AT");

digitalWrite(A0,HIGH);

digitalWrite(A1,HIGH); digitalWrite(A2,HIGH);

delay(2000);

digitalWrite(A0,LOW);

digitalWrite(A1,LOW);

digitalWrite(A2,LOW);
void sms(String text) 
{ mySerial.println("AT+CMGF=1");
delay(1000);
mySerial.println("AT+CSCS=");
mySerial.println('"');
mySerial.println("GSM");
mySerial.println('"');
delay(1000);
mySerial.println("AT+CMGS=\"" + phone + "\"");  // Указываем номер, на который нужно передать сообщение
delay(1000);    // Формируем задержку 1 секунду
mySerial.print(text)           // Передаем текст сообщения
delay(300);          // Формируем задержку 300 мс
mySerial.print((char)26);   // Передаем символ конца строки
delay(3000);}// Формируем задержку 3 секунды
intGAS_COUNT()

{float ADC_val = analogRead(A3);

float Val = ADC_val / 320;

int Rez_val = Val * 100;

return Rez_val;}
void GAS_PROTECT()

{int GAS_K = GAS_COUNT();

Serial.println(GAS_K);

delay(1000);

if(GAS_K >= 0 && GAS_K <= MEDIUM_GAS_K)

{digitalWrite(A0,HIGH);

digitalWrite(A1,LOW);

digitalWrite(A2,LOW);

noTone(5);

SMS1_s = 0;

SMS2_s = 0;

Bz = 0;}

if(GAS_K > MEDIUM_GAS_K && GAS_K <= HIGH_GAS_K)

{digitalWrite(A0,LOW);

digitalWrite(A1,HIGH);

digitalWrite(A2,LOW);

if(Buzzer_flag< 500)

{if(Bz == 0)

{if(SMS1_s == 0)

{sms("GAZ_MED."); SMS1_s = 1;}

tone(5,1000);

Bz = 1;}}

else

{noTone(5);

Bz = 0;}

Buzzer_flag++;

if(Buzzer_flag>= 3000)

{Buzzer_flag = 0;} }

if(GAS_K > HIGH_GAS_K)

{digitalWrite(A0,LOW);

digitalWrite(A1,LOW);

digitalWrite(A2,HIGH);

if(Buzzer_flag< 500)

{if(Bz == 0)

{if(SMS2_s == 0)

{sms("GAZ_HIGH")

SMS2_s = 1;}

tone(5,1000);

Bz = 1;}} else

{noTone(5);

Bz = 0;}

Buzzer_flag++;

if(Buzzer_flag>= 1000)

{Buzzer_flag = 0;}}}
void loop()

{if (mySerial.available())
Добрый день! Помогите пожалуйста найти ошибку в коде! Суть программы дистанционное оповещение об утечки газа. 

Serial.write(mySerial.read());

if (Serial.available())

mySerial.write(Serial.read()); GAS_PROTECT();}

@Yana96

  1. Код вставился неудачно, получилось много отдельных кусков.
    Кроме того, текст вопроса тоже попал в код. Вставьте код еще раз, чтобы он получился единым.

  2. Пожалуйста, более четко и вдумчиво сформулируйте проблему. Не просто “Помогите найти ошибку”, а в чем эта ошибка заключается, как проявляется. Если код не компилируется - покажите сообщения компилятора об ошибке. Если компилируется, но не работает - опишите как он должен работать и чем это отличается от того, что вы имеете сейчас

Желательно еще сменить заголовок на более информативный.

Видимо, в том, что Вы забыли написать, что там у Вас за проблема? :slight_smile:

Я вижу две ошибки - это использование SoftwareSerial и датчика семейства MQ.

1 лайк

К чему тут ваш цинизм?

Цинизм? Да, Господь с Вами. Это была просьба описать проблему, чтобы мы могли помочь.

Мы тоже не знаем, в чем заключается проблема, программа заключается в дистанционном оповещении об утечке газа, при подаче газа пьезоизлучатель не пищит, смс на телефон , указанный в коде, не приходит

экстрималка?

“Вы” - это кто? Вы не одна это делаете?

Ах, вот это что. Ну, так надо было с этого начинать.

Это уже похоже на описание проблемы. Вот с этого места поподробнее.

И, да, обязательно выложите схему устройства и фото сборки. Это сильно увеличит шансы на успех.

ТС (Топик Стартёрка - феминитив от Топик Стартер)!

Гендерная самоидентификация, даже в разделе “Песочница” не избавляет от простых правил общения.

Для того, что быть понят -ым(-ой)(-ыми), следует оформить свой вопрос примерно так (один из проверенных вариантов):

  1. Начать с вопроса, сформулированного простыми словами. В конкретном случае: "Система не совершает звонок (не отправляет СМС… или что-там-еще)
  2. Описать систему: контроллер такой-то, модуль GSM такой-то, датчики, Блоки питания и пр.
  3. Привести код.
  4. Привести схему соединений и желательно фото.
  5. Описать, что автор(-ка) ждет от системы.
  6. Описать что происходит в реальности.
  7. описать чем 5 отличается от 6, в понимании автор-а(-ки).

так задай вопрос автору кода

Повторюсь! “Большого слона надо есть по частям”!!!

1 лайк

Тут не на что обижаться, люди вам помочь хотят. ваш вопрос не понятен без пояснений.

Вы пробовали разбираться сами? насколько вы понимаете этот код или он для вас вообще китайская грамота?
Если вы не готовы пытаться что-то сделать самостоятельно - то боюсь у вас ничего не выйдет. Помочь вам форум может, но решать вашу проблему ЗА ВАС никто не будет.

Для начала - вы пробовали выводить показания датчика газа в монитор порта на компьютере? При подаче газа цифры меняются?

И да - поправьте код. Он неверно вставлен в сообщение и не отформатирован. При всем моем желании помочь, в такой коде я копаться не стану.
Обьяснение как правильно вставлять код есть в той ветке, куда вы сначала запостили свой вопрос.

а вот так одна не решается?

//#include <SoftwareSerial.h>
#include <SoftSerial_INT0.h>

#define HIGH_GAS_K 65   //Отсчет высокой концентрации %
#define MEDIUM_GAS_K 30 //Отсчет средней концентрации %, низкая концентрация все что меньше средней
String phone = "+";      //Номер телефона куда отсылать смс
int Buzzer_flag = 0, Bz = 0;
int SMS1_s = 0, SMS2_s = 0;

//SoftwareSerial mySerial(2, 3); // RX, TX
SoftSerial mySerial(2, 3); // RX, TX

Если бы на AVR софтварный сериал успешно заменял хардварный, то люди были бы счастливыми и мир бы наступил во всем мире.

остаётся топить за 328PB