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