Compare commits
	
		
			1 Commits 
		
	
	
	| Author | SHA1 | Date | 
|---|---|---|
|  | e865323a60 | 4 years ago | 
				 1 changed files with 90 additions and 0 deletions
			
			
		| @ -0,0 +1,90 @@ | |||||
|  | #define dirPin 2 | ||||
|  | #define stepPin 3 | ||||
|  | #define endPin 4 | ||||
|  | 
 | ||||
|  | long maxRange = 35000; // motor maximum excursion range - 35000
 | ||||
|  | int brakeRange = 400; // motor lowSpeed range
 | ||||
|  | int lowSpeed = 2000;     // motor lower speed
 | ||||
|  | int highSpeed = 2800; // motor higher speed
 | ||||
|  | int inversionBreak = 10000; // motor pause time - 10000
 | ||||
|  | 
 | ||||
|  | long stepSpeed = 0; | ||||
|  | bool dir = true; | ||||
|  | long counter = 0; | ||||
|  | bool rodEnd = false; | ||||
|  | long brakeFactor = 0; | ||||
|  | 
 | ||||
|  | void setup() { | ||||
|  |   pinMode(stepPin, OUTPUT); | ||||
|  |   pinMode(dirPin, OUTPUT); | ||||
|  |   pinMode(endPin, INPUT); | ||||
|  |   digitalWrite(dirPin, dir); | ||||
|  | 
 | ||||
|  |   while(!rodEnd) {     | ||||
|  |     counter++; | ||||
|  |     if(counter <= brakeRange) { | ||||
|  |       brakeFactor = (lowSpeed / brakeRange) * counter; | ||||
|  |       stepSpeed = (highSpeed + brakeFactor > highSpeed + lowSpeed) ? highSpeed + lowSpeed : highSpeed + brakeFactor; | ||||
|  |     } else { | ||||
|  |       stepSpeed = highSpeed; | ||||
|  |     } | ||||
|  | 
 | ||||
|  |     digitalWrite(stepPin, HIGH); | ||||
|  |     delayMicroseconds(stepSpeed); | ||||
|  |     digitalWrite(stepPin, LOW); | ||||
|  |     delayMicroseconds(stepSpeed); | ||||
|  | 
 | ||||
|  |     if(digitalRead(endPin)) { | ||||
|  |       rodEnd = true; | ||||
|  |       counter = 0; | ||||
|  |     } | ||||
|  |   } | ||||
|  | } | ||||
|  | 
 | ||||
|  | void loop() { | ||||
|  |   if(!dir) { | ||||
|  |     counter++; | ||||
|  |     if(counter >= maxRange) { | ||||
|  |       dir = !dir; | ||||
|  |       digitalWrite(dirPin, dir); | ||||
|  |       delay(inversionBreak);  | ||||
|  |     } else { | ||||
|  |       if(counter >= maxRange - brakeRange) { | ||||
|  |         brakeFactor = (lowSpeed / brakeRange) * (maxRange - counter); | ||||
|  |         stepSpeed = (highSpeed + brakeFactor > highSpeed + lowSpeed) ? highSpeed + lowSpeed : highSpeed + brakeFactor; | ||||
|  |       } else if(counter <= brakeRange) { | ||||
|  |           brakeFactor = (lowSpeed / brakeRange) * counter; | ||||
|  |           stepSpeed = (highSpeed + brakeFactor > highSpeed + lowSpeed) ? highSpeed + lowSpeed : highSpeed + brakeFactor; | ||||
|  |       } else { | ||||
|  |         stepSpeed = highSpeed; | ||||
|  |       } | ||||
|  |        | ||||
|  |       digitalWrite(stepPin, HIGH); | ||||
|  |       delayMicroseconds(stepSpeed); | ||||
|  |       digitalWrite(stepPin, LOW); | ||||
|  |       delayMicroseconds(stepSpeed); | ||||
|  |     } | ||||
|  |   } else { | ||||
|  |     counter--; | ||||
|  |     if(counter <= 0) { | ||||
|  |       dir = !dir; | ||||
|  |       digitalWrite(dirPin, dir); | ||||
|  |       delay(inversionBreak); | ||||
|  |     } else { | ||||
|  |       if(counter >= maxRange - brakeRange) { | ||||
|  |         brakeFactor = (lowSpeed / brakeRange) * (maxRange - counter); | ||||
|  |         stepSpeed = (highSpeed + brakeFactor > highSpeed + lowSpeed) ? highSpeed + lowSpeed : highSpeed + brakeFactor; | ||||
|  |       } else if(counter <= brakeRange) { | ||||
|  |           brakeFactor = (lowSpeed / brakeRange) * counter; | ||||
|  |           stepSpeed = (highSpeed + brakeFactor > highSpeed + lowSpeed) ? highSpeed + lowSpeed : highSpeed + brakeFactor; | ||||
|  |       } else { | ||||
|  |         stepSpeed = highSpeed; | ||||
|  |       } | ||||
|  |        | ||||
|  |       digitalWrite(stepPin, HIGH); | ||||
|  |       delayMicroseconds(stepSpeed); | ||||
|  |       digitalWrite(stepPin, LOW); | ||||
|  |       delayMicroseconds(stepSpeed); | ||||
|  |     } | ||||
|  |   } | ||||
|  | } | ||||
					Loading…
					
					
				
		Reference in new issue