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