簡體   English   中英

使用 LDR 傳感器控制帶 A4988 驅動電機的步進電機

[英]Control Stepper Motor with A4988 Driver motor Using LDR Sensor

您好,我現在正在嘗試使用 LDR 傳感器控制步進電機。 我使用帶有 A4988 電機驅動器的 NEMA 17 步進電機。 當我為 LDR 模塊輸入代碼時,在串行監視器中只顯示 1 個數據而不是循環。 當我使用 L298N 時,沒問題。 我嘗試從 serial.print 更改並延遲但仍然無法正常工作。 有誰知道問題是什么? 這是代碼:

 const int stepPin =  4;
 const int dirPin = 5;

int trig_pin = 2;
int echo_pin = 3;
long echotime;
float distance;


void setup() {
  Serial.begin(9600);
  pinMode(trig_pin, OUTPUT);
  pinMode(echo_pin, INPUT);
  digitalWrite(trig_pin, LOW);

  
  pinMode(stepPin, OUTPUT);
  pinMode(dirPin, OUTPUT);

}

void loop() {
  //For Ultrasonic Sensor
  digitalWrite(trig_pin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trig_pin, LOW);
  echotime = pulseIn(echo_pin, HIGH);
  distance= 0.0001*((float)echotime*340.0)/2.0;
  Serial.print(distance);
  Serial.println(" cm");
  delay(3600);

  //for LDR 
  unsigned int AnalogValue;
  AnalogValue = analogRead(A2);
  delayMicroseconds(10);
  Serial.println(AnalogValue);
  
  //for Stepper
  digitalWrite(dirPin, HIGH);
  for (int x = A2; x < 400; x++) {
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(500);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(500);
  }
  delay(1000);

  digitalWrite(dirPin, LOW);
  for (int x = A2; x > 400; x++) {
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(500);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(500);
  }
  delay(1000);

  digitalWrite(dirPin, HIGH);
  for (int x = A2; x = 400; x++) {
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(500);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(500);
  }
  delay(1000);
    
  }

for (int x = A2; x = 400; x++)是一個無限循環。

x = 400 計算結果為 400,這是一個真值,因此循環永遠運行。 我認為您應該重新審視 C++ 控制結構的基礎知識。

另外你為什么從A2開始? 那是一個密碼。 對我來說沒有意義。 您可能想要使用AnalogValue

for (int x = A2; x > 400; x++)是另一個無意義的循環。 它只會在A2 > 400 時運行,然后它將永遠運行。 但 A2 不太可能 > 400。所以你也可以刪除那個循環。

暫無
暫無

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

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