Помогите разобраться со скетчем для DFPlayer Mini 2.0 при загрузки в ардуино выдаёт ошибку в строке mp3_set_serial (serial); пишет "serial" was not declared in this scope
#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
SoftwareSerial mySerial(10, 11); // RX, TX
unsigned long currentTime;
unsigned long loopTime1;
unsigned long loopTime2;
boolean v=0; /// счетчик блокировки
boolean m=0; // переменная сброс таймера
boolean s=0; // переменная вкл нагревателя
boolean a=0; // переменная двери 1 нет готовности 0 готовность
boolean b=0; // переменная балкона 1 нет готовности 0 готовность
boolean c=0; // переменная истории двери 0 небыло сработ 1 была сработка
boolean d=0; //переменная истории балкона 0 небыло сработ 1 была сработка
#define ZVONOKNANOMER "ATD+7123456667;" /// КУДА БУДЕМ ЗВОНИТЬ ПРИ СРАБОТКЕ пишите свой номер
#define TELEFONNACH "7123456667" //// 1 НАШ НОМЕР ПОСТАНОВКИ СНЯТИЯ И УПРАВЛЕНИЯ
//#define TELEFONNACH2 "79023559118" //// 2 НАШ НОМЕР ПОСТАНОВКИ СНЯТИЯ И УПРАВЛЕНИЯ
void setup()
{ Serial.begin(9600);
mySerial.begin(9600);
Serial.begin (9600);
mp3_set_serial (Serial);
mp3_set_volume (29);/// громкость то 0 до 30
unsigned long currentTime;
unsigned long loopTime1;
unsigned long loopTime2;
//////////ПОРТЫ НАСТРОЙКА//////////////////////
pinMode(2, INPUT_PULLUP); // ДАТЧИК ДВЕРИ
pinMode(3, INPUT_PULLUP); // ДАТЧИК БАЛКОНА
pinMode(4, OUTPUT); //
pinMode(6, OUTPUT); // СВЕТИК ДВЕРИ
pinMode(7, OUTPUT); // СВЕТИК БАЛКОНА
pinMode(8, INPUT_PULLUP); // ДАТЧИК 220В
pinMode(9, INPUT_PULLUP); // ДАТЧИК ЗВОНОК SIM 800L
pinMode(12, OUTPUT); // СВЕТОДИОД ПАМЯТИ ОХРАНЫ
pinMode(13, OUTPUT); // СВЕТОДИОД пОИСКА СЕТИ GSM
digitalWrite(4, HIGH); // РЕЛЕ ОТКЛ
digitalWrite(6, LOW); //
digitalWrite(7, LOW); //
digitalWrite(12, LOW); //
digitalWrite(13, LOW); //
pinMode(A0, OUTPUT ); //
pinMode(A1, OUTPUT); //
pinMode(A2, OUTPUT); //
pinMode(A3, OUTPUT); //
digitalWrite(A0, HIGH); // ПОДТЯГИВАЕМ +
digitalWrite(A1, HIGH);
digitalWrite(A2, HIGH);
digitalWrite(A3, HIGH);
////// ПРОВЕРКА ГОТОВНОСТИ ДВЕРИ ТЕСТ ГОТОВНОСТИ ДАТЧИКОВ ///////////
if ( digitalRead(2) == HIGH ) // НЕТ ГОТОВНОСТИ
{ a=1;
digitalWrite(6,LOW); } // СРАБОТКА
else
{ digitalWrite(6,HIGH);
a=0;} // ОК
/////// ПРОВЕРКА БАЛКОНА
if ( digitalRead(3) == HIGH ) // НЕТ ГОТОВНОСТИ
{ digitalWrite(7, LOW); /// БЛОКИРУЕМ
b=1;} // СРАБОТКА
else { digitalWrite(7,HIGH);
b=0;}//
//// ТЕСТ СВЕТИКОВ //////////
digitalWrite(6, HIGH); // ПРОВЕРЯЕМ ШЛЕЙФ И ГАСИМ ЭКОНИМИМ ЭНЕРГИЮ
digitalWrite(7, HIGH);
digitalWrite(12, HIGH);
delay(4000);
digitalWrite(6, LOW); // ПРОВЕРЯЕМ ШЛЕЙФ И ГАСИМ ЭКОНИМИМ ЭНЕРГИЮ
digitalWrite(7, LOW);
digitalWrite(12, LOW);
mySerial.println("ATE0"); //откл ЭХО
delay(100);
mySerial.println("AT+CLIP=1"); //. ВКЛ АОН
delay(100);
currentTime=20000; //// ПРИБАВКА ВРЕМЕНИ ПРОВЕРКИ ШЛЕЙФА ПРИ ЗАПУСКЕ ПРОГРАММЫ
}
void loop()
{
///////// ПРОВЕРЯЕМ И МИГАЕМ СВЕТИКАМИ ГОТОВНОСТИ
if(a==0) /// проверка линии двери
{digitalWrite(6, HIGH);
delay(100);
digitalWrite(6, LOW);}
else digitalWrite(6, LOW);
if(b==0) /// проверка линии БАЛКОНА
{digitalWrite(7, HIGH);
delay(100);
digitalWrite(7, LOW);}
else digitalWrite(7, LOW);
currentTime = millis(); // считываем время, прошедшее с момента запуска программы
if (currentTime >= (loopTime1 + 22000))
{
while (1) // ПРИ ВКЛ ИЩЕМ ТЕЛЕФОН
{ mySerial.println("AT"); // РЕГИСТАЦИЯ СЕТИ
delay(200);
if ( mySerial.find("OK")) // ОТВЕТ ОК
{ Serial.println("SOEDINENIE OK");
////////// ПРОВЕРКА ГОТОВНОСТИ ДВЕРИ///////////
if ( digitalRead(2) == LOW ) // В ГОТОВНОСТИ
{ a=0 ; /// ok
Serial.println("LINIA A OK");
}
else
{ a=1 ; // блокировка линии двери
Serial.println("LINIA A NO");
}
/////// ПРОВЕРКА БАЛКОНА ////////////
if ( digitalRead(3) == LOW ) // В ГОТОВНОСТИ
{ b=0 ; // ok
Serial.println("LINIA B OK");
}
else { b=1 ; /// БЛОКИРУЕМ
Serial.println("LINIA B NO");
}
break;
} // ВСЕ ОК ВЫХОДИМ ИЗ ЦИКЛА
{ Serial.println("SOEDINENIE NO");
digitalWrite(13, HIGH); // ЕСЛИ НЕ НАШЛИ МИГАЕМ
delay(500);
digitalWrite(13, LOW);
mySerial.println("AT+IPR=9600;");
delay(500);
mySerial.println("ATE0"); //ОТКЛ ЭХО
delay(500);
}
}
loopTime1 = currentTime; // в loopTime записываем новое значение
}
/////////////ИЩЕМ ЗВОНОК/////////////
if (mySerial.find("CLIP:")) // если нашли RING
{
Serial.println("RING!");
delay(200);
mySerial.println("AT+CLIP=1"); // ВКЛ ОПРЕДЕЛИТЕЛЬ НОМЕРА
delay(300);
while (1) // в цикле
{
// if (mySerial.find(TELEFONNACH)||( TELEFONNACH2)) // ищим номер телефона, если нашли 2 номера
if (mySerial.find(TELEFONNACH)) //ищим номер телефона, если нашли
{
{ digitalWrite(12, !digitalRead(12)); // инвертируем 13 выход
delay(300);
Serial.println("INVERSIA LED");
////////////////////////////////////////
mySerial.println("AT+CRSL=100"); // уровень звука
delay(6500);
///////////ПРОГРАММА ПОСТАНОВКИ И ПОСЛУШКИ//////////////////////
{ if( digitalRead(9)==HIGH) // НЕТ ЗВОНКА
{
m=1; //// ЗАПИСЫВАЕМ ПЕРЕМЕННУЮ
goto label;} /// ПЕРЕХОДИМ НА МЕТКУ ПРОГРАММЫ
else
{ if( digitalRead(9)==LOW)// ЕСТЬ ЗВОНОК
{ delay(200);
mySerial.println("ATA"); /// ПОДНИМАЕМ ТРУБКУ
delay(200);
mySerial.println("ATE0"); //ОТКЛ ЭХО
delay(200);
mySerial.println("AT+DDET=1"); // включаем DTMF
delay(200);
Serial.println("V CIKLE");
delay(100);
loopTime2 = currentTime;
goto label; // СБРОС ТАЙМЕРА
label:
while (1)
{
if (m==1) //// ЕСЛИ М=1 ЗАПИСЬ В ТАЙМЕР +38 СЕК ЧТОБЫ БЫСТРО ДОЗВОНИЛСЯ О ОХРАНЕ
{ currentTime = 38000;
m=0;
}
///// НАШИ КОМАНДЫ КЛАВИШ ТЕЛЕФОНА
if (mySerial.find("+DTMF:"))
{
int cmd = mySerial.parseInt();
switch(cmd)
{
case 1: //
{
loopTime2 = currentTime; // СБРОС ТАЙМЕРАSerial.println("1");
mySerial.println("AT+DDET=0"); // ОТКЛ DTMF
delay(200);
// ЗДЕСЬ НАШ ТЕСТ НАШЕЙ СИГНАЛИЗАЦИИ ЗА ВРЕМЯ РАБОТЫ
/// ОТ ЧЕГО ПИТАЕТСЯ 220 ИЛИ 12
if ( digitalRead(8) == LOW )
{ mp3_play (19); /// 220V
delay(4000);}
else { mp3_play (18);
delay(5000); }
////ГОТОВНОСТЬ ДВЕРИ
if ( digitalRead(2) == LOW ) //
{ mp3_play (3); ///
delay(3200);}
else { mp3_play (5);
delay(4700); }
////ГОТОВНОСТЬ БАЛКОНА
if ( digitalRead(3) == LOW ) //
{ mp3_play (4); ///
delay(2000);}
else { mp3_play (6);
delay(4000); }
loopTime2 = currentTime; // СБРОС ТАЙМЕРА
// ПРОВЕРКА ПАМЯТИ СРАБОТОК
if( (c==0)&&(d==0)) // нет сработок
{ mp3_play (9);
delay(4500); }
else { if (c==1)
{ mp3_play (10); /// ПАМЯТЬ ДВЕРЬ
delay(5000); }
if (d==1)
{ mp3_play (11); //// ПАМЯТЬ БАЛКОН
delay(6000); }
mp3_play (20);
delay(3000);
}
loopTime2 = currentTime; // СБРОС ТАЙМЕРА
mySerial.println("AT+DDET=1"); // включаем DTMF
break;}
case 2: // ПАМЯТЬ СТЕРТА СРАБОТОК // выполняем действие, отправляем в Serial,
{ Serial.println("2");
mySerial.println("AT+DDET=0"); // ОТКЛ DTMF
delay(200);
mp3_play (14); // ПАМЯТЬ СТЕРТА СРАБОТОК
delay(200);
c=0;
d=0;
loopTime2 = currentTime; // СБРОС ТАЙМЕРА
mySerial.println("AT+DDET=1"); // включаем DTMF
break;}
case 3: // ВКЛ СИРЕНЫ И ВЫКЛ // выполняем действие, отправляем в Serial,
{ Serial.println("3");
mySerial.println("AT+DDET=0"); // ОТКЛ DTMF
delay(300);
digitalWrite(4, !digitalRead(4)); // инвертируем A1 выход
delay(200);
if( digitalRead(4)==LOW)
{ mp3_play (7); // ВКЛ СИРЕНЫ
delay(1000); }
else
{ mp3_play (8); // ОТКЛ СИРЕНЫ
delay (1000);}
currentTime=20000; // СБРОС ТАЙМЕРА
mySerial.println("AT+DDET=1"); // включаем DTMF
break;}
case 4: /////////// постановка снятие с охраны
{ Serial.println("4");
mySerial.println("AT+DDET=0"); // ОТКЛ DTMF
delay(200);
digitalWrite(12,!digitalRead(12)); // инвертируем 12 выход
delay(500);
if( digitalRead(12)==LOW)
{ mp3_play (2); //
delay(1000);}
else
{ mp3_play (1); //
delay (1000);}
loopTime2 = currentTime; // СБРОС ТАЙМЕРА
mySerial.println("AT+DDET=1"); // включаем DTMF
break; }
case 5: // выполняем действие, отправляем в Serial,
{ Serial.println("5");
mySerial.println("AT+DDET=0"); // ОТКЛ DTMF
delay(200);
/////////////ПРОГРАММА ДОЗВОНА ОТ БЛОКИРОВКИ ///////////////
mp3_play (15); //
delay (15000);
loopTime2 = currentTime; // СБРОС ТАЙМЕРА
delay (10000);
loopTime2 = currentTime; // СБРОС ТАЙМЕРА
mySerial.println("AT+CHUP;"); // сбрасываем вызов
delay (3000);
mySerial.println(ZVONOKNANOMER);
delay (15000);
loopTime2 = currentTime; // СБРОС ТАЙМЕРА
delay (400);
mp3_play (17); /// ВКЛ СООБЩЕНИЯ
delay (19000);
loopTime2 = currentTime; // СБРОС ТАЙМЕРА
if( digitalRead(12)==LOW)
{ mp3_play (2); // ПРОВЕРКА ОХРАНЫ
delay(20000);}
else
{ mp3_play (1); //
delay (20000);}
mySerial.println("AT+CHUP;"); // сбрасываем вызов
delay (2000);
loopTime2 = currentTime; // СБРОС ТАЙМЕРА
mySerial.println("AT+DDET=1"); // включаем DTMF
break;}
case 6: // О СОЗДАТЕЛЕ выполняем действие, отправляем в Serial,
{ Serial.println("6");
mySerial.println("AT+DDET=0"); // ОТКЛ DTMF
delay(200);
mp3_play (21); //
delay(2000);
loopTime2 = currentTime; // СБРОС ТАЙМЕРА
mySerial.println("AT+DDET=1"); // включаем DTMF
break;}
case 7:
{ Serial.println("7");
mySerial.println("AT+DDET=0"); // ОТКЛ DTMF
digitalWrite(13, !digitalRead(13)); // инвертируем 13 выход
delay(200);
loopTime2 = currentTime; // СБРОС ТАЙМЕРА
Serial.println("INVERSIA LED 13");
mySerial.println("AT+DDET=1"); // включаем DTMF
break;}
case 8: // выполняем действие, отправляем в Serial,
{ Serial.println("8");
mySerial.println("AT+DDET=0"); // ОТКЛ DTMF
delay(500);
loopTime2 = currentTime; // СБРОС ТАЙМЕРА
mySerial.println("AT+DDET=1"); // включаем DTMF
break;}
case 9: // выполняем действие, отправляем в Serial,
{ Serial.println("9");
mySerial.println("AT+DDET=0"); // ОТКЛ DTMF
delay(500);
loopTime2 = currentTime; // СБРОС ТАЙМЕРА
mySerial.println("AT+DDET=1"); // включаем DTMF
break;}
case 0: // выполняем действие, отправляем в Serial,
{ Serial.println("0");
mySerial.println("AT+DDET=0"); // ОТКЛ DTMF
delay(200);
mp3_play (16); /// какие клавиши нажимать
delay(200);
loopTime2 = currentTime; // СБРОС ТАЙМЕРА
mySerial.println("AT+DDET=1"); // включаем DTMF
break;}
}
}
else
{
currentTime = millis(); // считываем время, прошедшее с момента запуска программы
if (currentTime >= (loopTime2 + 40000)) // сравниваем текущий таймер МИН
{ Serial.println("VIXOD IZ UPRAVLENIIA");
loopTime2 = currentTime; // в loopTime2 записываем новое }
break; // ВЫХОДИМ ИЗ ЦИКЛА ЕСЛИ НИЧЕГО НЕ ДЕЛАЕМ 15 СЕК
}
}
}
Serial.println("OK!");
mySerial.println("AT+DDET=0"); // ОТКЛ DTMF
}
digitalWrite(4,HIGH); /// ВЫКЛ СИРЕНЫ ПРИ ВЫХОДЕ ИЗ ЦИКЛА ЕСЛИ ЗАБЫЛИ ЭТО СДЕЛАТЬ
delay(500);
//////////////КОНЕЦ ПСТ ПРОСЛУШКИ////////////////////
mySerial.println("AT+CHUP;"); // сбрасываем вызов
delay(2500);
////////ДОЗВОНЫ ////////////////
if ( digitalRead(12) == HIGH ) // ЕСЛИ ГОРИТ 1 ДОЗВОН
{ mySerial.println(ZVONOKNANOMER);
Serial.println("ATD+ NOMER;");// В СОМ ПОРТ
delay(15000);
mySerial.println("AT+CHUP;");// отбой сброс
delay(200);
Serial.println("AT+CHUP;");// В СОМ ПОРТ
delay(2000);
Serial.println("NA OXPAHE");
delay(300);
////// ПРОВЕРКА ШЛЕЙФА ПОСЛЕ ДОЗВОНА//////////////////
if ( digitalRead(2) == LOW ) // В ГОТОВНОСТИ
{ a=0 ; /// ok
digitalWrite(6, HIGH); // МИГНЕМ ОК
delay(100);
digitalWrite(6, LOW); //
Serial.println("LINIA A OK");
}
else { a=1 ; // блокировка линии двери
digitalWrite(6, LOW); //
Serial.println("LINIA A NO");}
/////// ПРОВЕРКА БАЛКОНА
if ( digitalRead(3) == LOW ) // В ГОТОВНОСТИ
{ b=0 ; // ok
digitalWrite(7, HIGH); // МИГНЕМ ОК
delay(100);
digitalWrite(7, LOW); //
Serial.println("LINIA B OK");
}
else { b=1 ; /// БЛОКИРУЕМ
digitalWrite(7, LOW); //
Serial.println("LINIA B NO");
}
}
if ( digitalRead(12) == LOW ) // ЕСЛИ ГОРИТ 2 ДОЗВОНA
{ delay(500);
mySerial.println(ZVONOKNANOMER);
Serial.println("ATD+NOMER;");// В СОМ ПОРТ
delay(15000);
mySerial.println("AT+CHUP;");// отбой сброс
Serial.println("AT+CHUP;");// В СОМ ПОРТ
delay(5000);
mySerial.println("AT+CLIP=1;");// ВКЛ ОПРЕД НОМЕРА
Serial.println("AT+CLIP=1;");// В СОМ ПОРТ
delay(500);
mySerial.println(ZVONOKNANOMER);
Serial.println("ATD+NOMER;");// В СОМ ПОРТ
delay(15000);
mySerial.println("AT+CHUP;");// отбой сброс
Serial.println("AT+CHUP;");// В СОМ ПОРТ
delay(1000);
Serial.println("CHIAT C OXPAHI");
delay(300);
}
}
////////КОНЕЦ ДОЗВОНОВ///////////
break; // и выходим
}
}
}
else { // иначе
mySerial.println("AT"); // спрашиваем состояние модема
delay(200);
if (mySerial.find("OK"))
break; // и если он в "готовности", выходим из цикла
} // если звонок в процессе, возвращает +CPAS: 3
} // и крутимся дальше
mySerial.println("AT+CHUP;"); // сбрасываем вызов
delay(200);
}
/////////////ПРОГРАММА СИГНАЛИЗАЦИИ //////////////////
if(( digitalRead(12) == HIGH &&(a==0)&& digitalRead(2) == HIGH || digitalRead(12) == HIGH &&(b==0)&& digitalRead(3) == HIGH )) //
////////// ОХРАНА ДВЕРИ ////////////////////
{ currentTime = 0; /// СБРОС ТАЙМЕРА
if((digitalRead(2) == HIGH && a==0))
{ digitalWrite(6, HIGH);
delay(500); /// МИГНЕМ ПРИ СРАБОТКЕ ЛЕД6
digitalWrite(6, LOW);
delay(1000);
digitalWrite(6, HIGH); /// вкл индикацию
digitalWrite(4, LOW); /// ВКЛ СИРЕНЫ
c=1; /// записыв перем сработки и храним в памяти сработок дверь
b=1; // блокировка дозвонов с балкона
for (int i=0;i<3;i++) // исполним программу 3 раза
{ mySerial.println(ZVONOKNANOMER);
Serial.println("ZVONOK");
for (int n=0;n<5;n++) // исполним программу 5 раза
{ mp3_play (12); // СООБЩЕНИЕ ТРЕВОГА ДВЕРЬ
delay(7000);
if( digitalRead(3) == HIGH)
{ d=1;// если сработал и балкон запись в память и мигнем лед 7
digitalWrite(7, HIGH);
delay(300); /// МИГНЕМ ПРИ СРАБОТКЕ ЛЕД 7
digitalWrite(7, LOW);
delay(300);
}
else delay(10);
}
digitalWrite(4, HIGH); /// ВЫКЛ СИРЕН
////ГОТОВНОСТЬ ДВЕРИ
if ( digitalRead(2) == LOW ) //
{ mp3_play (3); ///
delay(3200);}
else { mp3_play (5);
delay(4700); }
/// ПРОВЕРКА БАЛКОНА
if ( digitalRead(3) == HIGH )
/// if (d==1) /// если сработал и балкон сообщаем 3 раза
{ digitalWrite(7, HIGH); // вкл индикацию сраьотки балкона
for (int v=0;v<2;v++) // исполним программу 4 раза
{ mp3_play (13); // СООБЩЕНИЕ ТРЕВОГА ДВЕРЬ
delay(7000); }
////ГОТОВНОСТЬ БАЛКОНА
if ( digitalRead(3) == LOW ) //
{
mp3_play (4); ///
delay(2000);
}
else { mp3_play (6);
delay(4000);
}
}
else
{
////ГОТОВНОСТЬ БАЛКОНА
if ( digitalRead(3) == LOW ) //
{ mp3_play (4); ///
delay(2000);
}
else { mp3_play (6);
delay(4000);
}
delay(15000);
}
delay(10000);
mySerial.println("AT+CHUP;"); // сбрасываем вызов
delay(200);
Serial.println("SBROS");// В СОМ ПОРТ
delay(3000);
}
}
else delay(1);
////////// ОХРАНА БАЛКОНА ////////////////////
if(( digitalRead(3) == HIGH && b==0)) // балкон
{ currentTime = 0;
d=1;/// записыв перем сработки и храним в памяти сработок балкон
a=1; // блокировка дозвона с вх двери
digitalWrite(7, HIGH);
delay(500); /// МИГНЕМ ПРИ СРАБОТКЕ ЛЕД7
digitalWrite(7, LOW);
delay(1000);
digitalWrite(7, HIGH); // вкл индикацию сраьотки
digitalWrite(4, LOW); /// ВКЛ СИРЕНЫ
for ( int i=0;i<3;i++) // исполним программу 3 раза
{ mySerial.println(ZVONOKNANOMER);
Serial.println("ZVONOK");
for (int n=0;n<5;n++) // исполним программу 5 раза
{ mp3_play (13); // СООБЩЕНИЕ ТРЕВОГА ДВЕРЬ
delay(7500);
if( digitalRead(2) == HIGH)
{ c=1;// если сработал и балкон запись в память и мигнем лед 6
digitalWrite(6, HIGH);
delay(300); /// МИГНЕМ ПРИ СРАБОТКЕ ЛЕД6
digitalWrite(6, LOW);
delay(300); }
else delay(10);
}
digitalWrite(4, HIGH); /// ВЫКЛ СИРЕН
////ГОТОВНОСТЬ БАЛКОНА
if ( digitalRead(3) == LOW ) //
{ mp3_play (4); ///
delay(2000);}
else { mp3_play (6);
delay(4000); }
/// ПРОВЕРКА ДВЕРИ
if ( digitalRead(2) == HIGH )
// if (c==1) /// если сработал вх дверь сообщаем 3 раза
{ digitalWrite(6, HIGH); // вкл индикацию сраьотки двери
for (int s=0;s<2;s++) // исполним программу 2 раза
{ mp3_play (12); // СООБЩЕНИЕ ТРЕВОГА ДВЕРЬ
delay(6000); }
////ГОТОВНОСТЬ ДВЕРИ
if ( digitalRead(2) == LOW ) //
{ mp3_play (3); ///
delay(3200);}
else { mp3_play (5);
delay(4700); }
}
else
{ ////ГОТОВНОСТЬ ДВЕРИ
if ( digitalRead(2) == LOW ) //
{ mp3_play (3); ///
delay(3200);}
else { mp3_play (5);
delay(4700); }
delay(15000); }
delay(10000);
mySerial.println("AT+CHUP;"); // сбрасываем вызов
delay(200);
Serial.println("SBROS");// В СОМ ПОРТ
delay(3000);
}
}
else delay(1);
}
}