Постоянно пищит зуммер.

Jexi
Offline
Зарегистрирован: 18.04.2017

Есть такой скетч

#define blinPin 0
#define bloutPin 1
#define pirPin 2
#define shumPin 3






void setup() {
  Serial.begin(9600); //Serial.begin скорость соединения с другими устройствами
  pinMode(blinPin, INPUT);
  pinMode(bloutPin, OUTPUT);
  pinMode(pirPin , INPUT);
  pinMode(shumPin, OUTPUT);


}



void loop() {  // int = integer (Pascal)
  int pirSig = digitalRead(pirPin); //digitalRead Функция считывает значение с заданного входа - HIGH или LOW.
  int warOn = bloutPin;
  int warOk = blinPin;
  int num = 0;
  digitalWrite(warOn, HIGH);
  digitalWrite(shumPin, LOW);
 
  
  
     // Провека полученного сигнала со смартфона
    if ((warOk == 1) && (num ==1)) { // Если сигнал получен 
       num = 0;
       digitalWrite(shumPin, LOW);
    }
     
    if  ((warOk == 0) && (num == 1)){  //Если сигнал не получен
    
      digitalWrite(warOn, HIGH); // digitalWrite Подает HIGH или LOW значение на цифровой вход/выход (pin).
      Serial.println("1"); // Serial.println Передает данные через последовательный порт
       digitalWrite(shumPin, LOW);
 
      delay(1000);
   }

  //Если обнаружили движение
  if ((pirSig == HIGH) && (num == 0)) {
    digitalWrite(warOn, HIGH); // digitalWrite Подает HIGH или LOW значение на цифровой вход/выход (pin).
    Serial.println("1"); // Serial.println Передает данные через последовательный порт
    digitalWrite(shumPin, LOW);
    
    num = 1;
    delay(1000);
  } 
 
}

 

В краткости есть пир датчик в случае его срабатывания должен начать пищать зуммер. А он почему то пищит остоянно. ХЗ может подключил не так на нём нет распиновки. Может кто знает как его подключать(лично я подключил так же как и аналоги). Или киньте точно рабочий скетч дапустим 2 секундымолчит2 орёт.

 

 

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

Jexi пишет:

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

Не должен!

У Вас на shumPin подаётся только LOW и никогда не подаётся HIGH. Так с чего Вашему зуммеру менять состояние? Либо он должен всегда молчать, либо всегда пищать.

О дальнейшем - я вчера Вам сказал, давайте ссылку на Ваш модуль пищалки и схему/фото, так давайте же. Посмотрим, разберёмся.  Зачем Вы завели новую тему, думаете что-то изменится. 

negavoid
Offline
Зарегистрирован: 09.07.2016

Ну вот скетч, при каждой фиксации движения издаёт краткий писк

int calibrationTime = 10;
int inputPin = 2;               // choose the input pin (for PIR sensor)
int pirState = LOW;             // we start, assuming no motion detected
int tonePin = 11;

const long intervalBlink = 500;
int ledPin = 13;                        // choose the pin for the LED
unsigned long previousMillis = 0;       // will store last time LED was updated
int ledState = LOW;

//the time when the sensor outputs a low impulse
long unsigned int lowIn;
//the amount of milliseconds the sensor has to be low
//before we assume all motion has stopped
long unsigned int pause = 5000;
boolean lockLow = true;
boolean takeLowTime;

void setup() {
  pinMode(ledPin, OUTPUT);      // declare LED as output
  pinMode(inputPin, INPUT);     // declare sensor as input

  Serial.begin(9600);

  digitalWrite(inputPin, LOW);

  //give the sensor some time to calibrate
  Serial.print("calibrating sensor ");
  for (int i = 0; i < calibrationTime; i++) {
    Serial.print(".");
    delay(1000);
  }
  Serial.println(" done");
  Serial.println("SENSOR ACTIVE");
  delay(50);
}

void loop() {
  if (digitalRead(inputPin) == HIGH) {

    // digitalWrite(ledPin, HIGH);

    if (lockLow) {
      //makes sure we wait for a transition to LOW before any further output is made:
      lockLow = false;
      Serial.println("---");
      Serial.print("motion detected at ");
      Serial.print(millis() / 1000);
      Serial.println(" sec");
      tone(tonePin, 2000, 100);
      delay(50);
    }
    takeLowTime = true;
  }

  if (digitalRead(inputPin) == LOW) {
    digitalWrite(ledPin, LOW);

    if (takeLowTime) {
      lowIn = millis();          //save the time of the transition from high to LOW
      takeLowTime = false;       //make sure this is only done at the start of a LOW phase
    }
    //if the sensor is low for more than the given pause,
    //we assume that no more motion is going to happen
    if (!lockLow && millis() - lowIn > pause) {
      //makes sure this block of code is only executed again after
      //a new motion sequence has been detected
      lockLow = true;
      Serial.print("motion ended at ");      //output
      Serial.print((millis() - pause) / 1000);
      Serial.println(" sec");
      delay(50);
    }
  }
}

 

Jexi
Offline
Зарегистрирован: 18.04.2017

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

Jexi пишет:

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

Не должен!

У Вас на shumPin подаётся только LOW и никогда не подаётся HIGH. Так с чего Вашему зуммеру менять состояние? Либо он должен всегда молчать, либо всегда пищать.

О дальнейшем - я вчера Вам сказал, давайте ссылку на Ваш модуль пищалки и схему/фото, так давайте же. Посмотрим, разберёмся.  Зачем Вы завели новую тему, думаете что-то изменится. 

Старую темя я не нашёл. Подумал её делитнули.

Модуль купил  в интерент магазине. Распиновки там нет.

Пишит он не смотря на то что подаётся LOW

Jexi
Offline
Зарегистрирован: 18.04.2017

negavoid пишет:

Ну вот скетч, при каждой фиксации движения издаёт краткий писк

int calibrationTime = 10;
int inputPin = 2;               // choose the input pin (for PIR sensor)
int pirState = LOW;             // we start, assuming no motion detected
int tonePin = 11;

const long intervalBlink = 500;
int ledPin = 13;                        // choose the pin for the LED
unsigned long previousMillis = 0;       // will store last time LED was updated
int ledState = LOW;

//the time when the sensor outputs a low impulse
long unsigned int lowIn;
//the amount of milliseconds the sensor has to be low
//before we assume all motion has stopped
long unsigned int pause = 5000;
boolean lockLow = true;
boolean takeLowTime;

void setup() {
  pinMode(ledPin, OUTPUT);      // declare LED as output
  pinMode(inputPin, INPUT);     // declare sensor as input

  Serial.begin(9600);

  digitalWrite(inputPin, LOW);

  //give the sensor some time to calibrate
  Serial.print("calibrating sensor ");
  for (int i = 0; i < calibrationTime; i++) {
    Serial.print(".");
    delay(1000);
  }
  Serial.println(" done");
  Serial.println("SENSOR ACTIVE");
  delay(50);
}

void loop() {
  if (digitalRead(inputPin) == HIGH) {

    // digitalWrite(ledPin, HIGH);

    if (lockLow) {
      //makes sure we wait for a transition to LOW before any further output is made:
      lockLow = false;
      Serial.println("---");
      Serial.print("motion detected at ");
      Serial.print(millis() / 1000);
      Serial.println(" sec");
      tone(tonePin, 2000, 100);
      delay(50);
    }
    takeLowTime = true;
  }

  if (digitalRead(inputPin) == LOW) {
    digitalWrite(ledPin, LOW);

    if (takeLowTime) {
      lowIn = millis();          //save the time of the transition from high to LOW
      takeLowTime = false;       //make sure this is only done at the start of a LOW phase
    }
    //if the sensor is low for more than the given pause,
    //we assume that no more motion is going to happen
    if (!lockLow && millis() - lowIn > pause) {
      //makes sure this block of code is only executed again after
      //a new motion sequence has been detected
      lockLow = true;
      Serial.print("motion ended at ");      //output
      Serial.print((millis() - pause) / 1000);
      Serial.println(" sec");
      delay(50);
    }
  }
}

 

Спасибо. Но я ничего не понял.

Jexi
Offline
Зарегистрирован: 18.04.2017

http://brainid.ru/product/active-buzzer-module/

 

Это ссылка на модуль

Araris
Offline
Зарегистрирован: 09.11.2012

Jexi пишет:

Может кто знает как его подключать.

Попробуйте минус к земле, "S" - к пину, средний не подключать.

Источник : http://arduinomodules.info/ky-012-active-buzzer-module/

Jexi
Offline
Зарегистрирован: 18.04.2017

Araris пишет:

Jexi пишет:

Может кто знает как его подключать.

Попробуйте минус к земле, "S" - к пину, средний не подключать.

Источник : http://arduinomodules.info/ky-012-active-buzzer-module/

на сколько я понимаю, s  надо подключать к пину, который поддерживает шим

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

Вы же писали, что зуммер активный? Если так, то не надо.

Jexi
Offline
Зарегистрирован: 18.04.2017

Ок понял попробую

 

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

Вот здесь написано как подключать и пример скетча есть - https://tkkrlab.nl/wiki/Arduino_KY-012_Active_buzzer_module

Неужели Вы и впрямь покупали его за 60 рублей?

Их ведь (12 мм активных зуммеров)  навалом по 7, а если 100шт., то и по 5 с копейками?

Jexi
Offline
Зарегистрирован: 18.04.2017

Так, в итоге подлкючить получилось.

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

#define blinPin 0
#define bloutPin 1
#define pirPin 2
int tonePin = 10;

void setup() {
  Serial.begin(9600); //Serial.begin скорость соединения с другими устройствами
  pinMode(blinPin, INPUT);
  pinMode(bloutPin, OUTPUT);
  pinMode(pirPin , INPUT);
  pinMode (tonePin, OUTPUT);
}
    void midi() {
    tone(tonePin, 1318, 51.1363125);
    delay(56.818125);
    delay(56.818125);
    tone(tonePin, 1567, 51.1363125);
    delay(56.818125);
    delay(56.818125);
    tone(tonePin, 2637, 51.1363125);
    delay(56.818125);
    delay(56.818125);
    tone(tonePin, 2093, 51.1363125);
    delay(56.818125);
    delay(56.818125);
    tone(tonePin, 2349, 51.1363125);
    delay(56.818125);
    delay(56.818125);
    tone(tonePin, 3135, 511.363125);
    delay(568.18125);
}
void loop() {  // int = integer (Pascal)
  int pirSig = digitalRead(pirPin); //digitalRead Функция считывает значение с заданного входа - HIGH или LOW.
  int warOn = bloutPin;
  int warOk = blinPin;
  int num = 0;
  digitalWrite(warOn, HIGH);
    // Провека полученного сигнала со смартфона
    if ((warOk == 1) && (num ==1)) { // Если сигнал получен 
       num = 0;
       analogWrite (tonePin,LOW);
      
    }
      if  ((warOk == 0) && (num == 1)){  //Если сигнал не получен
     digitalWrite(warOn, HIGH); // digitalWrite Подает HIGH или LOW значение на цифровой вход/выход (pin).
      Serial.println("1"); // Serial.println Передает данные через последовательный порт
      analogWrite (tonePin, HIGH);
      midi();
      delay(100);
      
   }
  //Если обнаружили движение
  if ((pirSig == HIGH) && (num == 0)) {
    digitalWrite(warOn, HIGH); // digitalWrite Подает HIGH или LOW значение на цифровой вход/выход (pin).
    Serial.println("1"); // Serial.println Передает данные через последовательный порт
     analogWrite (tonePin, HIGH);
      midi();
      num = 1;
      delay(100);
      
  } 
 if ((pirSig == LOW) && (num == 1)) {
 midi();
 delay(100);

}
}

 

Jexi
Offline
Зарегистрирован: 18.04.2017

Евгений можете объяснить,?
 

Jexi
Offline
Зарегистрирован: 18.04.2017

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

Вот здесь написано как подключать и пример скетча есть - https://tkkrlab.nl/wiki/Arduino_KY-012_Active_buzzer_module

Неужели Вы и впрямь покупали его за 60 рублей?

Их ведь (12 мм активных зуммеров)  навалом по 7, а если 100шт., то и по 5 с копейками?

Помогите пожалуйста !!!!!

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

Нет, не могу.

Представьте себе, что Вы вообще ничего не знаете о своём замысле и идее этой программы. Вы бы поняли своё описание

Jexi пишет:

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

Во и я не понял.

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

Jexi
Offline
Зарегистрирован: 18.04.2017

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

Нет, не могу.

Представьте себе, что Вы вообще ничего не знаете о своём замысле и идее этой программы. Вы бы поняли своё описание

Jexi пишет:

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

Во и я не понял.

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

 

 

#define blinPin 0   // RX порт
#define bloutPin 1  // TX порт
#define pirPin 2   // PIR датчик
int tonePin = 10;  // зуммер

void setup() {
  Serial.begin(9600); //Serial.begin скорость соединения с другими устройствами
  pinMode(blinPin, INPUT);
  pinMode(bloutPin, OUTPUT);
  pinMode(pirPin , INPUT);
  pinMode (tonePin, OUTPUT);
}
    void midi() {             // мелодия которая играет во время тревоги
    tone(tonePin, 1318, 51.1363125);
    delay(56.818125);
    delay(56.818125);
    tone(tonePin, 1567, 51.1363125);
    delay(56.818125);
    delay(56.818125);
    tone(tonePin, 2637, 51.1363125);
    delay(56.818125);
    delay(56.818125);
    tone(tonePin, 2093, 51.1363125);
    delay(56.818125);
    delay(56.818125);
    tone(tonePin, 2349, 51.1363125);
    delay(56.818125);
    delay(56.818125);
    tone(tonePin, 3135, 511.363125);
    delay(568.18125);
}
void loop() {  // int = integer (Pascal)
  int pirSig = digitalRead(pirPin); //digitalRead Функция считывает значение с заданного входа - HIGH или LOW.
  int warOn = bloutPin;
  int warOk = blinPin;
  int num = 0;
  digitalWrite(warOn, HIGH);
  analogWrite (tonePin, LOW);
 // всё что выше думаюпонятно

   
      
    
    
    
    //Если обнаружили движение
  if ((pirSig == HIGH) && (num == 0)) {  // здесь если PIR датчик сработал и некая переменная равна 0 она нужны для седующих действий, то просисходит то что описанно ниже
    digitalWrite(warOn, HIGH); // digitalWrite Подает HIGH или LOW значение на цифровой вход/выход (pin).// подача тока на выход
    Serial.println("1"); // Serial.println Передает данные через последовательный порт // отправка на выход сверху значение 1
     analogWrite (tonePin, HIGH); // подача сигнала на зуммер
      midi(); // проигрыш мелодии
      num = 1; //присваивание переменной значение 1
      delay(50);}
      
   
     if ((pirSig == LOW) && (num == 1)) { // если PIR  не даёт сигнал и переменная равна 1 то играет мелодия
 midi();// та самая мелодия
 delay(50);}

if  ((warOk == 0) && (num == 1)){  //Если сигнал не получен  // если сигнал с входа от блютуза не получен  то идёт повоторение 1 цикла
     digitalWrite(warOn, HIGH); // digitalWrite Подает HIGH или LOW значение на цифровой вход/выход (pin).
      Serial.println("1"); // Serial.println Передает данные через последовательный порт
      analogWrite (tonePin, HIGH);
      midi();
      delay(50);}
      
   

    if ((warOk == 1) && (num ==1)) { // Если сигнал получен  // если по входу получен сигнал 1 от блютуз модуля то музыка перестаёт игратью
       num = 0;
       analogWrite (tonePin,LOW);
        delay(50);}
     }



      
  

так мне надо что бы если срабатывает pir датчик то начинает играть мелодия без остановки и по выходу отправляет 1 на телефон который подключён к блютуз до тех пор пока  по блютуз входу не приходит ноль, как только сигнал приходит программа начинает работать заново.  Пока вроде всё работает кроме того что музыка играет только 3 раза а нужно что бы играла до момента получения сигнала

 

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

Что значит "без остановки и по выходу". Играет до конца, отправляет 1 и начинает играть сначала? Так?

Jexi
Offline
Зарегистрирован: 18.04.2017

Значит,то что мелодия будетиграть до тех пор пока на arduino по блютузвходу непридёёт сигнал 1

 

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

Вы не поняли вопроса. Как она будет "играть до тех пор". Проигрываться до конца и начинаться сначала? Что делать, если 1 пришла посередине мелодии? Доигрывать до конца или прерывать в том месте, где пришла 1?

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

Да, уж! 

Вот зачем Вы пишете комментариии типа "digitalWrite Подает HIGH или LOW значение на цифровой вход"? Виесто того, чтобы описывать логику Вышей программы. Эти совершенно ненужные комментарии у Вас есть, а вот собственно логика не описана свосем.

Хорошо, давайте я сам прокомментирую Ваш текст. Мои комментарии либо в строках, либо (если длинные), то под строками. Читайте внимательно и переделывайте. Кстати, в выражениях я стеснялся - обидетесь, дело Ваше - хотите учитьтся - учитесь, хотите поиграть в обидчивую гимназистку - вперёд!

#define blinPin 0   // RX порт
#define bloutPin 1  // TX порт
#define pirPin 2   // PIR датчик
int tonePin = 10;  // зуммер 
  // НЕ очень ясно почему все остальные пины сделаны через define, 
  // а tonePin через глобальную переменную. Так делают, если хотят 
  // менять пин во время выполнения, но Вы же его не меняете!

void setup() {
  Serial.begin(9600);
  pinMode(blinPin, INPUT);  // НАФИГА? Раз уж Вы запустили Serial, этим пином управляет UART - не трогайте его вообще
  pinMode(bloutPin, OUTPUT); // НАФИГА? Раз уж Вы запустили Serial, этим пином управляет UART - не трогайте его вообще
  pinMode(pirPin , INPUT);
  pinMode (tonePin, OUTPUT);
}

void midi() {             // мелодия которая играет во время тревоги
  tone(tonePin, 1318, 51.1363125); 
   // третий параьтр tone - целое число. ".1363125" будет просто отброшено.
   // И даже если бы дробная часть не отбрасывалась, Вы уверены, что Вам 
   // нужно указывать задержку в пикосекундах? Выбрасывайте ".1363125" - её 
   // всё равно компилятор выбросит
  delay(56.818125); // Тоже самое, что выше - дробная часть будет отброшена. А даже если бы и не была
                    // зачем указывать длительность в наносекундах?
  delay(56.818125); // Тоже про дробную часть
  tone(tonePin, 1567, 51.1363125);  // Тоже про дробнуй часть
  delay(56.818125);  // Тоже про дробную часть
  delay(56.818125);  // Тоже про дробную часть
  tone(tonePin, 2637, 51.1363125);  // Тоже про дробнуй часть
  delay(56.818125);  // Тоже про дробную часть
  delay(56.818125);  // Тоже про дробную часть
  tone(tonePin, 2093, 51.1363125);  // Тоже про дробную часть
  delay(56.818125);  // Тоже про дробную часть
  delay(56.818125);  // Тоже про дробную часть
  tone(tonePin, 2349, 51.1363125);  // Тоже про дробную часть
  delay(56.818125);  // Тоже про дробную часть
  delay(56.818125);  // Тоже про дробную часть
  tone(tonePin, 3135, 511.363125);  // Тоже про дробную часть
  delay(568.18125);  // Тоже про дробную часть
}

void loop() {  // int = integer (Pascal)
  int pirSig = digitalRead(pirPin); //digitalRead Функция считывает значение с заданного входа - HIGH или LOW.
  int warOn = bloutPin;
  int warOk = blinPin;
  int num = 0;
  digitalWrite(warOn, HIGH); // НАФИГА? Раз уж Вы запустили Serial, этим пином управляет UART - не трогайте его вообще 
  analogWrite (tonePin, LOW);

  // всё что выше думаюпонятно
  //
  // Напрасно думаете. Нихрена непонятно. Чем писать бессмысленный комментарий о том, 
  // что делает digitalRead лучше бы Вы объяснили нахрена Вы присваиваете переменным
  // номера пинов. Чем не устроили макросы? Нафига пихаете HIGH в TX пин? Считаете, 
  // что Serial сам не разберётся, что туда пихать?

  //Если обнаружили движение
  if ((pirSig == HIGH) && (num == 0)) {  // здесь если PIR датчик сработал и некая переменная равна 0 она нужны для седующих действий, то просисходит то что описанно ниже
    digitalWrite(warOn, HIGH); // digitalWrite Подает HIGH или LOW значение на цифровой вход/выход (pin).// подача тока на выход
        // Первая часть комментария выше бессмысленна. Вторая часть бредова - подача какого нахрен тока на какой нахрен выход?
        // Для чего? Еще раз - этим пином управляет UART не трогайте Вы его грязными руками!
        
    Serial.println("1"); // Serial.println Передает данные через последовательный порт // отправка на выход сверху значение 1
    analogWrite (tonePin, HIGH); // подача сигнала на зуммер
       // Какого нахрен сигнала? Нафига? Буквально в следующей строчке Вы вызываете функцию, которая на этот же самый пин
       // выдаёт tone - она затрёт этот Ваш ШИМ как бык овцу. Эта строка не несёт никакой смысловой нагрузки
       
    midi(); // проигрыш мелодии
    num = 1; //присваивание переменной значение 1
    delay(50);
  }


  if ((pirSig == LOW) && (num == 1)) { // если PIR  не даёт сигнал и переменная равна 1 то играет мелодия
    midi();// та самая мелодия
    delay(50);
  }

  if  ((warOk == 0) && (num == 1)) { //Если сигнал не получен  // если сигнал с входа от блютуза не получен  то идёт повоторение 1 цикла
       // Какой нахрен сигнал? warOk получает значение в строке 44 и нигде 
       // больше не меняется - она всегда равна 0. Так нахрена её с нулём сравнивать?
    
    digitalWrite(warOn, HIGH); // digitalWrite Подает HIGH или LOW значение на цифровой вход/выход (pin).
        // Комментария не имеет смысла. А само действие - блин - для чего? Еще раз - этим пином 
        // управляет UART не трогайте Вы его грязными руками!

    Serial.println("1"); // Serial.println Передает данные через последовательный порт
    analogWrite (tonePin, HIGH);
     // Нафига? Буквально в следующей строчке Вы вызываете функцию, которая на этот же самый пин
     // выдаёт tone - она затрёт этот Ваш ШИМ как бык овцу. Эта строка не несёт никакой смысловой нагрузки
    midi();
    delay(50);
  }

  if ((warOk == 1) && (num == 1)) { // Если сигнал получен  // если по входу получен сигнал 1 от блютуз модуля то музыка перестаёт игратью
        // Какой нахрен сигнал? warOk получает значение в строке 44 и нигде 
       // больше не меняется - она ВСЕГДА равна 0. Так нахрена её с единицей сравнивать?
       // Это условие не выполнится никогда (ну, разве что 0 станет равным 1).

   num = 0;
    analogWrite (tonePin, LOW); // Нафига?
    delay(50);
  }
}

 

Jexi
Offline
Зарегистрирован: 18.04.2017

так. Я сразу писал что плохо в этом разбираюсь, поэтому соединял несколько кодов в один , поэтому такая штука получилась. Если мелодия играет и проиходит единица то она заканчивается сразу. Задумка идёт на  то , что  с андроида приходит сигнал в иде цывры один как задать  его я не знаю. поэтому warOk и warOn. Вообщем таки всё.

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

Ну, понимаете, Вы подходите не с той стороны. Вы пытаетесь писать не программу не уяснив до конца логику работы. Так не получится. Начните с того, что напишите словами что Вы делаете. Только именно что Вы делаете, а не глупости вроде "вывожу ток". Словами - в терминах задачи. Чётко по шагам. Пройтиде по записи прямо пальцем и убедитесь, что логика написана правильно. А потом, под этими комментариями просто впишите адекватные коды. Вы же пытаетесь сразу коды писать не понимаю толком что они делают. Например, Вот Вы пишете, что "мелодия заканчивается сразу" а между тем в функции проигрывания мелодии у Вас даже попытки нет узнать пришло ли что-нибудь - она у Вас заточена на тупое проигрывание от начала до конца.