[英]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.