Robofun 機器人論壇
標題:
步進馬達-外部中斷
[打印本頁]
作者:
milk1152
時間:
2013-3-25 16:46
標題:
步進馬達-外部中斷
各位大家好:
最近在寫Arduino控制兩顆馬達時,碰到一些小問題,我想用極限開關使馬達訊號中斷,是否應該使用attachInterrupt()函數來寫?
還有我對Arduino的函示庫也不是很瞭解,我的程式裡面"steps"是指馬達每轉一圈所需的步數,不知道我這樣說是否有誤?
但如果我已經接了一顆馬達驅動器,而馬達驅動器可以切的步數是500步,那兩個之間是否有衝突?若我將steps改成500會造成馬達左右晃動。
還是說有接馬達驅動器的話,用Arduino的函式庫來寫根本就是錯的?
而我要加極限開關,使用
attachInterrupt()函數,其中stateChange()裡的程式該如何編寫?
在我用parseInt()函數時,我輸入兩個數字並且用逗號隔開會有一個問題,當我輸入200,100時,Arduino串口會讀不到數值,當我輸入200,100,時,多一個逗號Arduino,就能讀到輸入之數值,為什麼會有這樣子的情況?
以下是我的程式碼:
#include <Stepper.h>
const int steps = 200;
int step1,step2;
Stepper myStepper1(steps,8,9);
Stepper myStepper2(steps,5,6);
const int sensorPin = 0;
const int limitPin = 0;
const int ledPin = 13;
volatile int limitState ;
void setup(){
pinMode(limitPin,INPUT);
Serial.begin(9600);
attachInterrupt(limitPin,stateChange,CHANGE);
}
void loop(){
int value = analogRead(sensorPin);
limitState = analogRead(limitPin);
int motorSpeed = map(value,0,1023,0,100);
if (motorSpeed > 0 ){
myStepper1.setSpeed(motorSpeed);
myStepper2.setSpeed(motorSpeed);
while ( Serial.available() > 0){
step1 = Serial.parseInt();
delay(2);
step2 = Serial.parseInt();
delay(2);
if (Serial.read() == ','){
myStepper1.step(step1);
myStepper2.step(step2);
Serial.println(step1);
Serial.println(step2);
}
}
}
}
void stateChange(){
step1=0;
step2=0;
}
謝謝大家幫忙!
作者:
vegewell
時間:
2013-3-31 12:41
回復
1#
milk1152
>>
碰到一些小問題,我想用極限開關使馬達訊號中斷,是否應該使用attachInterrupt()函數來寫?
如果是用極限開關使馬達切斷電源,是不需要使用attachInterrupt()函數來寫
有關步進馬達請看我發表的文章用Arduino控制一顆步進馬達!
http://www.robofun.net/forum/viewthread.php?tid=6893
------------------------------------
用Arduino控制三顆步進馬達!
http://www.robofun.net/forum/viewthread.php?tid=6905
歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/)
Powered by Discuz! X3.2