Hallo,
Met een omweg werkt dit maar krijg het niet netjes geprogrammeerd.
de bedoeling: knop indrukken timer loopt 3600 sec, daarna stepper langzaam aan.
Knop los stepper langzaam uit.
if (digitalRead(8) == HIGH) {x=1500000; kan mij inziens anders
En als de knop los is en timer is afgelopen gaat de motor toch even langzaam uit.
geen groot probleem ......maar ja
wat kan ik verbeteren ?
// defines pins numbers
const int stepPin = 4;
const int dirPin = 5;
const int ms1Pin = 10;
// const int ms2Pin = 9;
// const int ms3Pin = 8;
const int ledPin = 13;
float waitTime = 0.003;
int accelerationTerm = 4000;
int roundedWaitTime;
unsigned long timer1;
unsigned long timer2;
unsigned long difference;
int Timer=1;
int buttonPin = 8;
void setup() {
Serial.begin(115200); // opens serial port, sets data rate to xxxx bps
while (!Serial);
pinMode(9, OUTPUT); // enable / disable
pinMode(8, INPUT_PULLUP); // schakelaar
//setup the pins
pinMode(stepPin,OUTPUT);
pinMode(dirPin,OUTPUT);
pinMode(ms1Pin,OUTPUT);
// pinMode(ms2Pin,OUTPUT);
// pinMode(ms3Pin,OUTPUT);
pinMode(ledPin, OUTPUT);
//change the microstepping
digitalWrite(ms1Pin,LOW);
// digitalWrite(ms2Pin,HIGH);
//digitalWrite(ms3Pin,LOW);
}
//function to return the next delay value for positive acceleration
float positiveAcceleration(float waitTime) {
float dVelocity = waitTime * accelerationTerm;
waitTime = 1/(dVelocity+1/waitTime);
if (waitTime < 0.00025){
waitTime = 0.00025;
}
return waitTime;
}
//function to return the next delay value for negative acceleration
float negativeAcceleration(float waitTime) {
float dVelocity = waitTime * -1 * accelerationTerm;
waitTime = 1/(dVelocity+1/waitTime);
if (waitTime > 0.003){
waitTime = 0.003;
}
return waitTime;
}
void loop() {
digitalWrite(9, LOW); // motor is Enable
// digitalWrite(9, HIGH); // motor is Disable
if (digitalRead(8) == LOW)
while (Timer <=3600) {
Serial.print("0 sec naar 3600 sec =>");
Serial.println(Timer);
Timer = Timer + 1;
delay (1000);
}
if (Timer >= 3600){
//accelerate for 150000 steps
for(long x = 0; x < 1500000; x++)
{
waitTime = positiveAcceleration(waitTime);
roundedWaitTime = round(waitTime*1000000);
digitalWrite(stepPin,HIGH);
delayMicroseconds(roundedWaitTime);
digitalWrite(stepPin, LOW);
if (digitalRead(8) == HIGH) {x=1500000;
//deccelerate for 1984 steps
for(int y = 0; y < 1984; y++) {
waitTime = negativeAcceleration(waitTime);
roundedWaitTime = round(waitTime*1000000);
digitalWrite(stepPin,HIGH);
delayMicroseconds(roundedWaitTime);
digitalWrite(stepPin, LOW);
// Serial.println(y);
}
}
}
}
Timer=1;
Serial.println("motor gestopt");
delay(1000);
} // end loop