Барабанная установка

Тема в разделе "Глядите, что я сделал", создана пользователем darkavenger, 8 авг 2013.

  1. darkavenger

    darkavenger Гик

    По мотивам статьи из журнала Linux Format. Вывод посредством midi.



    Код (C):

    #define MAXPADS 4

    int STAGE0 = 8;
    int STAGE1 = 12;
    int speakerOut = 12;
    int val = 0 ;

    int piezoStart[] = {0,0,0,0};
    int piezoIn[] = {0,1,2,3};
    int piezoState[] = {0,0,0,0};

    void setup() {
      pinMode(speakerOut, OUTPUT);
      for (int i=0; i<MAXPADS; i++) {
          pinMode(piezoIn[i], INPUT);
      }
      //  Set MIDI baud rate:
      Serial.begin(31250);
    }

    void playDrum(int drum) {
       switch (drum) {
         case 0:
         //break;
           noteOn(0x99, 0x24, 0x7F); delay(200); break;  
         case 1:
           break;
         //noteOn(0x99, 0x24, 0x7F); delay(100); break;
         case 2:
           // break;
         noteOn(0x99, 0x31, 0x7F); delay(100); break;
         case 3:
         noteOn(0x99, 0x28, 0x7F); delay(200); break;
         case 4:
         break;
         //noteOn(0x99, 0x33, 0x7F); delay(100); break;  
         case 5:
         break;
         //noteOn(0x99, 0x33, 0x7F); delay(100); break;  
      }
    }

    //  plays a MIDI note.  Doesn't check to see that
    //  cmd is greater than 127, or that data values are  less than 127:
    void noteOn(int cmd, int pitch, int velocity) {
       Serial.write(cmd);
       Serial.write(pitch);
       Serial.write(velocity);
    }

    void loop(){
     
      STAGE0 = abs(analogRead(5) / 64);
      STAGE1 = abs(STAGE0 * 1.5);
     
      for (int i=0; i<MAXPADS; i++) {
         val = analogRead(piezoIn[i]);
         if(( val >= STAGE0) && (piezoState[i] == false)) {
           piezoState[i] = true;
           piezoStart[i] = val;
         } else if ( ((val - piezoStart[i]) > STAGE1) && (piezoState[i] == true)) {
           piezoState[i] = false;
           playDrum(i);  
         } else if ((piezoState[i] == true) && ( val < STAGE0)) {
           piezoState[i] = false;
         }
       }
       delay(1);
    }

     
     
    egordorichev, ИгорьК, Tomasina и 4 другим нравится это.
  2. lonely_jack

    lonely_jack Нуб

    крутяк, молодчики))) а задержка из за микрококнтроллера или комп не тянет?
     
  3. robokop

    robokop Гик

    Круто!
     
  4. egordorichev

    egordorichev Гик

    Мальчик молодец!
     
  5. Megakoteyka

    Megakoteyka Оракул Модератор

    Ну дела! Ребенок электронику мастерит, а папа только с камерой стоять может :)
     
  6. darkavenger

    darkavenger Гик

    Папа ему сначала объясняет как мастерить эту самую электронику :)
     
  7. Megakoteyka

    Megakoteyka Оракул Модератор

    Это ирония была, если че :)