うっかりしてましたが、arduino.appが新しくなったので、コード修正。
色々変わったそうな。
といっても、関係があるのはBYTEキーワードがなくなったことと、Serial.write()を使うことくらいかな。
以下、MIDIコントローラーのコード。
赤い所が修正したとこ。
色々変わったそうな。
といっても、関係があるのはBYTEキーワードがなくなったことと、Serial.write()を使うことくらいかな。
以下、MIDIコントローラーのコード。
#define pushVal 0 //for push-on switches.
//#define pushVal 1 //Otherwise,use this for push -off switches.
#define nd 4 //number of digital switches.
#define msg 176 //controll change. note-on:144 note-off:128
const int inPin[nd] = {4,6,8,10}; //input pins for switches.
const int gndPin[nd] = {5,7,9,11}; //input pins' ground.
const int val1[nd] = {70,71,72,73}; //controll No or note No
int val2[nd]; //controll value or velocity
long time[nd]; //the last time each switches was toggled.
//long now;
const long debounce = 300; //debounce time. Increase if the output flickers.
//int reading;
void setup(){
for(int i=0 ; i < nd ; i++ ){
pinMode(inPin[i] , INPUT);
digitalWrite(inPin[i] , HIGH);
pinMode(gndPin[i] , OUTPUT);
digitalWrite(gndPin[i] , LOW);
time[i] = millis();
val2[i] = readPin(i);
}
Serial.begin(31250);
}
void loop(){
int reading;
long now;
for(int i = 0 ; i < nd ; i++ ){
reading = readPin(i);
if(reading != val2[i]){
now = millis();
if(now-time[i] > debounce){
val2[i] = reading;
MIDI_TX(msg , val1[i] , val2[i] );
time[i] = now;
}
}
}
}
int readPin(int i){
return digitalRead(inPin[i]) == pushVal ? 127 : 0 ;
}
void MIDI_TX(int MESSAGE, int VAL1, int VAL2)
{
Serial.write(MESSAGE);
Serial.write(VAL1);
Serial.write(VAL2);
}
コードおわり。赤い所が修正したとこ。
コメント
コメントを投稿