мелодия в функции

Viktor_Samsonov
Offline
Зарегистрирован: 16.09.2016

мне уже подсказали как сделать функцию, Спасибо.

но возникла новая проблема

нельзя использовать delay в функции, как обойти это ограничение?

Мелодия просто не воиспроизводится, так же светодиод негорит нужное время.

как же написать мелодию без делай? как зажечь светодиод без делай в функции?

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Использовать millis() или micros(). А лучше чего нить почитать.

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

Ну или выдели мелодию в отдельный вычислительный поток и играй.:)   А запуск по какому-то событию или флагу.

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

Виктор, это уже как минимум третья (а, думаю, больше) тема, где Вам советуют

brokly пишет:

чего нить почитать.

Вы упорно игнорируете этот совет и прдолжаете задавать детские вопросы сформулированные настолько безграмотно, что их невозможно понять (ну, вот с чего Вы взяли, что в функции нельзя использовать delay?)

Да, почитайте Вы, наконец, какую-нибудь книжку по программированию на С. И вопросов станет меньше и ребёнком из детсада выглядеть перестанете.

Это реальный хороший совет. Вам тут его уже полфорума давало.

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

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

Да, почитайте Вы, наконец, какую-нибудь книжку по программированию на С.

Не нужно читать книжку по "программированию на С".

Нужно читать учебник по программированию. (Лучше, если на Паскале) А когда начнеи получаться, можно начать ознакомление и с С.

 

PS. ЕвгенийП, Вы постоянно рекомендуете новичкам литературу, которая сорвсем не для новичнов. В частности, K&R - это не учебник по программированию (о чем авторы, кстати, сами пишут во введении), а справочник по языку.

В первую очередь нужно изучать программирование, а не С. А С - это уже следующий этап.

Viktor_Samsonov
Offline
Зарегистрирован: 16.09.2016

а для чего был сделан этот форум? разве не для этого, я тоже могу говорить всем "иди че нить почитай", но это меня не делает профессионалом.

delay в функции void необрабатывается!!!(ну у меня ее игнорирует)

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

Viktor_Samsonov пишет:

а для чего был сделан этот форум? разве не для этого, я тоже могу говорить всем "иди че нить почитай", но это меня не делает профессионалом.

интересный вопрос.

ок.

напиши здесь, для чего был создан этот форум и для чего здесь я?

*то, что я здесь не для того, что бы тебя делать профессионалом - это факт.

*то, что создатель форума ступил, не наняв сотню преподавателей из Майкрософт, Гугла и Епла - это факт.

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

Viktor_Samsonov пишет:

а для чего был сделан этот форум? 

Для того, чтобы те, кто что-то делает и работает могли получить помощь. Те же, кто ничерта не делает, не работает и не слушает, что ему на том же форуме говорят, идут лесом.

Помочь тому, кто нихрена не хочет делать сам - невозможно.

Viktor_Samsonov пишет:

delay в функции void необрабатывается!!!(ну у меня ее игнорирует)

1. Нет такой функции "void" и быть в этом языке не может

2. delay отлично работает во всех функциях

3. Да, прочитайте Вы что-нибудь наконец, перестаньте выглядеть идиотом!

Viktor_Samsonov пишет:

это меня не делает профессионалом.

Ничто и никогда не сделает Вас профессионалом, пока Вы не начнёте РАБОТАТЬ, а не паразитировать на форумах.

 

 

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

Viktor_Samsonov пишет:

а для чего был сделан этот форум?

Для обмена опытом.

Тому, кому нечем обмениваться, этот форум бесполезен.

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

andriano пишет:

Для обмена опытом.

Тому, кому нечем обмениваться, этот форум бесполезен.

Присоеденяюсь.  Вот код . И он вам бесполезен.

/*
 пищалка -> 3 (beep_pin)
      GND -> GND
 кнопка  -> 2 (btn_pin) 0  нажата / 1 нет
     GND -> GND
 */
//#1
#include "pitches.h"
const int beep_pin = 3;//пин пищалки
const int notes[] = { NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4};// ноты
const int play_notes[] = { 4, 8, 8, 4, 4, 4, 4, 4};// длительность
int noteDuration = 1000; // длительность полной ноты 1 сек
float pause_Notes = 1.3;
uint8_t Play_ON = 0; //1 сыграть мелодию / 0 нет
uint8_t number_note = 0; // номер ноты  0 - ..
const int end_note = 8; // последняя нота
//#2
const int btn_pin = 2;
uint8_t btn;//нажатие кнопки
void setup() {
  //#1
  //#2
  pinMode(btn_pin, INPUT_PULLUP);
  btn = digitalRead(btn_pin);
}
void loop() {
  static uint32_t MILLIS ;
  MILLIS = millis() ;
  //#1
  static uint32_t future1 = 0 ;
  if (MILLIS >= future1) {
    if (! Play_ON) future1 = MILLIS + 1000 ;
    else if (number_note < end_note) {
      tone(beep_pin, notes[number_note], noteDuration / play_notes[number_note]);
      future1 = MILLIS + pause_Notes * noteDuration / play_notes[number_note] ;
      number_note++;
    }
    else {
      Play_ON = 0;
      number_note = 0;
    }
  }
  //#2 200 миллисек кнопка
  static uint32_t future2 = 0 ;
  if (MILLIS >= future2) {
    future2 = MILLIS + 200 ;
    btn = btn << 1 | digitalRead(btn_pin);
    if ((btn & 3) == 2) Play_ON = 1;
  }
}

ПС: pitches.h можно взять Образцы-> 2 Digital->toneMelody

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

Твой говнокод бесполезен по определению. Один х... работать не будет.

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

andriano пишет:

PS. ЕвгенийП, Вы постоянно рекомендуете новичкам литературу, которая сорвсем не для новичнов. 

Так, порекомендуйте более правильную литературу, кто ж Вам мешает? Может, хоть что-нибудь прочитают (хотя, к ТС это врядли относится).