簡體   English   中英

使用帶有光電傳感器和“切換器”的步進電機

[英]Using a stepper motor with a photo sensor and a "toggle"

我要做的是對 Arduino Nano 進行編程,以控制 ULN2003 驅動器來控制 28BYJ-48 步進電機。 我在使用 if/for 語句時遇到問題,並且一旦完成指定的旋轉次數(即 6 次),循環就會中斷。 我想驅動電機的方式是使用光電傳感器和撥動開關。 撥動開關將能夠順時針和逆時針轉動步進電機。 如果伺服器一直是逆時針,它不應該朝那個方向轉動,如果光敏電阻還沒有使伺服器順時針轉動,它應該只順時針轉動。光敏電阻只會使電機轉動一個方向,順時針,並且只有在撥動開關(按鈕)尚未將其置於 position 時才會這樣做。

#include <Stepper.h>

const int stepsPerRevolution = 2048,switchpin = 12,switchpinout=6;  
int buttonPin = 3,buttonRead,dt=500,switchstate=0;

Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11);

void setup() {
  Serial.begin(9600);
  //Speed is variable up 10, 11 starts to make issues 
  myStepper.setSpeed(10);
  pinMode(buttonRead,INPUT);
  pinMode(5,OUTPUT);
  pinMode(switchpin, INPUT);
  pinMode(switchpinout, OUTPUT);
}


void loop() {
  Serial.println(buttonRead);
  Serial.println(analogRead(A0));

  if ((analogRead(A0)>940))&&(switchstate==LOW))//sensor on switch off 
  {
  myStepper.step(stepsPerRevolution*6);
  return 0;
  }
  else if (analogRead(A0)<940)&&(swithstate==LOW))//sensor off switch off
  {
  myStepper.step(-stepsPerRevolution*6);
  return 0;
  }
  else if (analogRead(A0)<940)&&(swithstate==HIGH))//sensor off switch on 
  {
  myStepper.step(stepsPerRevolution*6);
  return 0;
  }
return 0;
}
}

問題是您需要在每一步后檢查傳感器(為了獲得最佳安全性):

int loop ()
{
  //...
  for (int i = 0; i < ROTATION_COUNT; ++i)
  {
     if (/* sensor not triggered */)
     {
         AdvanceStepperMotor(1);
         Delay();  // Wait for the step to complete.
     }
     else
     {
        break;
     }
  }
  return 0;
}

暫無
暫無

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

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