學院 | 班級 | 學號 | |||
姓名 | 日期 | 成績 | |||
實驗題目 | 按鍵和中斷 | ||||
實驗目的 | 實現閃燈功能轉換 | ||||
硬件原理 | 無 | ||||
關鍵代碼及注釋 | /* ??Button ?Turns on and off a light emitting diode(LED) connected to digital ? ?pin 13, when pressing a pushbutton attached to pin 2. ?The circuit: ?* LED attached from pin 13 to ground ?* pushbutton attached to pin 2 from +3.3V ?* 10K resistor attached to pin 2 from ground ?* Note: on most Arduinos there is already an LED on the board ?attached to pin 13. ?created 2005 ?by DojoDave <http://www.0j0.org> ?modified 30 Aug 2011 ?by Tom Igoe ?modified Apr 27 2012 ?by Robert Wessels ?This example code is in the public domain. ?http://www.arduino.cc/en/Tutorial/Button ?*/ // constants won't change. They're used here to // set pin numbers: const int buttonPin = PUSH2; ????// the number of the pushbutton pin const int ledPin1 = ?GREEN_LED; ?????// the number of the LED pin const int ledPin2 = ?YELLOW_LED; const int ledPin3 = ?RED_LED; int ledState = LOW; int ledState1 = LOW; int ledState2 = LOW; int ledState3 = LOW; volatile bool state = HIGH; int count = 0; // variables will change: int buttonState = 0; ????????// variable for reading the pushbutton status long previousMillis = 0; ???????// will store last time LED was updated long term = 0; // the follow variables is a long because the time, measured in miliseconds, // will quickly become a bigger number than can be stored in an int. long interval = 1000; ? void setup() { ??// initialize the LED pin as an output: ??pinMode(ledPin1, OUTPUT); ????? ??pinMode(ledPin2, OUTPUT); ??pinMode(ledPin3, OUTPUT); ??//digitalWrite(ledPin,state); ??pinMode(buttonPin,INPUT_PULLUP); ??attachInterrupt (buttonPin ,blink ,RISING); } void blink(){ ??state = !state; } void loop(){ ??unsigned long currentMillis = millis(); ?? ??if(state==HIGH){ ??if(currentMillis - previousMillis > interval) { ????// save the last time you blinked the LED ????previousMillis = currentMillis; ?? ????// if the LED is off turn it on and vice-versa: ????if (ledState == LOW) ??????ledState = HIGH; ????else{ ??????ledState = LOW; ?????? ??????} ????// set the LED with the ledState of the variable: ?digitalWrite(ledPin1, ledState); ?digitalWrite(ledPin2, ledState); ?digitalWrite(ledPin3, ledState); ?} } else{ ??if(currentMillis - previousMillis > interval) { ????previousMillis = currentMillis; ? ????if (ledState1 == LOW && ledState2 == LOW && ledState3 == LOW) ??????ledState1 = HIGH; ????else if(ledState1 == HIGH){ ??????ledState1 = LOW; ??????ledState2 = HIGH; ??????} ?????else if(ledState2 == HIGH){ ??????ledState2 = LOW; ??????ledState3 = HIGH; ????????????? ??????} ??????else if(ledState3 == HIGH){ ??????ledState3 = LOW; ??????ledState1 = HIGH; ????? ??????} ?digitalWrite(ledPin1, ledState1); ?digitalWrite(ledPin2, ledState2); ?digitalWrite(ledPin3, ledState3); ??} } } | ||||
實驗步驟 | 在上次作業基礎上加上了按鈕,中斷 | ||||
實驗結果 | ![]() ![]() ![]() ![]() ![]() ![]() | ||||
思考與反饋 | 無 |