Почему выход моего поворотного энкодера задерживается при работе шагового двигателя? - PullRequest
0 голосов
/ 24 января 2020

Я делаю схему, в которой колесо вращается с вращающимся энкодером, и когда значение энкодера становится кратным шести, двигатель вращается. Сейчас я тестирую, поэтому я не использую единицы измерения. В любом случае, когда я подключаю все и проверяю, все работает отлично, за исключением того факта, что при нажатии на число, кратное шести, выходы из кодера не выполняются! Чтобы уточнить, когда я включаю энкодер, на последовательном мониторе он показывает, сколько шагов я сделал, но когда значение достигает кратного шести, двигатель выключается, как планировалось, но не получает никакого ввода от энкодера, делая он думает, что значение по-прежнему кратно шести, даже когда я вращаю кодировщик. Каждый раз, когда я запускаю программу, он не обнаруживает случайное время, пока, наконец, не будет обнаружен выходной сигнал поворотного энкодера и двигатель не остановится. Есть идеи?

Спасибо.

#include <Stepper.h>

Stepper stepper(100, 9, 10, 11, 12);

#define outputA 2
#define outputB 3
int counter = 0;
int aState;
int aLastState;  
bool drop = false;

void setup(){
Serial.begin(9600); // Begins Serial monitor
pinMode (outputA ,INPUT);
pinMode (outputB ,INPUT);
stepper.setSpeed(100);
aLastState = digitalRead(outputA);    
}

void dropSeed(int rotations) {
  stepper.step(100);
  stepper.step(-100);
}

void loop(){
aState = digitalRead(outputA);
if (drop == false) {
  if (aState != aLastState){    
     // If the outputB state is different to the outputA state, that means the encoder is rotating clockwise
     if (digitalRead(outputB) == 1) {
       counter ++;
     } else {
       counter --;
     }
     Serial.print("Position: ");
     Serial.println(counter);
   }
   drop = true;
}
if(drop == true) {
  if (counter % 6 == 0 && counter != 0) {
    dropSeed(30);
    drop = false;
    if (drop == false) {
      // nothing
    } else {
      Serial.println("dammit we got a problem");
    }
  } else {
    drop = false;
  }

} else {
  Serial.println("sjkhfgkjd");
}
 aLastState = aState;
}
...