Tôi sử dụng Arduino Uno và đã thiết lập nó để hoạt động với các ngắt trên các chân kỹ thuật số 2, 3, 4 và 5 theo giải thích 1 tôi tìm thấy.
void setup()
chứa mã sau đây để thiết lập các ngắt.
//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);
Và bây giờ, chức năng ISR (PCINT2_vect) được kích hoạt trên mỗi ngắt. Điều đó làm việc như một nét duyên dáng. Câu hỏi của tôi là, cách tốt nhất / nhanh nhất để tìm ra, pin nào đã được kích hoạt?
Tôi đã tìm thấy một cái gì đó trong Re: Tốt hơn là sử dụng ISR (PCINT2_vect) hoặc Đính kèm trên các chân 2, 3? , nhưng tôi không hiểu mã và nó không hoạt động. Nhưng nó có vẻ ấn tượng ...
Giải pháp là gì?
[2] http://arduino.cc/forum/index.php/topic,72496.15.html#lastPost
Biên tập:
Hiện tại, tôi đang đọc trạng thái pin từ thanh ghi pin đầu vào:
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" );
Cuối cùng, tôi muốn đếm các ngắt trên các chân. Nhưng làm thế nào tôi có thể đảm bảo, rằng không có hai lần được tính?