Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 1519|回復: 1
打印 上一主題 下一主題

遙控車中斷程式的疑問

[複製鏈接]
跳轉到指定樓層
1#
發表於 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接腳
馬達會停止轉動 然後震動..........
不會執行指令內容
2#
 樓主| 發表於 2015-5-1 18:46:58 | 只看該作者
另外有在turnRight跟turnLeft程式前讓馬達停子一下下

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

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

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

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



其他三個都是只有按下去(極短的時間)有動靜(太短的不知道是動甚麼動作) 然後又繼續執行主程式...
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-6-5 07:51 , Processed in 0.223526 second(s), 8 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表