help
- Войдите на сайт для отправки комментариев
Сб, 29/03/2014 - 18:06
проблема... взял код у этого человека 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);
}
Уберите функцию, если с ней не работает: решение же очевидное...
эт понятно))) но мне хотелось бы поставить кнопки)
эт понятно))) но мне хотелось бы поставить кнопки)
Ну так Вы определитесь с хотелками, глядишь, и название темы нормальное появится... :) Скорее всего - где-то скобки не закрыты или переменные затираете, но в этом, честно говоря, не хочется разбираться. Комментируйте циклы функциональными частями и смотрите - когда оно заработает...