Управление шаговым двигателем с помощью приводного двигателя A4988 с помощью датчика LDR

Здравствуйте, я сейчас пытаюсь управлять шаговым двигателем с помощью датчика LDR. Я использую шаговый двигатель NEMA 17 с драйвером двигателя A4988. когда я помещаю код для модуля LDR, в последовательном мониторе просто отображаются 1 данные, а не цикл. когда я использую L298N, это не проблема. Я пытаюсь перейти с serial.print и delay, но все еще не работает. кто-нибудь знает проблема в том? это код:

 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);
    
  }

person Yudis Ahmad    schedule 14.03.2021    source источник


Ответы (1)


for (int x = A2; x = 400; x++) - бесконечный цикл.

x = 400 оценивается как 400, что является истинным значением, поэтому цикл выполняется бесконечно. Я думаю, вам следует вернуться к основам управляющих структур C ++.

И почему вы начинаете с A2? Это пин-код. Для меня это не имеет смысла. Вы, наверное, хотели использовать AnalogValue

for (int x = A2; x > 400; x++) - еще одна бессмысленная петля. он будет работать, только если A2 равен ›400, и тогда он будет работать вечно. Но маловероятно, что A2 когда-либо будет ›400. Так что вы можете просто удалить эту петлю.

person Piglet    schedule 14.03.2021