thuthu94 發表於 2015-5-1 14:37:38

遙控車中斷程式的疑問

用MEGA2560板

程式如下
//單純定義pin輸出,以及輸出的速度
int LmotorPin_A = 2;
int LmotorPin_AP = 3;
int LmotorPin_B = 4;
int LmotorPin_BP = 5;
int RmotorPin_A = 10;
int RmotorPin_AP = 11;
int RmotorPin_B = 12;
int RmotorPin_BP = 13;
int delayTime = 20;
int D0=22;                     // RF接收腳位 D0      
int D1=23;                     // RF接收腳位 D1
int D3=21;                     // RF接收腳位 D3,中段接腳      
int D4=20;                     // RF接收腳位 D4,中段接腳
byte i=0;


void forward() {
digitalWrite(LmotorPin_A, LOW);
digitalWrite(LmotorPin_AP,HIGH);
digitalWrite(LmotorPin_B, HIGH);
digitalWrite(LmotorPin_BP,LOW);

digitalWrite(RmotorPin_A, HIGH);
digitalWrite(RmotorPin_AP,LOW);
digitalWrite(RmotorPin_B, HIGH);
digitalWrite(RmotorPin_BP,LOW);
delay(delayTime);
digitalWrite(LmotorPin_A, LOW);
digitalWrite(LmotorPin_AP,HIGH);
digitalWrite(LmotorPin_B, LOW);
digitalWrite(LmotorPin_BP,HIGH);

digitalWrite(RmotorPin_A, HIGH);
digitalWrite(RmotorPin_AP,LOW);
digitalWrite(RmotorPin_B, LOW);
digitalWrite(RmotorPin_BP,HIGH);
delay(delayTime);
digitalWrite(LmotorPin_A, HIGH);
digitalWrite(LmotorPin_AP,LOW);
digitalWrite(LmotorPin_B, LOW);
digitalWrite(LmotorPin_BP,HIGH);

digitalWrite(RmotorPin_A, LOW);
digitalWrite(RmotorPin_AP,HIGH);
digitalWrite(RmotorPin_B, LOW);
digitalWrite(RmotorPin_BP,HIGH);
delay(delayTime);
digitalWrite(LmotorPin_A, HIGH);
digitalWrite(LmotorPin_AP,LOW);
digitalWrite(LmotorPin_B, HIGH);
digitalWrite(LmotorPin_BP,LOW);

digitalWrite(RmotorPin_A, LOW);
digitalWrite(RmotorPin_AP,HIGH);
digitalWrite(RmotorPin_B, HIGH);
digitalWrite(RmotorPin_BP,LOW);
delay(delayTime);
}

void backward() {
digitalWrite(LmotorPin_A, HIGH);
digitalWrite(LmotorPin_AP,LOW);
digitalWrite(LmotorPin_B, HIGH);
digitalWrite(LmotorPin_BP,LOW);

digitalWrite(RmotorPin_A, LOW);
digitalWrite(RmotorPin_AP,HIGH);
digitalWrite(RmotorPin_B, HIGH);
digitalWrite(RmotorPin_BP,LOW);
delay(delayTime);
digitalWrite(LmotorPin_A, HIGH);
digitalWrite(LmotorPin_AP,LOW);
digitalWrite(LmotorPin_B, LOW);
digitalWrite(LmotorPin_BP,HIGH);

digitalWrite(RmotorPin_A, LOW);
digitalWrite(RmotorPin_AP,HIGH);
digitalWrite(RmotorPin_B, LOW);
digitalWrite(RmotorPin_BP,HIGH);
delay(delayTime);
digitalWrite(LmotorPin_A, LOW);
digitalWrite(LmotorPin_AP,HIGH);
digitalWrite(LmotorPin_B, LOW);
digitalWrite(LmotorPin_BP,HIGH);

digitalWrite(RmotorPin_A, HIGH);
digitalWrite(RmotorPin_AP,LOW);
digitalWrite(RmotorPin_B, LOW);
digitalWrite(RmotorPin_BP,HIGH);
delay(delayTime);
digitalWrite(LmotorPin_A, LOW);
digitalWrite(LmotorPin_AP,HIGH);
digitalWrite(LmotorPin_B, HIGH);
digitalWrite(LmotorPin_BP,LOW);

digitalWrite(RmotorPin_A, HIGH);
digitalWrite(RmotorPin_AP,LOW);
digitalWrite(RmotorPin_B, HIGH);
digitalWrite(RmotorPin_BP,LOW);
delay(delayTime);
}
void turnLeft() {            // 馬達轉向:左轉
digitalWrite(LmotorPin_A, LOW);
digitalWrite(LmotorPin_AP,HIGH);
digitalWrite(LmotorPin_B, HIGH);
digitalWrite(LmotorPin_BP,LOW);

digitalWrite(RmotorPin_A, LOW);
digitalWrite(RmotorPin_AP,HIGH);
digitalWrite(RmotorPin_B, HIGH);
digitalWrite(RmotorPin_BP,LOW);
delay(delayTime);
digitalWrite(LmotorPin_A, LOW);
digitalWrite(LmotorPin_AP,HIGH);
digitalWrite(LmotorPin_B, LOW);
digitalWrite(LmotorPin_BP,HIGH);

digitalWrite(RmotorPin_A, LOW);
digitalWrite(RmotorPin_AP,HIGH);
digitalWrite(RmotorPin_B, LOW);
digitalWrite(RmotorPin_BP,HIGH);
delay(delayTime);
digitalWrite(LmotorPin_A, HIGH);
digitalWrite(LmotorPin_AP,LOW);
digitalWrite(LmotorPin_B, LOW);
digitalWrite(LmotorPin_BP,HIGH);

digitalWrite(RmotorPin_A, HIGH);
digitalWrite(RmotorPin_AP,LOW);
digitalWrite(RmotorPin_B, LOW);
digitalWrite(RmotorPin_BP,HIGH);
delay(delayTime);
digitalWrite(LmotorPin_A, HIGH);
digitalWrite(LmotorPin_AP,LOW);
digitalWrite(LmotorPin_B, HIGH);
digitalWrite(LmotorPin_BP,LOW);

digitalWrite(RmotorPin_A, HIGH);
digitalWrite(RmotorPin_AP,LOW);
digitalWrite(RmotorPin_B, HIGH);
digitalWrite(RmotorPin_BP,LOW);
delay(delayTime);
}


void turnRight() {         // 馬達轉向:右轉
digitalWrite(LmotorPin_A, HIGH);
digitalWrite(LmotorPin_AP,LOW);
digitalWrite(LmotorPin_B, HIGH);
digitalWrite(LmotorPin_BP,LOW);

digitalWrite(RmotorPin_A, HIGH);
digitalWrite(RmotorPin_AP,LOW);
digitalWrite(RmotorPin_B, HIGH);
digitalWrite(RmotorPin_BP,LOW);
delay(delayTime);
digitalWrite(LmotorPin_A, HIGH);
digitalWrite(LmotorPin_AP,LOW);
digitalWrite(LmotorPin_B, LOW);
digitalWrite(LmotorPin_BP,HIGH);

digitalWrite(RmotorPin_A, HIGH);
digitalWrite(RmotorPin_AP,LOW);
digitalWrite(RmotorPin_B, LOW);
digitalWrite(RmotorPin_BP,HIGH);
delay(delayTime);
digitalWrite(LmotorPin_A, LOW);
digitalWrite(LmotorPin_AP,HIGH);
digitalWrite(LmotorPin_B, LOW);
digitalWrite(LmotorPin_BP,HIGH);

digitalWrite(RmotorPin_A, LOW);
digitalWrite(RmotorPin_AP,HIGH);
digitalWrite(RmotorPin_B, LOW);
digitalWrite(RmotorPin_BP,HIGH);
delay(delayTime);
digitalWrite(LmotorPin_A, LOW);
digitalWrite(LmotorPin_AP,HIGH);
digitalWrite(LmotorPin_B, HIGH);
digitalWrite(LmotorPin_BP,LOW);

digitalWrite(RmotorPin_A, LOW);
digitalWrite(RmotorPin_AP,HIGH);
digitalWrite(RmotorPin_B, HIGH);
digitalWrite(RmotorPin_BP,LOW);
delay(delayTime);
}

void setup() {
pinMode(LmotorPin_A, OUTPUT);
pinMode(LmotorPin_AP, OUTPUT);
pinMode(LmotorPin_B, OUTPUT);
pinMode(LmotorPin_BP, OUTPUT);
pinMode(RmotorPin_A, OUTPUT);
pinMode(RmotorPin_AP, OUTPUT);
pinMode(RmotorPin_B, OUTPUT);
pinMode(RmotorPin_BP, OUTPUT);
pinMode(D0,INPUT);
pinMode(D1,INPUT);
pinMode(D3,INPUT);
pinMode(D4,INPUT);
}

void loop() {
boolean val1=digitalRead(D0);
boolean val2=digitalRead(D1);

attachInterrupt(2,turnRight, LOW);
attachInterrupt(3,turnLeft, LOW);

if (val1==0) {
    for (i=0;i<100;i++)
    {   
      forward();
    }
}

if (val2==0) {
    for (i=0;i<100;i++)
    {   
      backward();
    }
}

}


請問為什麼按下中斷按鈕20.21接腳
馬達會停止轉動 然後震動..........
不會執行指令內容

thuthu94 發表於 2015-5-1 18:46:58

另外有在turnRight跟turnLeft程式前讓馬達停子一下下

中斷功能:左/右轉 轉多少依據中斷按鈕按著的時間
此外電路動作整體是
一開始馬達可以前進/後退(一段距離)
但在前進/後退時按下中斷按鈕(按著不放)會停止不轉且震動
等到中斷按鈕放開 會繼續執行前進/後退的動作

另外在程式一開始按下中斷按鈕(按著不放)也是不轉且震動
但是放開後還是可以執行前進/後退動作

我想要的是按著中斷按鈕(按著不放)後可以左右轉(不管是前進後退還是停止不動時都可以觸發)

另外中斷程式有用LOW/CHANGE/RISING/RALLING當中斷觸發時機
感覺只有LOW是適合我原本想要的功能


其他三個都是只有按下去(極短的時間)有動靜(太短的不知道是動甚麼動作) 然後又繼續執行主程式...
頁: [1]
查看完整版本: 遙控車中斷程式的疑問