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