Итак, я немного поработал с моим шаговым двигателем и датчиком моей кнопки (я хочу, чтобы двигатель остановился при нажатии кнопки , которые я по большей части выяснил). Однако, чтобы упростить мой код, мне удалось заставить мой мотор вообще перестать двигаться. В приведенном ниже коде идея заключалась в том, чтобы сконденсировать основные действия двигателя (поднять платформу до стекла, сфотографировать, затем опустить назад и повторить процесс), сместив большинство действий в пределах одного если утверждение так, что компьютер будет лучше стрелять, читая его так, как я предполагал.Я не могу заставить мой шаговый двигатель работать через петлю, которую я построил для нее
#include <AccelStepper.h>
const int buttonPin=4; //number of the pushbutton pin
const int opto_shoot=2; // Pin that controls the shoot function
int maxDistance=-12000; //intial distance for motor to move
int button_state=0;
int sensorPin=0; //select input pin for the photocell
int sensorValue=0; //variable to store the vaule coming from the photocell
int motorSpeed = 9600; //maximum steps per second (about 3rps/at 16 microsteps)
int motorAccel = 80000; //steps/second/second to accelerate
int motorDirPin = 8; //digital pin 8
int motorStepPin = 9; //digital pin 9
//set up the accelStepper intance
//the "1" tells it we are using a driver
AccelStepper stepper(1, motorStepPin, motorDirPin);
void setup(){
pinMode(buttonPin,INPUT); //set that the button is an input
pinMode(opto_shoot,OUTPUT); // set the pin that controls the shoot function
stepper.setMaxSpeed(motorSpeed);
stepper.setSpeed(motorSpeed);
stepper.setAcceleration(motorAccel);
}
void loop(){
stepper.moveTo(maxDistance); //move 2000 steps (gets close to the top)
stepper.run();
if (digitalRead(buttonPin) == HIGH){
stepper.stop();
stepper.runToPosition();
digitalWrite(opto_shoot,HIGH); //SHOOT
delay(500);
digitalWrite(opto_shoot,LOW);
delay(1);
goto Lower; }
// for(int i=0;i<36;i++)
// Serial.read();
//
else{
if(stepper.distanceToGo() == 0){
stepper.stop();
stepper.runToPosition();
stepper.moveTo(maxDistance);
}
}
Lower:{
maxDistance=-1*(maxDistance+500);
stepper.moveTo(maxDistance);}
//these must be called as often as possible to ensure smooth operation
//any delay will cause jerky motion
stepper.run();
}
Пожалуйста, помогите мне понять, где я поступил неправильно с этим кодом.
и еще один +1 для 'goto' bashing! :-) – zmo
@zmo спасибо, я чувствовал себя вынужденным обратиться к нему. – gary
Да, мне было очень плохо, когда я использовал его самостоятельно, но я работал с другим программистом, и он предложил это как взломать то, что я делал. Работая в cahoots с другим моим другом-программистом, код в настоящее время базируется в основном вокруг функций и, похоже, в основном делает то, что я хочу. Спасибо за вашу помощь! Я должен буду заплатить за это и постараюсь больше помочь моим коллегам-программистам в будущем. – MikePinnell