請教 Adruino , 點樣interrupt一個looping 既program?

想請教一下各位, 如果我想寫一個program, 隔一秒著一燈隔幾秒著一燈熄一燈等等.........用最基本既pinMode(), digitalWrite(), delay() 就寫到, 但如果我想係成個program, 行緊時keep 住去monitor 有無力一個input, 當有就出另一個output 去interrupt 個program應該點寫尼?

無理由我每一句program 都加插一句, if 去check住嘛?
而且, 譬如我係delay緊1000ms既途中, 可能500ms 就有呢個interrupt signal, 咁就算我加好多句if 都要數完個一行delay時間先識出呢個interrupt output?

請多多指教.

TOP

本帖最後由 invincible 於 2016-5-19 14:52 編輯

回覆 2# chiksum


    thanks 師兄, 睇過下教學試左得了,

TOP

會唔會掉番轉,用timer interrupt 著/熄LED
主loop睇input會好D?

TOP

會唔會掉番轉,用timer interrupt 著/熄LED
主loop睇input會好D?
eh 發表於 2016-5-19 16:00


我覺得全部都用interrupt做會更好

TOP

我覺得全部都用interrupt做會更好
newbox 發表於 2016-5-19 16:45



    剛剛都試緊緊呀, 想兩兩interrupt, 但唔知乜問題, 唔得.

有無師兄有參考program 可以睇下呀? THANKS

另外, 其實我想一出個interrupt時, 個main program 自動stop, 我試過就咁set 一個interrupt, 只可以interrupt有interrupt 自己行, 個main有自己個main繼續行.....

TOP

剛剛都試緊緊呀, 想兩兩interrupt, 但唔知乜問題, 唔得.

有無師兄有參考program 可以睇下呀? THANK ...
invincible 發表於 2016-5-20 09:35


一開始setup 好timer,external interrupt ,然後ISR做你閃燈同input
唔明咩叫interrupt有interrupt 自己行, 個main有自己個main繼續行,你有冇code睇下

TOP

一開始setup 好timer,external interrupt ,然後ISR做你閃燈同input
唔明咩叫interrupt有interrupt 自己行 ...
newbox 發表於 2016-5-20 17:15



有呀, 不過我都係抄人再改小小野, 唔該師兄指教一下.

const int buttonPin = 2;     // the number of the pushbutton pin
const int ledPin =  13;      // the number of the LED pin
int Red = 11;
int Yellow = 12;
int Green = 10;

// variables will change:
volatile int buttonState = 0;         // variable for reading the pushbutton status

void setup() {
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT_PULLUP);
  // Attach an interrupt to the ISR vector
  attachInterrupt(0, pin_ISR, CHANGE);

  pinMode(Red, OUTPUT);
  pinMode(Yellow, OUTPUT);
  pinMode(Green, OUTPUT);
}

void loop() {
  digitalWrite(Red, HIGH);//    Status: Red
  delay(1000);           
  digitalWrite(Yellow, HIGH);// Status: Red + Yellow
  delay(1000);           
  digitalWrite(Red, LOW);//     Status: Green
  digitalWrite(Yellow, LOW);
  digitalWrite(Green, HIGH);
  delay(1000);           
  digitalWrite(10, LOW);  //    Status: Yellow
  digitalWrite(12, HIGH);
  delay(1000);           
  digitalWrite(12, LOW);  //    Status: Red
  digitalWrite(11, HIGH);
}

void pin_ISR() {
  buttonState = !digitalRead(buttonPin);
  digitalWrite(ledPin, buttonState);
}

TOP

本帖最後由 newbox 於 2016-5-23 14:32 編輯
有呀, 不過我都係抄人再改小小野, 唔該師兄指教一下.

const int buttonPin = 2;     // the number of  ...
invincible 發表於 2016-5-23 11:36


你係想禁住個制果時pin13 led就着燈,放手就熄燈?

如果你想每次禁制之後改pin 13 led status既話
attachInterrupt(0, pin_ISR, CHANGE);改做attachInterrupt(0, pin_ISR, FALLING);
buttonState = !digitalRead(buttonPin);改做buttonState = !buttonState;

TOP

你係想禁住個制果時pin13 led就着燈,放手就熄燈?

如果你想每次禁制之後改pin 13 led status既話
attachI ...
newbox 發表於 2016-5-23 14:23


我想禁制時, 會有pin13著燈,
另外最重要, 一禁制, 個main program 個紅黃綠燈唔會再數,唔會再行。

TOP