ฉันใช้Arduino Unoแล้วตั้งค่าให้ทำงานกับการขัดจังหวะบนพินดิจิตอล 2, 3, 4 และ 5 ตามคำอธิบายที่1 ที่ฉันพบ
void setup()
มีรหัสต่อไปนี้เพื่อตั้งค่าอินเตอร์รัปต์
//Endable Interrupts for PCIE2 Arduino Pins (D0-7)
PCICR |= (1<<PCIE2);
//Setup pins 2,3,4,5
PCMSK2 |= (1<<PCINT18);
PCMSK2 |= (1<<PCINT19);
PCMSK2 |= (1<<PCINT20);
PCMSK2 |= (1<<PCINT21);
//Trigger Interrupt on rising edge
MCUCR = (1<<ISC01) | (1<<ISC01);
และตอนนี้ฟังก์ชั่น ISR (PCINT2_vect) จะถูกเรียกใช้ในการขัดจังหวะทุกครั้ง มันใช้งานได้เหมือนมีเสน่ห์ คำถามของฉันคืออะไรวิธีที่ดีที่สุด / เร็วที่สุดในการค้นหาว่าพินใดถูกเรียกใช้
ฉันพบบางอย่างในRe: ดีกว่าที่จะใช้ ISR (PCINT2_vect) หรือแนบติดขัดบนพิน 2, 3? แต่ฉันไม่เข้าใจรหัสและมันไม่ทำงานนอกกรอบ แต่มันดูน่าประทับใจ ...
ทางออกคืออะไร?
[2] http://arduino.cc/forum/index.php/topic,72496.15.html#lastPost
แก้ไข:
ในขณะนี้ฉันกำลังอ่านสถานะพินจากการลงทะเบียนพิน:
if (PIND & 0b00000100)
Serial.println( "PIN 2" );
if (PIND & 0b00001000)
Serial.println( "PIN 3" );
if (PIND & 0b00010000)
Serial.println( "PIN 4" );
if (PIND & 0b00100000)
Serial.println( "PIN 5" );
ในท้ายที่สุดฉันต้องการนับการขัดจังหวะบนหมุด แต่ฉันจะมั่นใจได้อย่างไรว่าไม่มีการนับสองครั้ง?