Помощь с расширение кол-ва входов

Ilya3Run13
Offline
Зарегистрирован: 23.10.2013

Итак-с, есть код, скопипасченый с Drum Kit на ардуино, проверен и как ни странно работает без танцев с бубном. Однако количество подключаемых датчиков ограничено кол-вом аналоговых входов ,что меня удручило т.к. я планирую полноценную барабанную установку) 
В Аппаратных вопросах меня ткнулилицом в мультиплексоры, и я понимаю логику их работы, однако совершенно не понимаю, как встроить их в код ,точнее встроить один)
Помогите пожалуйста, ибо я не совсем разобрался как работает этот код и любые изменения приведут к очередной ошибке на мой взгляд) Заранее благодарен.
Вот непосредственно код:

//  BY: MARK DEMERS Copywrite 20009
//  April. 2009
//  VERSION: 1.b
//
//  DESCRIPTION:
//  Arduino analog input used to sense piezo drum hits then sent serialy to processing.
// 
//  Required - Hardware:
//  1. Drum kit - kit (From SpikenzieLabs.com)
//  2. Arduino
//
//  Required - Software:
//  1. Serial MIDI converter
//  2. Garage Band, Ableton Live etc ...
//
// LEGAL:
// This code is provided as is. No guaranties or warranties are given in any form. It is your responsibilty to
// determine this codes suitability for your application.
//*******************************************************************************************************************
// User settable variables        
//*******************************************************************************************************************
unsigned char PadNote[6] = {52,16,66,63,40,65};      // MIDI notes from 0 to 127 (Mid C = 60)
int PadCutOff[6] = {600,600,600,600,600,600};          // Minimum Analog value to cause a drum hit
int MaxPlayTime[6] = {90,90,90,90,90,90};              // Cycles before a 2nd hit is allowed
#define  midichannel    0;                            // MIDI channel from 0 to 15 (+1 in "real world")
boolean VelocityFlag  = true;                          // Velocity ON (true) or OFF (false)
//*******************************************************************************************************************
// Internal Use Variables         
//*******************************************************************************************************************
boolean activePad[6] = {0,0,0,0,0,0};                  // Array of flags of pad currently playing
int PinPlayTime[6] = {0,0,0,0,0,0};                  // Counter since pad started to play
unsigned char status;
int pin = 0;    
int hitavg = 0;
//*******************************************************************************************************************
// Setup          
//*******************************************************************************************************************
void setup()
{
  Serial.begin(57600);                                // connect to the serial port 115200
}
// Main Program       
//*******************************************************************************************************************
void loop()
{
  for(int pin=0; pin < 6; pin++)
  {
    hitavg = analogRead(pin);                             // read the input pin
    if((hitavg > PadCutOff[pin]))
    {
      if((activePad[pin] == false))
      {
        if(VelocityFlag == true)
        {
//        hitavg = 127 / ((1023 - PadCutOff[pin]) / (hitavg - PadCutOff[pin])); // With full range (Too sensitive ?)
          hitavg = (hitavg / 8) -1 ;                                                 // Upper range
        }
        else
        {
          hitavg = 127;
        }
        MIDI_TX(144,PadNote[pin],hitavg);
        PinPlayTime[pin] = 0;
        activePad[pin] = true;
      }
      else
      {
        PinPlayTime[pin] = PinPlayTime[pin] + 1;
      }
    }
    else if((activePad[pin] == true))
    {
      PinPlayTime[pin] = PinPlayTime[pin] + 1;
      
      if(PinPlayTime[pin] > MaxPlayTime[pin])
      {
        activePad[pin] = false;
        MIDI_TX(128,PadNote[pin],127);
      }
    }
  }
}
void MIDI_TX(unsigned char MESSAGE, unsigned char PITCH, unsigned char VELOCITY)
{
  status = MESSAGE + midichannel;
  Serial.print(status);
  Serial.print(PITCH);
  Serial.print(VELOCITY);
  
}

 

uno
Offline
Зарегистрирован: 16.06.2016

Какую плату используеш? может проще мегу взять где входов больше. там и памяти больше есть куда расширяться.