Не могу два работающих блока соединить в одном скетче.-was not declared in this scope

walera_kur
Offline
Зарегистрирован: 19.03.2019

Помогите пенсионеру решить проблему!! 

Делаю сигналку в гараж с ЖСМ модулем М590. Включить ТЭН и звонить мне при открытии дверей. Все работает прекрасно. Дальше добавил управление СМСками в том числе посмотреть баланс, прислать мне температуру, сколько времени осталось до конца работы тэна... Все это успешно стянул из инета подправил под себя, все заработало. но только поочереди ,при этом шапка и void setup() один и тот же.  Как только добавляю любой оператор к имеющемуся рабочему любому блоку появляются ошибки компиляции например -'sms' was not declared in this scope. И void loop() объденял  рабочие блоки скобками {} различными комбинациями не помогает.

Как такое может быть???  вот фрагмент скоча где два блока не живут ввместе!   вернее блок с модулем М590 не уживается с моими  любыми "кусками" наработками

#include <SoftwareSerial.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 6 // провод термометра 8 и (" 6 " (иправлено в плате))
SoftwareSerial mySerial(2, 3); // Rx Tx модуля 590

unsigned int i;// разрешение на звонок через час
unsigned int m;// время длинною час для повторгного звонка
unsigned int p;//   время работы тена
unsigned int l;//  взведена СМС по окончании шпинделя
unsigned int z;//  =1  дверь открыта  =0 закрыта

int konc = 5; // концевик дверей
int ten = 11; // выход вкл. тен
int rezerv = 12; // выход резерв
int ledsh = 10; // выход Led шпиндель
int intsh = 4; // вход шпиндель

OneWire oneWire(ONE_WIRE_BUS);// Настройка oneWire для связи с любыми устройствами OneWire
DallasTemperature sensors(&oneWire);


void setup()
{

  delay(2000);
 
  pinMode(ten, OUTPUT);
  pinMode(rezerv, OUTPUT);
  pinMode(ten, OUTPUT);
  pinMode(ledsh, OUTPUT);
  pinMode(konc, INPUT);
  pinMode(intsh, INPUT);

  sensors.begin(); // Запуск библиотеки термометра

  
  Serial.begin(9600);
  mySerial.begin(9600);

  Serial.println("Dallas Temperature IC демо");

  Serial.println("GSM NEOWAY Включаем модуль");
  Serial.println();
  Serial.println("Включаем AOH:");
  delay(1000);
  mySerial.println("AT+CLIP=1");  //включить АОН
  delay(1000);
  Serial.println("Регистрация в сети");
  Serial.println();
  delay(1000);
  mySerial.println("AT+CREG?");  //регистрация в сети
  delay(1000);
  mySerial.println("AT+CSQ");  //уровень сигнала
  delay(1000);
  mySerial.println("AT+CSCS=\"GSM\"");
  delay(1000);
  Serial.println("уровень сигнала");
  Serial.println();
  mySerial.println("AT+CMGF=1");// выставляем текстовым режим сообщений
  delay(1000);

  // ПРИ СТАРТЕ, НА КАЖДУЮ КОМАНДУ ДОЛЖНО БЫТЬ ПОДТВЕРЖДЕНИЕ - ОК



  i = 1; // разрешена тревога когда м сосчитала час (звонить не чаще раз в час когда открыты двери)
  p = 100; // Р- время работы печки после звонка
  m == 10; // время между звонками тревоги
  l = 0;   // взведена СМС по окончанию шпинделя


  if (mySerial.available()) //если модуль что-то послал
  {
    char ch = ' ';
    String val = "";

    while (mySerial.available())
    {
      ch = mySerial.read();
      val += char(ch); //собираем принятые символы в строку
      delay(3);
    }

    Serial.print("Neo send> ");
    Serial.println(val);

  }


}
void loop()
{





/////////////////////////////////////////////////////////////////////////////////////
  /////////////////////Модуль М590 выполняем действия по приходу СМС ////////////////////////////////
  /////////////////////////////////////////////////////////////////////////////////////




{
 if(mySerial.available()) //если модуль что-то послал
  {  
    char ch = ' ';
    String val = "";
    
    while(mySerial.available()) 
     {  
       ch = mySerial.read();
       val += char(ch); //собираем принятые символы в строку
       delay(3);
     }

    Serial.print("Neo send> ");
    Serial.println(val);
    
    if(val.indexOf("+CMT") > -1) //если есть входящее sms
{
    
     { 
      if(val.indexOf("Inf") > -1) // смотрим, что за команда
               {  
                                       delay(100);
                                       Serial.println("inf пришла");
             
                        
                                    while (1)
                                          { // проверяем готовность модема
                                            mySerial.println("AT+CPAS");
                                            if (mySerial.find("0")) break;
                                            delay(100);     
                                           Serial.println("модем готов");
                                          }
                              
                                    
                                   mySerial.println("AT+CMGS=\"+79221053***\""); // даем команду на отправку смс
                                    delay(100);
                                  mySerial.print("t1= ");  // отправляем текст
                                    mySerial.print(sensors.getTempCByIndex(0));    // и переменную со значением
                                    mySerial.print(", t2= ");  // отправляем текст
                                    mySerial.print(sensors.getTempCByIndex(1));    // и переменную со значением
                                    mySerial.print(", Shpindel= ");  // отправляем текст
                                    mySerial.print(l);    // и переменную со значением 
                                    mySerial.print(", Doors= ");  // отправляем текст
                                  //  mySerial.print(z);    // и переменную со значением  
                                    mySerial.print(", Obogrev= ");  // отправляем текст
                                    mySerial.print(p);    // и переменную со значением  ТУТ ЛАЖА 
                                    mySerial.print(", Motik skuchaet!!! ");  // отправляем текст    
                                    mySerial.print((char)26);          // символ завершающий передачу
                                    delay(200);
                                    Serial.println("отправлено");
                                  }
                              
                                  while (mySerial.available() > 0)// останавливаем программу и смотрим что ответили
                                  { 
                                    Serial.write(mySerial.read());
                                  }
     }                                

                                                      {
                                                        if(val.indexOf("Shp") > -1)
                                                        {
                                                        digitalWrite(ledsh, HIGH); 
                                                        l = 1;   // взведена СМС по окончанию шпинделя
                                                        
                                                        }
                                                      }


   {    
      if(val.indexOf("Bal") > -1) // смотрим, что за команда
       {  
         delay(3000);
         mySerial.println("ATD#100#;");
       }     
     } 

  }

    if(val.indexOf("+CUSD") > -1) //если есть входящее sms
     { 
      if(val.indexOf("Balance") > -1) // смотрим, что за команда
       {  
       
         delay(3000);
       
         val = val.substring(val.indexOf("Balance"),val.indexOf("r")); 
         sms(String(val), String("+79221053***")); // ВПИШИТЕ ВАШ НОМЕР
       }     
     }         
  }

}

void sms(String text, String phone)  //отправка СМС с балансом модема
{
  Serial.println("Start SMS send");
  mySerial.println("AT+CMGS=\"" + phone + "\"");
  delay(500);
  mySerial.print(text);
  delay(500);
  mySerial.print((char)26);
  delay(500);
  Serial.println("SMS send OK");
  delay(2000);
  mySerial.println("AT+CMGD=1,4");  // удалить все СМСки
}


/////////////////////////////////////////////////////////////////////////////////////
  /////////////////////конец блока с модулем М590////////////////////////////////
  /////////////////////////////////////////////////////////////////////////////////////





  /////////////////////////////////////////////////////////////////////////////////////
  /////////////////////ЗВОНОК ПО концевику !!начало блока ////////////////////////////////
  /////////////////////////////////////////////////////////////////////////////////////
  {

      {
        
            if(digitalRead(konc) == HIGH)
                  {
                     //Serial.println("нажата кнопка");
                      //         Serial.println(); 
                            if(i == 1)
                            {
                                    mySerial.println("ATD+79221053174;"); 
                                    delay(18000);
                                     mySerial.println("ATH");
                                    i=0;
                                    m=0;
                            }
                  }
              
      }
         
              
         
         
                    {
                           if(m == 300)  // 300= 30сек,  36000 = 1 час
                                {                          
                                   i=1;
                                }
                  
                                           else
                                                   
                                                {
                                                   m++;                              
                                                    delay(95); // только во время счета часа, для повторного звонка                            
                                                }
                  
                        }
                      
                                              
     }       
            
  ////////////////////////////////////////////////////////////////////////////////////////
  //////////////////////////////////конец блока звонок по концевику///////////////////////////
  //////////////////////////////////////////////////////////////////////////////////////////////

}

  
 

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

1. Что у Вас написано в строке №69? Вы уверены, что Вы хотели написать именно это?

2. Возьмите строки №№ 200-212 и перенесите их выше. например, вставьте их между строками №№ 91 и 92

walera_kur
Offline
Зарегистрирован: 19.03.2019

ЕвгенийП пишет:

1. Что у Вас написано в строке №69? Вы уверены, что Вы хотели написать именно это?

2. Возьмите строки №№ 200-212 и перенесите их выше. например, вставьте их между строками №№ 91 и 92

Евгений в №69  это я для себя писал. Так пометил переменную которая увеличивается до заданной величины и разрешает модему звонить  при вскрытой двери гаража. Модем звонит ср.№237  18 сек. это три гудка у меня получается, потом сброс. Пока открыта дверь раз в час будет дозвон.  Это что бы не делать постановку на охрану. Но это не  имеет значения к вопросу.

 

2. если переместить то попадет в -void setup(), и будет один раз делаться и не к месту.

 

Почему если оставить только первый блок и написать любой оператор ниже - то не компилируется??

мозг треснул.

 

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

walera_kur пишет:

Евгений в №69  это я для себя писал.

Я не знаяю, что Вы там писали. В этой строке написан чистый, рафинированный бред. Вот я и спросил, это то, что Вы хотели написать. Если то - нет проблем, каждый имеет правдо на бред.

walera_kur пишет:

2. если переместить то попадет в -void setup(), и будет один раз делаться и не к месту.

Между 91 и 92 ? Она попадёт между setup и loop

Вы просили сказать Вам как сделать, чтобы компилировалось? Так делайте, что Вам сказали, зачем умничать-то?

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

ЕвгенийП пишет:

1. Что у Вас написано в строке №69? Вы уверены, что Вы хотели написать именно это?

2. Возьмите строки №№ 200-212 и перенесите их выше. например, вставьте их между строками №№ 91 и 92

Это-то правильно, только там и дальше бред. После функции sms там идёт блок "вне всяких функций".

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, для начала надо это исправить, дальше будем смотреть. ТС похоже, принципиальнор исправлять не хочет.

А так, да, если программы объединять механически, не понимая, что там написано, то оно всегда так.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Действительно, я показал Вам только первую ошибку, которая бросилась в глаза (Вы и её отказались исправлять), а дальше там, как правильно заметил коллега, ....

walera_kur пишет:

Помогите пенсионеру решить проблему!! 

Вы не решите эту проблему с теми знаниями, что у Вас есть. Никак не решите и помочь Вам невозможно. 

Объединение нескольких программ в одну - это вообще нетривиальная задача (и для тех, у кого есть знания), а уж когда Вы просто не понимаете что там написано ... Вот почитайте, что сказал грамотный и уважаемый здесь человек о таких задачах. И не думайте, что там далёкая метафора. Вы реально пытаетесь сделать именно то, что там написано, только не понимаете этого. Смешно? Бред? Ну, так от ж!

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

walera_kur
Offline
Зарегистрирован: 19.03.2019

ЕвгенийП пишет:

Действительно, я показал Вам только первую ошибку, которая бросилась в глаза (Вы и её отказались исправлять), а дальше там, как правильно заметил коллега, ....

Евгений!!! небыло вчеря время! Работа.  Сейчас перенес этот блок до void loop() . И действительно скомпилировалось и все заработало!!!  Ура.

Про уровень знаний, я прекрасно понимаю,у истоков нахожусь. Но если не чего не делать, то и неузнаешь нигода не чего. Мне вот уже седьмой десяток, но всю жизнь пытаюсь чему то учиться. С железом работаю, мед технику ремонтирую. А тут эти ардуины ворвались в массы. Просто революция какая то!! Раньше в АВР студии писал простенькое для себя. Надо было четко понимать, что пишешь, постоянно ПДФки читал про контроллеры. А эти ардуины со своими библиотеками готовыми -ни хрена не понимающие школьники могут что то  сваять. Короче не все сразу строилось!!!

Спасибо!

 

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

walera_kur пишет:
А эти ардуины со своими библиотеками готовыми -ни хрена не понимающие школьники могут что то  сваять.
Максимум что "не понимающие школьники" могут это открыть тему на форуме и ныть "Не могу два работающих блока соединить в одном скетче" ну и так далее.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

qwone, +100500!

А andriano (по моей ссылке из прошлого поста) красиво сказал! Аж зависть берёт :)))

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

walera_kur пишет:

...Раньше в АВР студии писал простенькое для себя. Надо было четко понимать, что пишешь, постоянно ПДФки читал про контроллеры. А эти ардуины со своими библиотеками готовыми -ни хрена не понимающие школьники могут что то  сваять.

Не совсем так.

В Ардуино, при помощи стандартной комбинации 2-3 библиотек (из десятков имеющихся) можно получить сколько-то тысяч стандартных решений. Кому-то этого достаточно. Кто-то, начав со стандартных комбинаций, идет дальше.

Ардуино - это как магазин готовой одежды: нашел подходящее - хорошо. А нет, - приходится либо самому осваивать кройку и шитье, либо обращаться в ателье.

walera_kur
Offline
Зарегистрирован: 19.03.2019

ЕвгенийП пишет:

qwone, +100500!

А andriano (по моей ссылке из прошлого поста) красиво сказал! Аж зависть берёт :)))

Красиво!! только я хотел, что бы запорожец и камаз стояли в одном гараже. И я мог по очереди ездить на них!!

То что у меня случилось - это компилятор недоработал что то?? Был момент, не зная что делать я коментарил ошибки. Каждый раз новую. Пока все строки не закоментарил вставленый новый блок не работал!!!

это из за настройки модема AT+CMGS все было???

 

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

walera_kur пишет:

...только я хотел, что бы запорожец и камаз стояли в одном гараже. И я мог по очереди ездить на них!!

Варианта два (один оптимизирован по цене, другой - по трудозатратам)

1. Поочередно прошиваете в Ардуину то один скетч, то другой.

2. Берете две Ардуины и в каждую из них прошиваете свой скетч.

Как видите, Ваша задача (как Вы ее сформулировали) вполне решается и без вмешательства в имеющиеся скетчи.