#1 Re: Програмування Arduino » Проблема с работой программы. Нужен совет програмиста. » 2016-03-15 22:04:45

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

#2 Re: Програмування Arduino » Проблема с работой программы. Нужен совет програмиста. » 2016-03-14 23:51:18

Нет. Пустой экран((

Мигание не критично.

P.S. такой код мне совершенно не понятен. Как этому можно научится? Никакой логики...

#3 Re: Програмування Arduino » Проблема с работой программы. Нужен совет програмиста. » 2016-03-14 20:59:49

Спасибо большое, NoName!

Если позволите, еще один вопрос - очень сильно моргает дисплей при воспроизведении даты/времени. Когда просто выводим текст - картинка стабильная. Для уменшения ефекта мерцания я написал команду "delay (200)":
void loop()
{
  now = rtc.now();
  time_on_lcd();
  delay(200);
  timer_bell();
  bell_menu();
}

Но теперь случилось что-то, чего я не могу об'яснить. Дата/время пропали с дисплея вообще. Проверил все соединения. Заново синхронизировал RTC с комп'ютерными часами. Не помогло.
Дата/время вернулись на экран как только я закоментировал "delay (200)". Но отображаются с тем же мерцанием. Уменьшение времени паузы проблему не решило.
Чем это можно об'яснить?

#4 Re: Програмування Arduino » Проблема с работой программы. Нужен совет програмиста. » 2016-03-14 00:16:55

#include <Wire.h>
#include "RTClib.h"
#include <LiquidCrystal.h>
#include <Wtv020sd16p.h>
#include <Keypad.h>

RTC_DS1307 rtc;
LiquidCrystal  lcd (8, 9, 4, 5, 6, 7); // set the LCD address to 0x27 for a 16 chars and 2 line display

//Звуковий модуль: вказано піни
int resetPin = 19;  // The pin number of the reset pin.
int clockPin = 18;  // The pin number of the clock pin.
int dataPin = 17;  // The pin number of the data pin.
int busyPin = 16;  // The pin number of the busy pin.
Wtv020sd16p wtv020sd16p(resetPin, clockPin, dataPin, busyPin);
//кінець опису звукового модуля

DateTime now;

const byte ROWS = 4; //four rows
const byte COLS = 3; //four columns
//define the cymbols on the buttons of the keypads
char hexaKeys[ROWS][COLS] = {
  {'1', '2', '3'},
  {'4', '5', '6'},
  {'7', '8', '9'},
  {'*', '0', '#'}
};
byte rowPins[ROWS] = {31, 33, 35, 37}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {39, 41, 43}; //connect to the column pinouts of the keypad

//initialize an instance of class NewKeypad
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);

const unsigned char table_music [24]
= {
  12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
  12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
};

void setup() {
  Wire.begin();
  Serial.begin(9600);
  rtc.begin();
  lcd.begin(16 , 2);
  lcd.home();
  lcd.clear();
  wtv020sd16p.reset();
}

void loop()
{
  now = rtc.now();
  time_on_lcd();
  delay(200);
  timer_bell();
  bell_menu();
}
//---------------------------------------------
void printDigits(int digits)
{
  // додає нуль якщо година, хвилина або секунда менша 10 (для гарного відображення часу).
  if (digits < 10) {
    lcd.print('0');
  }
  lcd.print(digits);
}
//---------------------------------------------
void time_on_lcd()
{
  //рисуем часы
  lcd.setCursor(0, 0);
  printDigits (now.hour());

  //рисуем минуты
  lcd.setCursor(3, 0);
  printDigits(now.minute());

  //рисуем статическое двоеточие между часами и минутами
  lcd.setCursor(2, 0);
  lcd.print(":");

  //рисуем секунды

  lcd.setCursor(6, 0);
  printDigits(now.second());

  //рисуем моргающее двоеточие, привязано к секундам, вывод слева или справа двоеточие зависит от четности секунд

  lcd.setCursor(5, 0);
  if (now.second() % 10 % 2 == 0) {
    lcd.print(":");
  }
  else
  {
    lcd.print(" ");
  }

  // Дата-месяц-день в нижней строке
  lcd.setCursor(0, 1);
  printDigits(now.year());

  lcd.setCursor(4, 1);
  lcd.print("-");

  lcd.setCursor(5, 1);
  printDigits(now.month());

  lcd.setCursor(7, 1);
  lcd.print("-");

  lcd.setCursor(8, 1);
  printDigits(now.day());
}

//---------------------------------------------
void timer_bell()
{
  static int old_current_hour = 0xFF;

  int new_hour = now.hour();
  int number_sound;

  if ( old_current_hour == new_hour )
  { // no music on  start
    old_current_hour = new_hour;
  }

  // Включение выхода на усилитель
  if (now.minute() == 59 )
  {
    if  ( now.second() == 50 )
      digitalWrite (51, LOW);
  }

  if (now.minute() == 1 )
  {
    if ( now.second() == 15 )
      digitalWrite (51, HIGH);
  }
  //кінець спрацювання виходу 51

  // Сработка на заданое время - каждый час звучит мелодия
  // - 1 sec ??????
  if ( old_current_hour !=  new_hour )
  {
    //wtv020sd16p.playVoice( table_music[new_hour%24]);
    wtv020sd16p.playVoice( (new_hour % 12) + 1);
    return;
  };
}
//---------------------------------------------
void play_selected_music (int number_music)
{
  char key = customKeypad.getKey();
  lcd.clear();
  lcd.setCursor(0 , 0);
  lcd.print("Play track №1?"); // pls add number_music
  lcd.setCursor(0 , 1);
  lcd.print("*-YES    #-N0");
  do
  {
    key = customKeypad.getKey();
    switch (key)
    case '*':
    {
      lcd.clear();
      lcd.print("Playing melody 1"); // pls add number_music
      digitalWrite (51, LOW);
      wtv020sd16p.playVoice(1);
      //      delay (5000);
      digitalWrite (51, HIGH);
      lcd.clear();
      return;
    }
    switch (key)
    case '#':
    {
      lcd.clear();
      return;
    }
  } while ( key != '*' || key != '#' );
}


//----------------------------------------------------------------
//Выбор мелодии пользователем
void bell_menu()
{
  char key = customKeypad.getKey();
  if (key); // Check for a valid key.
  {
    switch (key)
    case '1':
    {
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Play track №1?");
      lcd.setCursor(0, 1);
      lcd.print("*-YES    #-N0");
      do
      {
        key = customKeypad.getKey();
        switch (key)
        case '*':
        {

          digitalWrite (51, LOW);
          lcd.clear();
          lcd.print("Playing melody 1");
          wtv020sd16p.playVoice(1);
          //wtv020sd16p.stopVoice();
          //wtv020sd16p.playVoice(1);
          delay (10000);
          digitalWrite (51, HIGH);
          lcd.clear();
          return;
        }
        switch (key)
        case '#':
        {
          lcd.clear();
          return;
        }
      } while ( key != '*' || key != '#' );

      if (( key >= '0' ) && ( key <= '9' ));
      play_selected_music (key - 0x20);

    }
  }
}

#5 Re: Програмування Arduino » Проблема с работой программы. Нужен совет програмиста. » 2016-03-13 23:32:53

Мелодию отрабатывает верно, но и запускает постоянно(((
Мелодия играет практически не останавливаясь (остановка только на время "зависания часов" - секунды на 2-3.

#6 Re: Програмування Arduino » Проблема с работой программы. Нужен совет програмиста. » 2016-03-13 01:09:05

NoName, пожалуйста, попробуйте обьяснить мне как работает этот код. Самое интересное для меня что это - (new_hour%13) + 1)? Почему именно 13?

NoName пише:
const unsigned char table_music [24]
= {
	1,2,3,4,5,6,7,8,9,10,11,12,
	1,2,3,4,5,6,7,8,9,10,11,12
}  

void timer_bell()
{
  static int old_current_hour = 0xFF; 

   int new_hour = now.hour(); 
   int number_sound;

  if ( old_current_hour == 0xFF )
  { // no music on  start 
   old_current_hour = new_hour;
 }

 // Включение выхода на усилитель
  if (now.minute() == 59 )
  {
    if  ( now.second() == 50 )
    digitalWrite (51, LOW);
  }

  if (now.minute() == 1 )
  {
   if ( now.second() == 15 )
    digitalWrite (51, HIGH);
  }
  //кінець спрацювання виходу 51

  // Сработка на заданое время - каждый час звучит мелодия
   // - 1 sec ??????
   if ( old_current_hour !=  new_hour )
   {
	wtv020sd16p.playVoice( (new_hour%13) + 1);
     //  or  
    // wtv020sd16p.playVoice( table_music[new_hour%24]);
   }
}

много кода (((
но задача отлично прописана, молодцы!
по частям давайте оптимизировать
- 1 sec  от нового часа это важно?

#7 Re: Програмування Arduino » Проблема с работой программы. Нужен совет програмиста. » 2016-03-13 00:33:41

Извините, NoName, Ваш ник ввел меня в заблуждение - я подумал, что коменты оставлены несколькими участниками.

#8 Re: Програмування Arduino » Проблема с работой программы. Нужен совет програмиста. » 2016-03-13 00:11:59

Спасибо всем за то, что уделили мне свое время. Мне очень приятно.

Так как опыта в программировании у меня нет, я практически не понимаю кода. Поэтому разбирать Ваши рекомендации буду долго))
Начал с коментария #2.
Не понимаю Вашего кода вообще. Это волшебство - Вы уменьшили код в разы! И он работает! Правда, первый вариант "wtv020sd16p.playVoice( (new_hour%13) + 1);" после первого срабатывания в 23:00 спрабатывает каждый раз как только заканчивается мелодия и часы снова начинают идти. Расскоментил второй вариант. Жду 24:00

#9 Програмування Arduino » Проблема с работой программы. Нужен совет програмиста. » 2016-03-12 19:33:51

Jugun
відповідей: 19

Доброго всем времени суток!
Итак нужна помощь знающих людей. Буду весьма благодарен за советы!

Апаратная часть:
Arduino Mega 2560
LCD-display 16*2
Real time clock
звуковой модуль Wtv020sd16p
матричная клавиатура 3*4
Реле 5V (реле только запланировано, еще не  купил).

Написал свою первую программу.
Техзадание:
На дисплее после включения отображаются дата и время. По таймеру включается музыка (посредством звукового модуля). За несколько секунд до сработки таймера должно сработать реле - это реле подаст напряжение на усилитель (чтобы усилитель работал лиш в то время когда надо).
Кроме того, пользователь должен иметь возможность самостоятельно запускать 9 музыкальных треков.

Алгоритм выбора трека пользователем
1. пользователь нажимает кнопку на клавиатуре от 1 до 9
2. на диспей выводится вопрос:
Play track#(номер трека)?
*-Yes #-No
3. если ошиблись с треком нажимаем #. На дисплей возвращается дата/время
4. если нажали * ардуино исполняет следующие действия:
а) включается реле
б) на дисплей на 10 секунд выводится надпись "Playing melody №"
в) подается команда на звуковой модуль играть трек №ХХ
г) очищается дисплей
д) выводит на дисплей дату/время

Проблема:
Описаные действия не всегда срабатывают как надо. При первом выборе трека (после включения/перезагрузки ардуино) музыка не воспроизводится. При последующих включениях музыка воспроизводится всегда но вывод надписей на дисплей срабатывает через раз - иногда корректно а иногда надпись "Play track#(номер трека)?" зависает на дисплее до окончания трека.
Никак не могу понять в чем дело, так как опыта в програмировании ноль. Помогите пожалуйста советом. Заранее спасибо.

Скетч:
#include <Wire.h>
#include "RTClib.h"
#include <LiquidCrystal.h>
#include <Wtv020sd16p.h>
#include <Keypad.h>

RTC_DS1307 rtc;
LiquidCrystal  lcd (8, 9, 4, 5, 6, 7); // set the LCD address to 0x27 for a 16 chars and 2 line display

//Звуковий модуль: вказано піни
int resetPin = 19;  // The pin number of the reset pin.
int clockPin = 18;  // The pin number of the clock pin.
int dataPin = 17;  // The pin number of the data pin.
int busyPin = 16;  // The pin number of the busy pin.
Wtv020sd16p wtv020sd16p(resetPin, clockPin, dataPin, busyPin);
//кінець опису звукового модуля

DateTime now;

const byte ROWS = 4; //four rows
const byte COLS = 3; //four columns
//define the cymbols on the buttons of the keypads
char hexaKeys[ROWS][COLS] = {
  {'1', '2', '3'},
  {'4', '5', '6'},
  {'7', '8', '9'},
  {'*', '0', '#'}
};
byte rowPins[ROWS] = {31, 33, 35, 37}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {39, 41, 43}; //connect to the column pinouts of the keypad

//initialize an instance of class NewKeypad
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);

void setup() {
  Wire.begin();
  Serial.begin(9600);
  rtc.begin();
  lcd.begin(16 , 2);
  lcd.home();
  lcd.clear();
}

void loop()
{
  now = rtc.now();
  time_on_lcd();
  delay(200);
  timer_bell();
  bell_menu();
}
//---------------------------------------------

void printDigits(int digits)
{
  // додає нуль якщо година, хвилина або секунда менша 10 (для гарного відображення часу).
  if (digits < 10) {
    lcd.print('0');
  }
  lcd.print(digits);
}

void time_on_lcd()
{
  //рисуем часы
  lcd.setCursor(0, 0);
  printDigits (now.hour());

  //рисуем минуты
  lcd.setCursor(3, 0);
  printDigits(now.minute());

  //рисуем статическое двоеточие между часами и минутами
  lcd.setCursor(2, 0);
  lcd.print(":");

  //рисуем секунды

  lcd.setCursor(6, 0);
  printDigits(now.second());


  //рисуем моргающее двоеточие, привязано к секундам, вывод слева или справа двоеточие зависит от четности секунд

  lcd.setCursor(5, 0);
  if (now.second() % 10 % 2 == 0) {
    lcd.print(":");
  }
  else
  {
    lcd.print(" ");
  }

  // Дата-месяц-день в нижней строке
  lcd.setCursor(0, 1);
  printDigits(now.year());

  lcd.setCursor(4, 1);
  lcd.print("-");

  lcd.setCursor(5, 1);
  printDigits(now.month());

  lcd.setCursor(7, 1);
  lcd.print("-");

  lcd.setCursor(8, 1);
  printDigits(now.day());

}

//----------------------------------------------------------------

void timer_bell()
{

  // Включение выхода на усилитель
  if (now.minute() == 59 && now.second() == 50)
  {
    digitalWrite (51, LOW);
  };
  if (now.minute() == 1 && now.second() == 15)
  {
    digitalWrite (51, HIGH);
  };
  //кінець спрацювання виходу 51


  //Сработка на заданое время - каждый час звучит мелодия
  if (now.hour() == 0 && now.minute() == 59 && now.second() == 59)
  {
    wtv020sd16p.playVoice(1);
  }

  if (now.hour() == 1 && now.minute() == 59 && now.second() == 59)
  {
    wtv020sd16p.playVoice(2);
  }

  if (now.hour() == 2 && now.minute() == 59 && now.second() == 59)
  {
    wtv020sd16p.playVoice(3);
  }

  if (now.hour() == 3 && now.minute() == 59 && now.second() == 59)
  {
    wtv020sd16p.playVoice(4);
  }

  if (now.hour() == 4 && now.minute() == 59 && now.second() == 59)
  {
    wtv020sd16p.playVoice(5);
  }

  if (now.hour() == 5 && now.minute() == 59 && now.second() == 59)
  {
    wtv020sd16p.playVoice(6);
  }

  if (now.hour() == 6 && now.minute() == 59 && now.second() == 59)
  {
    wtv020sd16p.playVoice(7);
  }

  if (now.hour() == 7 && now.minute() == 59 && now.second() == 59)
  {
    wtv020sd16p.playVoice(8);
  }

  if (now.hour() == 8 && now.minute() == 59 && now.second() == 59)
  {
    wtv020sd16p.playVoice(9);
  }

  if (now.hour() == 9 && now.minute() == 59 && now.second() == 59)
  {
    wtv020sd16p.playVoice(10);
  }

  if (now.hour() == 10 && now.minute() == 59 && now.second() == 59)
  {
    wtv020sd16p.playVoice(11);
  }

  if (now.hour() == 11 && now.minute() == 59 && now.second() == 59)
  {
    wtv020sd16p.playVoice(12);
  }

  if (now.hour() == 12 && now.minute() == 59 && now.second() == 59)
  {
    wtv020sd16p.playVoice(1);
  }

  if (now.hour() == 13 && now.minute() == 59 && now.second() == 59)
  {
    wtv020sd16p.playVoice(2);
  }

  if (now.hour() == 14 && now.minute() == 59 && now.second() == 59)
  {
    wtv020sd16p.playVoice(3);
  }

  if (now.hour() == 15 && now.minute() == 59 && now.second() == 59)
  {
    wtv020sd16p.playVoice(4);
  }

  if (now.hour() == 16 && now.minute() == 59 && now.second() == 59)
  {
    wtv020sd16p.playVoice(5);
  }

  if (now.hour() == 17 && now.minute() == 59 && now.second() == 59)
  {
    wtv020sd16p.playVoice(6);
  }

  if (now.hour() == 18 && now.minute() == 59 && now.second() == 59)
  {
    wtv020sd16p.playVoice(7);
  }

  if (now.hour() == 19 && now.minute() == 59 && now.second() == 59)
  {
    wtv020sd16p.playVoice(8);
  }

  if (now.hour() == 20 && now.minute() == 59 && now.second() == 59)
  {
    wtv020sd16p.playVoice(9);
  }

  if (now.hour() == 21 && now.minute() == 59 && now.second() == 59)
  {
    wtv020sd16p.playVoice(10);
  }

  if (now.hour() == 22 && now.minute() == 59 && now.second() == 59)
  {
    wtv020sd16p.playVoice(11);
  }

  if (now.hour() == 23 && now.minute() == 59 && now.second() == 59)
  {
    wtv020sd16p.playVoice(12);
  }
}

//----------------------------------------------------------------
//Выбор мелодии пользователем
void bell_menu()
{
  char key = customKeypad.getKey();
  if (key); // Check for a valid key.
  //------------------------------------------------------ Кнопка 1
  {
    switch (key)
    case '1':
    {
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Play track №1?");
      lcd.setCursor(0, 1);
      lcd.print("*-YES    #-N0");
      do
      {
        key = customKeypad.getKey();
        switch (key)
        case '*':
        {
          digitalWrite (51, LOW);
          wtv020sd16p.playVoice(1);
          wtv020sd16p.stopVoice();
          wtv020sd16p.playVoice(1);
          lcd.clear();
          lcd.print("Playing melody 1");
          delay (10000);
          digitalWrite (51, HIGH);
          lcd.clear();
          return;
        }
        switch (key)
        case '#':
        {
          lcd.clear();
          return;
        }
      } while ( key != '*' || key != '#' );

      //------------------------------------------------------ Кнопка 2
    case '2':
      {
        lcd.clear();
        lcd.setCursor(0 , 0);
        lcd.print("Play track №1?");
        lcd.setCursor(0 , 1);
        lcd.print("*-YES    #-N0");
        do
        {
          key = customKeypad.getKey();
          switch (key)
          case '*':
          {
            digitalWrite (51, LOW);
            wtv020sd16p.playVoice(1);
            wtv020sd16p.stopVoice();
            wtv020sd16p.playVoice(1);
            lcd.clear();
            lcd.print("Playing melody 2");
            delay (5000);
            digitalWrite (51, HIGH);
            lcd.clear();
            return;
          }
          switch (key)
          case '#':
          {
            lcd.clear();
            return;
          }
        } while ( key != '*' || key != '#' );
        //------------------------------------------------------ Кнопка 3

      case '3':
        {
          lcd.clear();
          lcd.setCursor(0 , 0);
          lcd.print("Play track №3?");
          lcd.setCursor(0 , 1);
          lcd.print("*-YES    #-N0");
          do
          {
            key = customKeypad.getKey();
            switch (key)
            case '*':
            {
              digitalWrite (51, LOW);
              wtv020sd16p.playVoice(1);
              wtv020sd16p.stopVoice();
              wtv020sd16p.playVoice(1);
              lcd.clear();
              lcd.print("Playing melody 3");
              delay (5000);
              digitalWrite (51, HIGH);
              lcd.clear();
              return;
            }
            switch (key)
            case '#':
            {
              lcd.clear();
              return;
            }
          } while ( key != '*' || key != '#' );
          //------------------------------------------------------ Кнопка 4

        case '4':
          {
            lcd.clear();
            lcd.setCursor(0 , 0);
            lcd.print("Play track №4?");
            lcd.setCursor(0 , 1);
            lcd.print("*-YES    #-N0");
            do
            {
              key = customKeypad.getKey();
              switch (key)
              case '*':
              {
                digitalWrite (51, LOW);
                wtv020sd16p.playVoice(1);
                wtv020sd16p.stopVoice();
                wtv020sd16p.playVoice(1);
                lcd.clear();
                lcd.print("Playing melody 4");
                delay (5000);
                digitalWrite (51, HIGH);
                lcd.clear();
                return;
              }
              switch (key)
              case '#':
              {
                lcd.clear();
                return;
              }
            } while ( key != '*' || key != '#' );
            //------------------------------------------------------ Кнопка 5

          case '5':
            {
              lcd.clear();
              lcd.setCursor(0 , 0);
              lcd.print("Play track №5?");
              lcd.setCursor(0 , 1);
              lcd.print("*-YES    #-N0");
              do
              {
                key = customKeypad.getKey();
                switch (key)
                case '*':
                {
                  digitalWrite (51, LOW);
                  wtv020sd16p.playVoice(1);
                  lcd.clear();
                  lcd.print("Playing melody 5");
                  delay (5000);
                  digitalWrite (51, HIGH);
                  lcd.clear();
                  return;
                }
                switch (key)
                case '#':
                {
                  lcd.clear();
                  return;
                }
              } while ( key != '*' || key != '#' );
              //------------------------------------------------------ Кнопка 6

            case '6':
              {
                lcd.clear();
                lcd.setCursor(0 , 0);
                lcd.print("Play track №6?");
                lcd.setCursor(0 , 1);
                lcd.print("*-YES    #-N0");
                do
                {
                  key = customKeypad.getKey();
                  switch (key)
                  case '*':
                  {
                    digitalWrite (51, LOW);
                    wtv020sd16p.playVoice(1);
                    lcd.clear();
                    lcd.print("Playing melody 6");
                    delay (5000);
                    digitalWrite (51, HIGH);
                    lcd.clear();
                    return;
                  }
                  switch (key)
                  case '#':
                  {
                    lcd.clear();
                    return;
                  }
                } while ( key != '*' || key != '#' );
                //------------------------------------------------------ Кнопка 7

              case '7':
                {
                  lcd.clear();
                  lcd.setCursor(0 , 0);
                  lcd.print("Play track №7?");
                  lcd.setCursor(0 , 1);
                  lcd.print("*-YES    #-N0");
                  do
                  {
                    key = customKeypad.getKey();
                    switch (key)
                    case '*':
                    {
                      digitalWrite (51, LOW);
                      wtv020sd16p.playVoice(1);
                      lcd.clear();
                      lcd.print("Playing melody 7");
                      delay (5000);
                      digitalWrite (51, HIGH);
                      lcd.clear();
                      return;
                    }
                    switch (key)
                    case '#':
                    {
                      lcd.clear();
                      return;
                    }
                  } while ( key != '*' || key != '#' );
                  //------------------------------------------------------ Кнопка 8

                case '8':
                  {
                    lcd.clear();
                    lcd.setCursor(0 , 0);
                    lcd.print("Play track №8?");
                    lcd.setCursor(0 , 1);
                    lcd.print("*-YES    #-N0");
                    do
                    {
                      key = customKeypad.getKey();
                      switch (key)
                      case '*':
                      {
                        digitalWrite (51, LOW);
                        wtv020sd16p.playVoice(1);
                        lcd.clear();
                        lcd.print("Playing melody 8");
                        delay (5000);
                        digitalWrite (51, HIGH);
                        lcd.clear();
                        return;
                      }
                      switch (key)
                      case '#':
                      {
                        lcd.clear();
                        return;
                      }
                    } while ( key != '*' || key != '#' );
                    //------------------------------------------------------ Кнопка 9

                  case '9':
                    {
                      lcd.clear();
                      lcd.setCursor(0 , 0);
                      lcd.print("Play track №9?");
                      lcd.setCursor(0 , 1);
                      lcd.print("*-YES    #-N0");
                      do
                      {
                        key = customKeypad.getKey();
                        switch (key)
                        case '*':
                        {
                          digitalWrite (51, LOW);
                          wtv020sd16p.playVoice(1);
                          lcd.clear();
                          lcd.print("Playing melody 9");
                          delay (5000);
                          digitalWrite (51, HIGH);
                          lcd.clear();
                          return;
                        }
                        switch (key)
                        case '#':
                        {
                          lcd.clear();
                          return;
                        }
                      } while ( key != '*' || key != '#' );
                      //------------------------------------------------------
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

Підвал форуму