簡體   English   中英

Arduino,在for循環中打破步進電機

[英]Arduino, Breaking Stepper motor in the for loop

需要在“for循環”中打破步進電機操作。 但是我寫的代碼在循環完成后中斷了操作,它不會破壞循環之間的操作。 請檢查代碼並告訴我任何可能的方法來阻止循環之間..

碼:

#include <Stepper.h>
int in1Pin = 8;
int in2Pin = 9;
int in3Pin = 10;
int in4Pin = 12;

bool entry = false;
int j;

Stepper motor(200, in1Pin, in2Pin, in3Pin, in4Pin);

void setup() {
  pinMode(in1Pin, OUTPUT);
  pinMode(in2Pin, OUTPUT);
  pinMode(in3Pin, OUTPUT);
  pinMode(in4Pin, OUTPUT);

  while (!Serial);
  Serial.begin(9600);
  motor.setSpeed(300);
  Serial.println("Type in your selection");
  entry = false;
}

void loop() {
  if (Serial.available() > 0){
    switch(Serial.read()){
      case 'a':
       entry = true;
       break;
      case 'b':
       entry = false;
       break;
      default:break;
    }
  }
  if(entry == true){
        for(j = -20; j <= 20; j++){
          motor.step(j/0.176);
        }
      }
  else if(entry == false){
       digitalWrite(in1Pin,LOW);
       digitalWrite(in2Pin,LOW);
       digitalWrite(in3Pin,LOW);
       digitalWrite(in4Pin,LOW);
  }

}

來自評論:當我通過串行監視器發送'a'時,步進器開始旋轉,當我通過串行發送'b'時它應該打破步進電機旋轉,但它只在循環完成后斷開(不在循環內)

如果你沒有機會讓Arduino解析執行for循環之間的串行輸入 ,那么顯然不能按你的意願工作。

你應該做類似的事情:

...

void loop() {
  static int j;

  if (Serial.available() > 0){
    switch(Serial.read()){
      case 'a':
       entry = true;

       /**
        * replace next 3 lines with `j = -20` if you want to start
        * the loop from scratch each time `a` is received,
        * instead of resuming from where you stopped.
        */
       if (j >= 20) {
         j = -20;
       }

       break;
      case 'b':
       entry = false;
       break;
      default:break;
    }
  }

  if (entry) {
    if (j <= 20) {
      motor.step(j/0.176);
      ++j;
    }
  } else {
     digitalWrite(in1Pin, LOW);
     digitalWrite(in2Pin, LOW);
     digitalWrite(in3Pin, LOW);
     digitalWrite(in4Pin, LOW);
  }
}

在這段代碼中,我讓Arduino在每次調用motor.step()之后解析一個新字符。 請注意,這種方法在對motor.step() wrt的后續調用中引入了一個微小的延遲。 你原來的解決方案,但在實踐中應該可以忽略不計

如果您使用此代碼連續向Arduino發送多個a ,但Arduino尚未完成for循環,那么使用此代碼將忽略附加的a 如果你想將它們作為額外for要求,那么你應該添加一個counter ,以保持未決(全)迭代次數的軌道上for要執行循環。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM