|
各位大家好:最近在寫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;
}
謝謝大家幫忙! |
|