วิธีการแปลงรหัสต่อไปนี้เป็นรหัสโดยใช้การจัดการพอร์ตโดยตรง

Aug 19 2020

ต่อไปนี้เป็นโปรแกรมสำหรับสแกนแป้นพิมพ์สำหรับการโอน MIDI ปัจจุบันโค้ดใช้งานได้ดี แต่อาจเร็วกว่านี้ ฉันต้องการทราบวิธีใช้การจัดการพอร์ตโดยตรงภายใน for loop

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 core controller? หากคุณสามารถเลือกได้ฉันชอบ "Nano 33 IoT" ซึ่งมี 9 พิน (2, 3, 9, 10, 11, 13, 15, A5, A7) สำหรับการขัดจังหวะ หน้านี้อาจใช้งานได้:https://playground.arduino.cc/Main/PinChangeInterrupt/