help

Arxsab
Offline
Зарегистрирован: 17.02.2014

проблема... взял код у этого человека https://www.youtube.com/watch?v=LW8UZjsuBS0.... мне надо было добавить 3 кнопки для управления( 1-я для мигания светодиода при ударе(чтобы красиво было), 2-я для вкл выкл чквствительности, 3-я для регулирования чувствительности). проблема в том что когда в loop вставил функцию Keys(), то датчики перестали работать.... кнопки при этом работают(загорается светодиод на 13пине). собственно вопрос почему??? непонимаю((


unsigned char PadNote[8] = {47,18,32,38,43,13,45,17};        
unsigned char status;
int PadCutOff[8] = {100,100,100,100,100,100,100,100};   
int MaxPlayTime[8] = {25,25,25,25,25,25,25,25};        
#define  midichannel 0;                 
boolean activePad[8] = {0,0,0,0,0,0,0,0};      
int PinPlayTime[8] = {0,0,0,0,0,0,0,0};             
boolean VelocityFlag  = true;            
int pin = 0;
int hitavg = 0;
int pad = 0;
int r0 = 0;
int r1 = 0;
int r2 = 0;
int count = 0;
int multiplex1[8];

//___LED_____________
#define ledPin 13
#define led 2
boolean ledOn = LOW;

//___________________
//__________KEY______
boolean lastBut[3] ={1,1,1};
boolean curBut[3] ={1,1,1};
int kpin;
int vel;
int f=8;
//___________________

//*******************************************************************************************************************
// Setup			
//*******************************************************************************************************************

void setup() 
{
  
  pinMode(ledPin, OUTPUT);
  pinMode(led, OUTPUT);
  pinMode(4, INPUT);
  pinMode(5, INPUT);
  pinMode(6, INPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  Serial.begin(115200);                                  // connect to the serial port 115200
}

//*******************************************************************************************************************
// Main Program			
//*******************************************************************************************************************

boolean deb(boolean last)
{ boolean cur;
  cur = digitalRead(kpin);
  if (last != cur)
   {
    delay(20);
    cur = digitalRead(kpin);
   }
  return cur;
}	  

void Keys(){
  digitalWrite(led, LOW);
  for ( kpin=4 ; kpin<7; kpin++)
{
  curBut[kpin] = deb(lastBut[kpin]);
  if (lastBut[kpin] == LOW && curBut[kpin] == HIGH)
                {                 
                digitalWrite(ledPin, HIGH);
                delay(10);
                digitalWrite(ledPin, LOW); 
                
                if (curBut[4] == HIGH) {ledOn =!ledOn;} 
                
                if (curBut[5] == HIGH){VelocityFlag = !VelocityFlag;}   
                 
                if (curBut[6] == HIGH){f=f++; if (f>8) f =5;}              
                }
                lastBut[kpin] = curBut[kpin];  
   
  if (ledOn == true)
 { 
  for(int i=0; i <= 7; i++)
  {
   vel =multiplex1[i];
    if (vel > PadCutOff[i]){                                 
                   digitalWrite(led, HIGH);                                                                            
                             }
   }
  }  
 } 
}
void loop()
{ 
  readSensors(0);  
  checkSensors(0);
  Keys();
  
}
void readSensors (int analogPin) {
  for(count=0; count <= 7; count++)
  {
    r2 = bitRead(count,0);
    r1 = bitRead(count,1);
    r0 = bitRead(count,2);
    digitalWrite(7, r0);
    digitalWrite(8, r1);
    digitalWrite(9, r2);
    multiplex1[count] = analogRead(0);
  }
}
  
void checkSensors (int analogPin) {
  for(int pin=0; pin <=7; pin++) {
    hitavg = multiplex1[pin];
    pad=pin;
      
    if((hitavg > PadCutOff[pad])) {   
      if((activePad[pad] == false)) {
        if(VelocityFlag == true) {
          hitavg = (hitavg / f) -1;
        }
        else {
          hitavg = 127;
        }
        MIDI_TX(144,PadNote[pad],hitavg);
        PinPlayTime[pad] = 0;
        activePad[pad] = true;
      }
      else {
        PinPlayTime[pad] = PinPlayTime[pad] + 1;
      }
    }
    else if((activePad[pad] == true)) {
      PinPlayTime[pad] = PinPlayTime[pad] + 1;
      if(PinPlayTime[pad] > MaxPlayTime[pad]) {
       activePad[pad] = false;
       MIDI_TX(128,PadNote[pad],0);
      }
    }    
  }   
}

void MIDI_TX(unsigned char MESSAGE, unsigned char PITCH, unsigned char VELOCITY) {
  status = MESSAGE + midichannel;
  Serial.write(status);
  Serial.write(PITCH);
  Serial.write(VELOCITY);
}
   

 

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

Уберите функцию, если с ней не работает: решение же очевидное...

Arxsab
Offline
Зарегистрирован: 17.02.2014

эт понятно))) но мне хотелось бы поставить кнопки)

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

Arxsab пишет:

эт понятно))) но мне хотелось бы поставить кнопки)

Ну так Вы определитесь с хотелками, глядишь, и название темы нормальное появится... :) Скорее всего - где-то скобки не закрыты или переменные затираете, но в этом, честно говоря, не хочется разбираться. Комментируйте циклы функциональными частями и смотрите - когда оно заработает...