doğrudan bağlantı noktası manipülasyonu kullanılarak aşağıdaki kod nasıl bir kod haline getirilir
Aug 19 2020
Aşağıda, MIDI aktarımı için bir klavye taramaya yönelik program verilmiştir. Şu anda kod iyi çalışıyor, ancak daha hızlı olabilir. For döngüsü içinde doğrudan bağlantı noktası manipülasyonunu nasıl kullanacağımı bilmem gerekiyor.
boolean keypressed[6][6]; //for storing key states
int midinote[6][6] ={ 60 ,61 ,62 ,63 ,64 ,65
,66 ,67 ,68 ,69 ,70 ,71
,72 ,73 ,74 ,75 ,76 ,77
,78 ,79 ,80 ,81 ,82 ,83
,84 ,85 ,86 ,87 ,88 ,89
,90 ,91 ,92 ,93 ,94 ,95 }; //code for various midi notes C3 to C6
void setup() {
Serial.begin(38400);
for(int i=0; i<6; i++){
pinMode(i+2,OUTPUT);
digitalWrite(i+8,HIGH);
}
for(int i=0; i<6; i++){
pinMode(i+8,INPUT);
digitalWrite(i+8,HIGH);
}
for(int i=0; i<6; i++){
for(int j=0; j<6; j++){
keypressed[i][j] = false;
}
}
}
void loop() {
for(int i=0; i<6; i++){
digitalWrite(i+2, LOW);
for(int j =0; j<6; j++){
if ((digitalRead(j+8) == LOW) && !keypressed[i][j]){
Serial.write(0x91);
Serial.write(midinote[i][j]);
Serial.write(127);
keypressed[i][j] = true;
}
if ((digitalRead(j+8) == HIGH) && keypressed[i][j]){
Serial.write(0x91);
Serial.write(midinote[i][j]);
Serial.write(0);
keypressed[i][j] =false;
}
}
digitalWrite(i+2, HIGH);
}
}
Yanıtlar
1 SaeedMirshams Aug 19 2020 at 18:27
Pinleri havuzlamak yerine kesintileri kullanmak daha iyidir. ancak bu, arduino denetleyicinizle ilgilidir. arduino çekirdek denetleyicisi nedir? Kesinti için 9 pinli (2, 3, 9, 10, 11, 13, 15, A5, A7) "Nano 33 IoT" yi tercih ederim. bu sayfa kullanılabilir olabilir:https://playground.arduino.cc/Main/PinChangeInterrupt/
Gene Simmons, KISS Çizgi Romanlarının Potansiyel Olarak "İnsanlığı Yeniden Yaratabileceğini" Söyledi
Nicole Kidman, Michael Keaton ve Val Kilmer'in Batman Olarak Paylaştığı Bu 1 Çekici Özelliğe Bayıldı
Tom Girardi Dolandırıcılık Suçlamalarından Yargılanma Yetkisinin Belirlenmesi İçin Duruşmaya Katıldı
Charly Reynolds Yakın Zamandaki Vokal Kord Ameliyatını Açıkladı: 'Şarkı Söylemekte Sorun Yaşıyordum'