![]() |
| Serial Event |
| //使用Serial Monitor 控制LED(D6) 0,1 #define led 6 volatile int inB; void serialEvent() { inB = Serial.read(); } void setup() { Serial.begin(115200); pinMode(led,OUTPUT) ; digitalWrite(led,LOW); } void loop() { if (inB=='1') digitalWrite(led,HIGH);//LED ON if (inB=='0') digitalWrite(led,LOW); //LED OFF } // ref |
| External Interrupt |
| Interrupt No. | Interrupt Name | Arduino pin |
| 0 | INT0 | D2 |
| 1 | INT1 | D3 |
| digitalPinToInterrupt(2)--->0 digitalPinToInterrupt(3)--->1 |
| void setup() { Serial.begin(9600); } void loop() { Serial.print("D2's interrupt no.="); Serial.println(digitalPinToInterrupt(2)); Serial.print("D3's interrupt no.="); Serial.println(digitalPinToInterrupt(3)); Serial.print("D4's interrupt no.="); Serial.println(digitalPinToInterrupt(4)); Serial.print("D5's interrupt no.="); Serial.println(digitalPinToInterrupt(5)); delay(2000); } ![]() |
| attachInterrupt(interupt No., ISR, mode); attachInterrupt(digitalPinToInterrupt(pin), ISR, mode); pin: D2,D3 ISR: the ISR to call when the interrupt occurs; this function must take no parameters and return nothing. This function is sometimes referred to as an interrupt service routine. mode: defines when the interrupt should be triggered. Four constants are predefined as valid values: LOW to trigger the interrupt whenever the pin is low, CHANGE to trigger the interrupt whenever the pin changes value RISING to trigger when the pin goes from low to high, FALLING for when the pin goes from high to low. |
| #define
ledPin 13 #define interruptPin 2 volatile int state = LOW; void setup() { pinMode(ledPin, OUTPUT); pinMode(interruptPin, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(interruptPin), blink, CHANGE); } void loop() { digitalWrite(ledPin, state); } void blink() { state = !state; } |
| #define LED1 7 #define LED2 8 #define SW1 5 #define SW2 6 void setup() { pinMode(LED1, OUTPUT); pinMode(LED1, OUTPUT); pinMode(SW1,INPUT_PULLUP); pinMode(SW2,INPUT_PULLUP); } void loop() { if(digitalRead(SW1)==LOW) digitalWrite(LED1,HIGH); delay(20000); digitalWrite(LED1,LOW); if(digitalRead(SW2)==LOW) digitalWrite(LED2,HIGH); delay(20000); digitalWrite(LED2,LOW); } //是否可全亮? |
| #define LED1 7 #define LED2 8 #define inPin 2 void setup() { pinMode(LED1, OUTPUT); pinMode(LED2, OUTPUT); pinMode(inPin, INPUT_PULLUP); } void loop() { digitalWrite(LED1,HIGH); delay(2000); digitalWrite(LED1,LOW); delay(2000); if(digitalRead(inPin)==HIGH) digitalWrite(LED2,HIGH); else digitalWrite(LED2,LOW); } //LED2 何時切換? |
| #define LED1 7 #define LED2 8 #define inPin 2 volatile int state = LOW; void setup() { pinMode(LED1, OUTPUT); pinMode(LED2, OUTPUT); pinMode(inPin, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(inPin), blink, CHANGE); } void loop() { digitalWrite(LED1,HIGH); delay(2000); digitalWrite(LED1,LOW); delay(2000); } void blink() { state = !state; digitalWrite(LED2, state); } |
| detachInterrupt() Turns off the given interrupt. |
| Bounce (彈跳) 所謂的 Bounce 是指我們在按下電源開關時,電壓不會從 0 伏直接升到 Vcc 伏。而是在 0 及 Vcc 間震盪好幾次,最後才在 Vcc 端穩定下來。 一個電子產品若有彈跳現象的話,最常見到的「症狀」是按下一個開關,結果數字跳好幾下。 ![]() |
![]() |
| debounce |
![]() |
![]() Schmitt trigger ![]() |