직접 포트 조작을 사용하여 다음 코드를 하나로 변환하는 방법
Aug 19 2020
다음은 MIDI 전송을 위해 키보드를 스캔하는 프로그램입니다. 현재 코드는 잘 작동하지만 더 빠를 수 있습니다. for 루프 내에서 직접 포트 조작을 사용하는 방법을 알아야합니다.
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);
}
}
답변
1 SaeedMirshams Aug 19 2020 at 18:27
풀링 핀 대신 인터럽트를 사용하는 것이 좋습니다. 그러나 이것은 arduino 컨트롤러와 관련이 있습니다. arduino 코어 컨트롤러는 무엇입니까? 인터럽트에 사용할 수있는 9 개의 핀 (2, 3, 9, 10, 11, 13, 15, A5, A7)이있는 "Nano 33 IoT"를 선호합니다. 이 페이지를 사용할 수 있습니다.https://playground.arduino.cc/Main/PinChangeInterrupt/