Что "вселилось" в Arduino?

Тема в разделе "Arduino & Shields", создана пользователем Лев Николаевич, 8 окт 2018.

Метки:

  1. delay (dur+1) фиксит это всё, но звук запинается. Что делать7.
    Код (C++):
    #define N     0

    #define CS    16.35 //Subcontracting
    #define CISS  17.32
    #define DS    18.35
    #define DISS  19.45
    #define ES    20.60
    #define FS    21.83
    #define FISS  23.12
    #define GS    24.5
    #define GISS  25.96
    #define AS    27.5
    #define BS    29.13
    #define HS    30.87

    #define CC    32.7 //Counterclave
    #define CISC  34.65
    #define DC    36.95
    #define DISC  38.88
    #define EC    41.21
    #define FC    43.65
    #define FISC  46.25
    #define GC    49
    #define GISC  51.9
    #define AC    55
    #define BC    58.26
    #define HC    61.74

    #define CB    65.41  // Big octave
    #define CISB  69.3
    #define DB    73.91
    #define DISB  77.78
    #define EB    82.41
    #define FB    87.31
    #define FISB  92.5
    #define GB    98
    #define GISB  103.80
    #define AB    110
    #define BB    116.54
    #define HB    123.48

    #define C0    130.82  //Small octave
    #define CIS0  138.59  //0 - zero, not char.
    #define D0    147.83
    #define DIS0  155.56
    #define E0    164.81
    #define F0    174.62
    #define FIS0  185
    #define G0    196
    #define GIS0  207
    #define A0    220
    #define B0    233.08
    #define H0    246.96

    #define C1    261.63  //First octave
    #define CIS1  277.18
    #define D1    293.66
    #define DIS1  311.13
    #define E1    329.63
    #define F1    349.23
    #define FIS1  369.99
    #define G1    392
    #define GIS1  415.3
    #define A1    440
    #define B1    466.16
    #define H1    493.88

    #define C2    523.25  //Second octave
    #define CIS2  554.36
    #define D2    587.32
    #define DIS2  622.26
    #define E2    659.26
    #define F2    698.46
    #define FIS2  739.98
    #define G2    784
    #define GIS2  830.6
    #define A2    880
    #define B2    932.32
    #define H2    987.75

    #define C3    1046.5 //Third octave
    #define CIS3  1108.7
    #define D3    1174.6
    #define DIS3  1244.5
    #define E3    1318.5
    #define F3    1396.9
    #define FIS3  1480
    #define G3    1568
    #define GIS3  1661.2
    #define A3    1720
    #define B3    1864.6
    #define H3    1975.5

    #define C4    2093  //Forth octave
    #define CIS4  2217.4
    #define D4    2349.2
    #define DIS4  2489
    #define E4    2637
    #define F4    2793.8
    #define FIS4  2960
    #define G4    3136
    #define GIS04 3332.4
    #define A4    3440
    #define B4    3729.2
    #define H4    3951

    #define C5    4186  //Thith octave
    #define CIS5  4434.8
    #define D5    4698.4
    #define DIS5  4978
    #define E5    5274
    #define F5    5587.68
    #define FIS5  5919.84
    #define G5    6272
    #define GIS5  6644.8
    #define A5    7040
    #define B5    7458.56
    #define H5    7902.8

    // BPM = 150;
    int T1   = 1600;
    int T2   = 800;
    int T4   = 400;
    int T8   = 200;
    int T16  = 100;
    int T32  = 50;

    int tonePin = 11;

    void setup() {

    }

    void note(int note, int dur) {
    if (note) {
        tone (tonePin, note, dur);
      }
      delay (dur);
    }

    void playMelody() {

      for (int i = 0; i <= 1; i++){
        note (FIS1, T8);
        note (A1,   T8);
        note (FIS1, T8);
        note (H1,   T8);
        note (E1,   T16);
        note (FIS1, T8);
        note (E1,   T16);
        note (FIS1, T8);
        note (CIS2, T8);
        note (FIS1, T4);
        note (N,    T8);
        note (GIS1, T8);
        note (A1,   T8);
        note (GIS1, T8);
        note (FIS1, T4);

        note (GIS1, T8);
        note (FIS1, T8);
        note (H1,   T8);
        note (GIS1, T8);
        note (FIS1, T16);
        note (GIS1, T8);
        note (FIS1, T16);
        note (GIS1, T8);
        note (CIS2, T8);
        note (GIS1, T4);
        note (N,    T8);
        note (A1,   T8);
        note (H1,   T8);
        note (A1,   T8);
        note (GIS1, T4);
      }
      note (FIS1, T4);
      note (E1,   T4);
      note (D1,   T4);
      note (CIS1, T4);
      note (N,    T8);
      note (CIS1, T8);
      note (CIS1, T8);
      note (CIS1, T8);
      for (int i = 0; i <= 1; i++){
        note (N,    T8);
        note (CIS1, T8);
        note (FIS1, T8);
        note (GIS1, T8);
        note (A1,   T8);
        note (GIS1, T8);
        note (A1,   T8);
        note (FIS1, T8);
        note (FIS1, T16);
        note (N,    T16);
        note (CIS2, T8);
        note (H1,   T8);
        note (A1,   T8);

        note (H1,   T8);
        note (A1,   T8);
        note (H1,   T8);
        note (FIS1, T8);
        note (FIS1, T8);
        note (A1,   T8);
        note (GIS1, T8);
        note (FIS1, T8);

        note (E1,   T8);
        note (FIS1, T8);
        note (GIS1, T8);
        note (E2,   T8);
        note (E2,   T8);
        note (D2,   T8);
        note (CIS2, T8);
        note (H1,   T8);
        note (CIS2, T2);
      }
      note (N,    T8);
      note (CIS1, T16);
      note (E1,   T16);
      note (FIS1, T16);
      note (GIS1, T16);
      note (A1,   T16);
      note (H1,   T16);
      for (int i = 0; i <= 1; i++){
        note (A1,   T8);
        note (GIS1, T16);
        note (A1,   T16);
        note (A1,   T16);
        note (FIS1, T16);
        note (A1,   T8);
        note (GIS1, T16);
        note (A1,   T8);
        note (FIS1, T16);
        note (H1,   T16);
        note (A1,   T16);
        note (GIS1, T16);
        note (A1,   T16);

        note (A1,   T8);
        note (GIS1, T16);
        note (A1,   T16);
        note (A1,   T16);
        note (FIS1, T16);
        note (A1,   T8);
        note (GIS1, T16);
        note (A1,   T8);
        note (FIS1, T16);
        note (H1,   T16);
        note (A1,   T16);
        note (GIS1, T16);
        note (A1,   T16);

        note (H1,   T8);
        note (A1,   T16);
        note (H1,   T16);
        note (H1,   T16);
        note (GIS1, T16);
        note (H1,   T8);
        note (A1,   T16);
        note (H1,   T8);
        note (GIS1, T16);
        note (CIS2, T16);
        note (H1,   T16);
        note (A1,   T16);
        note (H1,   T16);
        note (GIS1, T16);

        note (FIS1, T16);
        note (E1,   T16);
        note (CIS1, T16);
        note (D1,   T16);
        note (FIS1, T16);
        note (CIS1, T16);
        note (E1,   T16);
        note (FIS1, T16);
        note (A1,   T16);
        note (GIS1, T16);
        note (FIS1, T16);
        note (E1,   T16);
        note (CIS2, T8);
        note (H1,   T8);
      }
    }

    void loop() {
        playMelody();
    }
     
    Последнее редактирование: 8 окт 2018
  2. parovoZZ

    parovoZZ Гуру

    А где эта функция
     
  3. Код (C++):
    void note(int note, int dur) {
    if (note) {
        tone (tonePin, note, dur);
      }
      delay (dur);
    }
     
  4. ZAZ-965

    ZAZ-965 Гуру

    А что не так? Пиликает же?
     
  5. parovoZZ

    parovoZZ Гуру

    Это функция note. А где tone?
     
  6. DetSimen

    DetSimen Гуру

  7. parovoZZ

    parovoZZ Гуру

    в абдурино? И чем она занимается? Выводит синус с заданной частотой?
     
  8. DetSimen

    DetSimen Гуру

    меандр со скважностью ровно 2
     
  9. Чет я не пойму назначение delay (dur) в функции note. Пауза длиной в предыдущий звук ?!
    Мож там фиксированный интервальчик между нотами сделать - как одним пальцем на пианине ?
    Там в справочнике есть про ограничение нижней частоты 31 Герц. Не то ?
     
    Последнее редактирование: 8 окт 2018
  10. Если вообще не делать задержку, то на ШИМ будет поступать постоянно смена ноты, и вся мелодия превратится в шум. Команда отправляется, ожидается время, когда ШИМ закончит выводить сигнал и сразу же отправляется следующая команда.

    Вопрос же заключается в этом - почему треть мелодии играет нормально, а третья часть "бесится"?
     
  11.  
  12. DetSimen

    DetSimen Гуру

    Музыка не нраица, наерна.
     
  13. ZAZ-965

    ZAZ-965 Гуру

    А если так -
    Код (C++):
    void note(int note, int dur) {
    if (note) {
        tone (tonePin, note, dur);
        noTone(tonePin); // stop the tone playing:
      }
    //  delay (dur);
    }
     
  14. parovoZZ

    parovoZZ Гуру

  15. DetSimen

    DetSimen Гуру

    Нет, если в tone указать длительность.
    Если не указывать, надо вызывать notone
     
  16. parovoZZ

    parovoZZ Гуру

    Надо думать. Кому понраица музыка из прямоугольников???
     
  17. parovoZZ

    parovoZZ Гуру

    Чувак, а где ещё одна треть? С ней что? Тож не нраица?
     
  18. 0:44
    Я не думаю, что это нормальное звучание
    1:56
    Должно играть так, но это только при delay (dur+1)
    Почему ШИМ неверно выводит именно третью часть при delay(dur)?
    Мне не нравится delay (dur+1), потому что меня раздражает микроскопическая задержка между нотами.
     
    Последнее редактирование: 8 окт 2018
  19. parovoZZ

    parovoZZ Гуру

    Какой ещё ШИМ? Кошак утверждает, что tone() - это
    Собственно, меандр - это всегда прямоугольник со скважностью два. А раз так, то никакого ШИМ там нет. Изменяем-то мы частоту. И здесь могут быть нюансы. Я почему и спрашивал про tone(), ибо проще написать свою tone(), чем выяснять косяк со стандартной.
    А что за мелодия?
     
  20. Ninja Gaiden: Act 4-2