Ардуино миди барабаны midi drums

vitallismetal
Offline
Зарегистрирован: 23.03.2018

Здравствуйте всем. Прошу помощи в таком деле. Есть три китайских ардуинки. Две нано и одна уно. При заливке скетча tx начинает по бешеному мигать тоесть как я понимаю поссылы идут от фонаря. Скетчи прилогаю, грешу на ch340 может надо оригинал купить и поэтому трабл. Пробовал порог чуствительности срабатывания повысить но ничего не меняется.Срабатывают куча нот как с подключенными пьезами так и без них. проблемма у всех ардуинок одна и таже. Скетчь разные пробовал, одно и тоже. Я нуб так что если поможете буду благодарен. Спасибо


// Автор кода: Christian D'Aquino						
// Версия: 20150109														
// Редактор: Rodrigo Amaral				
// Перевод на Русский: CheapDrums    

// НЕОБХОДИМО УСТАНОВИТЬ СКОРОСТЬ СОМ ПОРТА НА 115200
									
//----------------------------  ННАСТРОЙКИ  ------------------------------------------------------------------------------------------------------------------------------------------//

// ФОРМА ВВОДА ЗНАЧЕНИЙ, ВВОДИМ ЗНАЧЕНИЯ ВСЕХ 16ТИ ПИНОВ В СКОБКАХ ЧЕРЕЗ ЗАПЯТУЮ, ПРИМЕР ={A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15}; 
/*                        
                        |HAT CONTROL
                        |A0  |HI-HAT
                        |    |A1  |KICK
                        |    |    |A2  |SNARE
                        |    |    |    |A3  |RACK TOM 1 (1)
                        |    |    |    |    |A4  |RACK TOM 2 (2)
                        |    |    |    |    |    |A5  |RACK TOM 3 (3)
                        |    |    |    |    |    |    |A6  |FLOOR TOM 1 (4)
                        |    |    |    |    |    |    |    |A7  |RIDE 2
                        |    |    |    |    |    |    |    |    |A8  |RIDE 2 BELL
                        |    |    |    |    |    |    |    |    |    |A9  |SYMBAL 3
                        |    |    |    |    |    |    |    |    |    |    |A10 |SYMBAL 4
                        |    |    |    |    |    |    |    |    |    |    |    |A11 |CHINA 1
                        |    |    |    |    |    |    |    |    |    |    |    |    |A12 |CHINA 2
                        |    |    |    |    |    |    |    |    |    |    |    |    |    |A13 |SPLASH
                        |    |    |    |    |    |    |    |    |    |    |    |    |    |    |A14 |SPOCK
                        |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |A15
*/                        
byte SensorType[16]   ={144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 128 };	       // ТИП СЭНСОРА; 144 = ПЬЕЗА, 176 = КОНТРОЛЛЕР ХЭТА НА TCRT5000, 128 = ПУСТО												
byte PadNote[16]      ={44,  60,  36,  38,  48,  47,  45,  43,  108, 109,  30,  31,  27,  52,  55, 29  };	       // НОТА ПРИВЯЗАННАЯ К ПИНУ (АКТУАЛЬНО ДЛЯ SUPERIOR DRUMMER 2 / THE METAL FOUNDRY, В ДРУГИХ ПЛАГИНАХ / БИБЛИОТЕКАХ МОЖЕТ ОТЛИЧАТЬСЯ)  
int thresholdMin[16]  ={800  ,800, 800 ,800 ,800 ,800 ,800 ,800 ,800 ,800 ,800 ,800 ,800 ,800 ,800 ,800 };				 //	НИЖНИЙ ПОРОГ ЧУВСТВИТЕЛЬНОСТИ	(так же срезается нижний порог передаваемого по миди значения velocity, компенсиривать можно во вкладке utility)									
int thresholdMax[16]  ={1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023};			   //	ВЕРХНИЙ ПОРОГ ЧУВСТВИТЕЛЬНОСТИ  										
int sensorScantime[16]={10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10  };			   // ЧАСТОА ОПРОСА ДАТЧИКОВ
int sensorMasktime[16]={10,  60,  60,  40,  40,  40,  40,  40,  40,  40,  40,  40,  40,  40,  40,  40  };	       // ДЛИТЕЛЬНОСТЬ ИГНОРИРОВАНИЯ ДАТЧИКА ПОСЛЕ ПЛУЧЕНИЯ С НЕГО СИГНАЛА

#define READPIN 8 // КОЛЛИЧЕСТВО ЗАДЕЙСТВОВАННЫХ АНАЛОГОВЫХ ПИНОВ ДЛЯ ВВОДА (1й пин = A0, 2й пин = A1 и так далее)						
													
//------------------------------ Глушения тарелок ---------------------------------------//	

// Ноты глушения //

#define choke1 94
#define choke2 95 
#define choke3 106
#define chokeRide 118

// Доп цифровые входы //

#define Aux1 47
#define Aux2 47
#define Aux3 47
#define Aux4 47
#define Aux5 47
#define Aux6 47
#define Aux7 47																	
																														
// !!! ДАЛЕЕ ИДЕТ КОД ПРОГРАММЫ, ИЗМЕНЕНИЯ ВНОСИТЬ ТОЛЬКО ОПЫТНЫМ ПОЛЬЗОВАТЕЛЯМ !!! //

//Определение цифровых пинов глушилок

#define Choke1_Pin 51 
#define Choke2_Pin 49
#define Choke3_Pin 47
#define ChokeRide_Pin 53 

//Определение доп. цифровых пинов

#define Aux1_Pin 33
#define Aux2_Pin 35
#define Aux3_Pin 37
#define Aux4_Pin 39
#define Aux5_Pin 41
#define Aux6_Pin 43
#define Aux7_Pin 45

//Состояние цифровых пинов

int Choke1_State = LOW;
int Choke2_State = LOW;
int Choke3_State = LOW;
int ChokeRide_State = LOW;
int Aux1_State = LOW;
int Aux2_State = LOW;
int Aux3_State = LOW;
int Aux4_State = LOW;
int Aux5_State = LOW;
int Aux6_State = LOW;
int Aux7_State = LOW;

int currentSwitchState = LOW;

// установка и сброс битов регистра
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif

#define midichannel 0

int readSensor = 0;
int led = 13;
unsigned long previousMillis[16];
unsigned long currentMillis[16];
unsigned int sensorReads[10];
int readNumber[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
boolean playNote[16] ={true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true};

int pin = 0;

void setup()
{
  Serial.begin(115200);
  pinMode(Choke1_Pin, INPUT);
  pinMode(Choke2_Pin, INPUT);
  pinMode(Choke3_Pin, INPUT);
  pinMode(ChokeRide_Pin, INPUT);
  pinMode(Aux1_Pin, INPUT);
  pinMode(Aux2_Pin, INPUT);
  pinMode(Aux3_Pin, INPUT);
  pinMode(Aux4_Pin, INPUT);
  pinMode(Aux5_Pin, INPUT);
  pinMode(Aux6_Pin, INPUT);
  pinMode(Aux7_Pin, INPUT);
  
  digitalWrite(Choke1_Pin, HIGH);     // необходимо подтягивающее сопротивление
  digitalWrite(Choke2_Pin, HIGH);     // необходимо подтягивающее сопротивление
  digitalWrite(Choke3_Pin, HIGH);     // необходимо подтягивающее сопротивление
  digitalWrite(ChokeRide_Pin, HIGH);  // необходимо подтягивающее сопротивление
  digitalWrite(Aux1_Pin, HIGH);       // необходимо подтягивающее сопротивление
  digitalWrite(Aux2_Pin, HIGH);       // необходимо подтягивающее сопротивление
  digitalWrite(Aux3_Pin, HIGH);       // необходимо подтягивающее сопротивление
  digitalWrite(Aux4_Pin, HIGH);       // необходимо подтягивающее сопротивление
  digitalWrite(Aux5_Pin, HIGH);       // необходимо подтягивающее сопротивление
  digitalWrite(Aux6_Pin, HIGH);       // необходимо подтягивающее сопротивление
  digitalWrite(Aux7_Pin, HIGH);       // необходимо подтягивающее сопротивление
  pinMode(led, OUTPUT);
	
	while (!Serial) {
	; // ждать последовательный порт для подключения, (только для Arduino Leonardo)
	}
  
	// установить делитель на 8
	cbi(ADCSRA,ADPS2);
	sbi(ADCSRA,ADPS1);
	sbi(ADCSRA,ADPS0);
	
	Serial.flush();
  
}

void loop()

// ------------------------------------ ЦИФРОВЫЕ ВХОДЫ ----------------------------------- //

// ГЛУШИЛКА 01
{
currentSwitchState = digitalRead(Choke1_Pin);
if( currentSwitchState == LOW && Choke1_State == HIGH ) // push
MIDI_TX(144,  choke1, 127);
if( currentSwitchState == HIGH && Choke1_State == LOW ) // release
MIDI_TX(128, choke1, 127);
Choke1_State = currentSwitchState;
  
// ГЛУШИЛКА 02
{
currentSwitchState = digitalRead(Choke2_Pin);
if( currentSwitchState == LOW && Choke2_State == HIGH ) // push
MIDI_TX(144,  choke2, 127);
if( currentSwitchState == HIGH && Choke2_State == LOW ) // release
MIDI_TX(128, choke2, 127);
Choke2_State = currentSwitchState;
  
// ГЛУШИЛКА 03
{
currentSwitchState = digitalRead(Choke3_Pin);
if( currentSwitchState == LOW && Choke3_State == HIGH ) // push
MIDI_TX(144,  choke3, 127);
if( currentSwitchState == HIGH && Choke3_State == LOW ) // release
MIDI_TX(128, choke3, 127);
Choke3_State = currentSwitchState;
  
// ГЛУШИЛКА РАЙДА
{
currentSwitchState = digitalRead(ChokeRide_Pin);
if( currentSwitchState == LOW && ChokeRide_State == HIGH ) // push
MIDI_TX(144,  chokeRide, 127);
if( currentSwitchState == HIGH && ChokeRide_State == LOW ) // release
MIDI_TX(128, chokeRide, 127);
ChokeRide_State = currentSwitchState;
  
// AUX 1
{    
currentSwitchState = digitalRead(Aux1_Pin);
if( currentSwitchState == LOW && Aux1_State == HIGH ) // push
MIDI_TX(144,  Aux1, 127);
if( currentSwitchState == HIGH && Aux1_State == LOW ) // release
MIDI_TX(128, Aux1, 127);
Aux1_State = currentSwitchState;
  
// AUX 2
{    
currentSwitchState = digitalRead(Aux2_Pin);
if( currentSwitchState == LOW && Aux2_State == HIGH ) // push
MIDI_TX(144,  Aux2, 127);
if( currentSwitchState == HIGH && Aux2_State == LOW ) // release
MIDI_TX(128, Aux2, 127);
Aux2_State = currentSwitchState;

// AUX 3
{    
currentSwitchState = digitalRead(Aux3_Pin);
if( currentSwitchState == LOW && Aux3_State == HIGH ) // push
MIDI_TX(144,  Aux3, 127);
if( currentSwitchState == HIGH && Aux3_State == LOW ) // release
MIDI_TX(128, Aux3, 127);
Aux3_State = currentSwitchState;

// AUX 4
{    
currentSwitchState = digitalRead(Aux4_Pin);
if( currentSwitchState == LOW && Aux4_State == HIGH ) // push
MIDI_TX(144,  Aux4, 127);
if( currentSwitchState == HIGH && Aux4_State == LOW ) // release
MIDI_TX(128, Aux4, 127);
Aux4_State = currentSwitchState;

// AUX 5
{    
currentSwitchState = digitalRead(Aux5_Pin);
if( currentSwitchState == LOW && Aux5_State == HIGH ) // push
MIDI_TX(144,  Aux5, 127);
if( currentSwitchState == HIGH && Aux5_State == LOW ) // release
MIDI_TX(128, Aux5, 127);
Aux5_State = currentSwitchState;
  
// AUX 6
{    
currentSwitchState = digitalRead(Aux6_Pin);
if( currentSwitchState == LOW && Aux6_State == HIGH ) // push
MIDI_TX(144,  Aux6, 127);
if( currentSwitchState == HIGH && Aux6_State == LOW ) // release
MIDI_TX(128, Aux6, 127);
Aux6_State = currentSwitchState;
  
// AUX 7
{    
currentSwitchState = digitalRead(Aux7_Pin);
if( currentSwitchState == LOW && Aux7_State == HIGH ) // push
MIDI_TX(144,  Aux7, 127);
if( currentSwitchState == HIGH && Aux7_State == LOW ) // release
MIDI_TX(128, Aux7, 127);
Aux7_State = currentSwitchState;

//------------------------------------- АНАЛОГОВЫЕ ВХОДЫ -----------------------------------------------//

	for(pin = 0; pin < READPIN; pin++)
	{
		readSensor = analogRead(pin);

                if((SensorType[pin] != 128) && (readSensor > thresholdMin[pin]) && ((currentMillis[pin] - previousMillis[pin]) <= sensorMasktime[pin]))
		{
			currentMillis[pin] = millis();
			
			if (readNumber[pin] < sensorScantime[pin])
			{
				if (readSensor > sensorReads[pin])
				{
					sensorReads[pin] = readSensor;
					
				}
				readNumber[pin]++;
			} else if (playNote[pin] == true)
			{
				
				playNote[pin] = false;
				
				int velocity = normalizeSensor(sensorReads[pin], pin);
				MIDI_TX(SensorType[pin], PadNote[pin], velocity);
                                digitalWrite(led, HIGH);
                                digitalWrite(led, LOW);
			}
				
		} else if ((currentMillis[pin] - previousMillis[pin]) > sensorMasktime[pin])
		{
			playNote[pin] = true;
			readNumber[pin] = 0;
			sensorReads[pin] = 0;
			previousMillis[pin] = currentMillis[pin];
		}
	}

// =======================================================================================================================================================//
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }

 

b707
Offline
Зарегистрирован: 26.05.2017

Вы этот код откуда-то списали, даже не разобравшись, от какого он контроллера. Судя по номерам пинов в Сетапе (см ниже) - на Нано и Уно он работать не будет. Может это Мега, а может и вовсе не ардуина...

vitallismetal пишет:

// Доп цифровые входы //

#define Aux1 47
#define Aux2 47
#define Aux3 47
#define Aux4 47
#define Aux5 47
#define Aux6 47
#define Aux7 47																	
																														
// !!! ДАЛЕЕ ИДЕТ КОД ПРОГРАММЫ, ИЗМЕНЕНИЯ ВНОСИТЬ ТОЛЬКО ОПЫТНЫМ ПОЛЬЗОВАТЕЛЯМ !!! //

//Определение цифровых пинов глушилок

#define Choke1_Pin 51 
#define Choke2_Pin 49
#define Choke3_Pin 47
#define ChokeRide_Pin 53 

//Определение доп. цифровых пинов

#define Aux1_Pin 33
#define Aux2_Pin 35
#define Aux3_Pin 37
#define Aux4_Pin 39
#define Aux5_Pin 41
#define Aux6_Pin 43
#define Aux7_Pin 45


 

b707
Offline
Зарегистрирован: 26.05.2017

Интересно, как вы вообще могли что-то подключить в ардуине при таких номерах пинов?! Или просто тыкали провода в первый попавшийся контакт?

vitallismetal
Offline
Зарегистрирован: 23.03.2018

вы правы скетч от мега. на нано я его просто залил и нчего не подключал а на уно все ноты подряд шли. вот это код от нано но результат одинаковый

/*
 * Copyright (c) 2015 Evan Kale
 * Email: EvanKale91@gmail.com
 * Website: www.ISeeDeadPixel.com
 *          www.evankale.blogspot.ca
 *
 * This file is part of ArduinoMidiDrums.
 *
 * ArduinoMidiDrums is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

//Piezo defines
#define NUM_PIEZOS 6
#define SNARE_THRESHOLD 200    //anything < TRIGGER_THRESHOLD is treated as 0
#define LTOM_THRESHOLD 200
#define RTOM_THRESHOLD 200
#define LCYM_THRESHOLD 40
#define RCYM_THRESHOLD 60
#define KICK_THRESHOLD 500
#define START_SLOT 0     //first analog slot of piezos

//MIDI note defines for each trigger
#define SNARE_NOTE 70
#define LTOM_NOTE 71
#define RTOM_NOTE 72
#define LCYM_NOTE 73
#define RCYM_NOTE 74
#define KICK_NOTE 75

//MIDI defines
#define NOTE_ON_CMD 0x90
#define NOTE_OFF_CMD 0x80
#define MAX_MIDI_VELOCITY 127

//MIDI baud rate
#define SERIAL_RATE 31250

//Program defines
//ALL TIME MEASURED IN MILLISECONDS
#define SIGNAL_BUFFER_SIZE 100
#define PEAK_BUFFER_SIZE 30
#define MAX_TIME_BETWEEN_PEAKS 20
#define MIN_TIME_BETWEEN_NOTES 50

//map that holds the mux slots of the piezos
unsigned short slotMap[NUM_PIEZOS];

//map that holds the respective note to each piezo
unsigned short noteMap[NUM_PIEZOS];

//map that holds the respective threshold to each piezo
unsigned short thresholdMap[NUM_PIEZOS];

//Ring buffers to store analog signal and peaks
short currentSignalIndex[NUM_PIEZOS];
short currentPeakIndex[NUM_PIEZOS];
unsigned short signalBuffer[NUM_PIEZOS][SIGNAL_BUFFER_SIZE];
unsigned short peakBuffer[NUM_PIEZOS][PEAK_BUFFER_SIZE];

boolean noteReady[NUM_PIEZOS];
unsigned short noteReadyVelocity[NUM_PIEZOS];
boolean isLastPeakZeroed[NUM_PIEZOS];

unsigned long lastPeakTime[NUM_PIEZOS];
unsigned long lastNoteTime[NUM_PIEZOS];

void setup()
{
  Serial.begin(SERIAL_RATE);
  
  //initialize globals
  for(short i=0; i<NUM_PIEZOS; ++i)
  {
    currentSignalIndex[i] = 0;
    currentPeakIndex[i] = 0;
    memset(signalBuffer[i],0,sizeof(signalBuffer[i]));
    memset(peakBuffer[i],0,sizeof(peakBuffer[i]));
    noteReady[i] = false;
    noteReadyVelocity[i] = 0;
    isLastPeakZeroed[i] = true;
    lastPeakTime[i] = 0;
    lastNoteTime[i] = 0;    
    slotMap[i] = START_SLOT + i;
  }
  
  thresholdMap[0] = KICK_THRESHOLD;
  thresholdMap[1] = RTOM_THRESHOLD;
  thresholdMap[2] = RCYM_THRESHOLD;
  thresholdMap[3] = LCYM_THRESHOLD;
  thresholdMap[4] = SNARE_THRESHOLD;
  thresholdMap[5] = LTOM_THRESHOLD;  
  
  noteMap[0] = KICK_NOTE;
  noteMap[1] = RTOM_NOTE;
  noteMap[2] = RCYM_NOTE;
  noteMap[3] = LCYM_NOTE;
  noteMap[4] = SNARE_NOTE;
  noteMap[5] = LTOM_NOTE;  
}

void loop()
{
  unsigned long currentTime = millis();
  
  for(short i=0; i<NUM_PIEZOS; ++i)
  {
    //get a new signal from analog read
    unsigned short newSignal = analogRead(slotMap[i]);
    signalBuffer[i][currentSignalIndex[i]] = newSignal;
    
    //if new signal is 0
    if(newSignal < thresholdMap[i])
    {
      if(!isLastPeakZeroed[i] && (currentTime - lastPeakTime[i]) > MAX_TIME_BETWEEN_PEAKS)
      {
        recordNewPeak(i,0);
      }
      else
      {
        //get previous signal
        short prevSignalIndex = currentSignalIndex[i]-1;
        if(prevSignalIndex < 0) prevSignalIndex = SIGNAL_BUFFER_SIZE-1;        
        unsigned short prevSignal = signalBuffer[i][prevSignalIndex];
        
        unsigned short newPeak = 0;
        
        //find the wave peak if previous signal was not 0 by going
        //through previous signal values until another 0 is reached
        while(prevSignal >= thresholdMap[i])
        {
          if(signalBuffer[i][prevSignalIndex] > newPeak)
          {
            newPeak = signalBuffer[i][prevSignalIndex];        
          }
          
          //decrement previous signal index, and get previous signal
          prevSignalIndex--;
          if(prevSignalIndex < 0) prevSignalIndex = SIGNAL_BUFFER_SIZE-1;
          prevSignal = signalBuffer[i][prevSignalIndex];
        }
        
        if(newPeak > 0)
        {
          recordNewPeak(i, newPeak);
        }
      }
  
    }
        
    currentSignalIndex[i]++;
    if(currentSignalIndex[i] == SIGNAL_BUFFER_SIZE) currentSignalIndex[i] = 0;
  }
}

void recordNewPeak(short slot, short newPeak)
{
  isLastPeakZeroed[slot] = (newPeak == 0);
  
  unsigned long currentTime = millis();
  lastPeakTime[slot] = currentTime;
  
  //new peak recorded (newPeak)
  peakBuffer[slot][currentPeakIndex[slot]] = newPeak;
  
  //1 of 3 cases can happen:
  // 1) note ready - if new peak >= previous peak
  // 2) note fire - if new peak < previous peak and previous peak was a note ready
  // 3) no note - if new peak < previous peak and previous peak was NOT note ready
  
  //get previous peak
  short prevPeakIndex = currentPeakIndex[slot]-1;
  if(prevPeakIndex < 0) prevPeakIndex = PEAK_BUFFER_SIZE-1;        
  unsigned short prevPeak = peakBuffer[slot][prevPeakIndex];
   
  if(newPeak > prevPeak && (currentTime - lastNoteTime[slot])>MIN_TIME_BETWEEN_NOTES)
  {
    noteReady[slot] = true;
    if(newPeak > noteReadyVelocity[slot])
      noteReadyVelocity[slot] = newPeak;
  }
  else if(newPeak < prevPeak && noteReady[slot])
  {
    noteFire(noteMap[slot], noteReadyVelocity[slot]);
    noteReady[slot] = false;
    noteReadyVelocity[slot] = 0;
    lastNoteTime[slot] = currentTime;
  }
  
  currentPeakIndex[slot]++;
  if(currentPeakIndex[slot] == PEAK_BUFFER_SIZE) currentPeakIndex[slot] = 0;  
}

void noteFire(unsigned short note, unsigned short velocity)
{
  if(velocity > MAX_MIDI_VELOCITY)
    velocity = MAX_MIDI_VELOCITY;
  
  midiNoteOn(note, velocity);
  midiNoteOff(note, velocity);
}

void midiNoteOn(byte note, byte midiVelocity)
{
  Serial.write(NOTE_ON_CMD);
  Serial.write(note);
  Serial.write(midiVelocity);
}

void midiNoteOff(byte note, byte midiVelocity)
{
  Serial.write(NOTE_OFF_CMD);
  Serial.write(note);
  Serial.write(midiVelocity);
}

 

b707
Offline
Зарегистрирован: 26.05.2017

у вас используются аналоговые порты без подтяжки - если к ним ничего не подключено,  с них постоянно будет идти мусор. Это совершенно нормальное поведение, китайскость ардуины тут не причем, на оригинале будет то же самое.

Сконфигурируйте порты с внутренней подтяжкой либо подключите к ним внешнюю подтяжку резистором 20-50к к земле или к питанию.

vitallismetal
Offline
Зарегистрирован: 23.03.2018

тоесть подключить пьезу паралельно 1мом? я уже делал на уно. Ничего не происходит. Может увеличить сопротивление резистора?

 

vitallismetal
Offline
Зарегистрирован: 23.03.2018

вот как я подключил пьезы

b707
Offline
Зарегистрирован: 26.05.2017

vitallismetal пишет:

тоесть подключить пьезу паралельно 1мом? я уже делал на уно. Ничего не происходит. Может увеличить сопротивление резистора?

 

скорее уменьшить

vitallismetal
Offline
Зарегистрирован: 23.03.2018

понял попробую отпишусь спасибо огромное за помощь

b707
Offline
Зарегистрирован: 26.05.2017

vitallismetal пишет:

понял попробую отпишусь спасибо огромное за помощь

сорри, перепутал пьезы с кнопками. Попробуйте в своем варианте уменьшить резистор до 50к

vitallismetal
Offline
Зарегистрирован: 23.03.2018

хорошо спасибо

vitallismetal
Offline
Зарегистрирован: 23.03.2018

проблема была в том что нужно выставить в прошивке столько пьез сколько подлючаем и тогда не будет шумов. Долго что-то я с этим морочился. Спасибо большое может кому-то пригодится мой опыт. Еще при подключении, чтобы ноты не залипали нужно выставить в vst программе долько входное сообщение с миди а на выходе ничего не ставим. Все гладко идет. Еще раз спасибо.Это мой первый проект на ардуино. До этого ремонтировал усилки блоки питания и так по мелочам.....да кстати использую hairless midi которая посылает сообщения на loop be это виртуальный миди интерфеис а уже в kontakt5 настраиваем входное подключение с loop be и миди канал. Для наглядности происходящего использовал midi ox она показывает все и ноты и канал миди сообщении. 

 

vitallismetal
Offline
Зарегистрирован: 23.03.2018

Вышла новая каша. Вместо одной ноты проигрываются две . Есть даже ноты которые не задействованы в коде. Что может быть?