目前正在開發項目,使用arduino UNO和伺服電機打開帶門禁碼的門。正常操作需要使用正在工作的小鍵盤輸入訪問代碼。另一個選項需要按下一個導致中斷旋轉伺服電機的按鈕。我的問題是我的中斷只能工作一次,永遠不會再工作。另外,我怎麼把for循環在中斷功能內部延遲地旋轉伺服電機。我知道這是不可能的,但我正在調用另一個具有delayMicroseconds的函數,但所有這些都不起作用。下面是我的實現,請幫助帶伺服電機的arduino中斷
#include <Keypad.h>
#include <LiquidCrystal.h>
#include <Servo.h>
Servo servo;
const int openButtonPin = 2;
void setup() {
// put your setup code here, to run once:
servo.attach(5);
pinMode(openButtonPin, INPUT); //Pin 2 is input
attachInterrupt(0, enforceOpenAccess, HIGH); // PIN 2
}
void(* resetFunc)(void) = 0;
void loop()
{
//My other keypad implementations go here
}
void myDelay(int x) // function to cause delay in the interrupt
{
for(int i = 0; i<x; i++)
{
delayMicroseconds(1000);
}
}
void enforceOpenAccess() // ISR
{
for(int k =0; k<=180; k+=2)
{
servo.write(k); //rotate the servo
myDelay(30); //delay the rotation of the servo
}
}
上面上的Arduino UNO運行的代碼被模擬的變形和中斷按鈕是一個按鈕。請如果有其他方式實施,但具有相同的行爲,我已經描述了上述的幫助。非常感謝
爲什麼服務程序只在按下按鈕時運行一次並且從不再運行 –
在中斷處理程序中花費很長時間的工作並不好。我認爲你應該讓你的中斷處理程序引發一個標誌,'loop()'應該輪詢該標誌,並在引發標誌時執行該操作。 – MikeCAT