static PCD8544 lcd;
//inputs:
int countPin = 24; // input for counter
int breakPin = 25; // input for breaker
int stbutPin = 26; //input for start button
int turnlowPin = 27; //input for turns low button
int turnhighPin = 28; // input for turns high button
int enterPin = 29; // input for enter button
int pausePin = 38;
int motorButUp = 32;
int motorButDown = 33;
//outputs:
int stledPin = 22; //output for start led
int rdledPin = 23; //output for ready led
// variables:
int stVal = LOW;
int enterVal = LOW;
int enterpreVal;
int breakVal;
float coildepth = 3.5;
int turns = 20;
//setup:
void setup() {
pinMode(breakPin, INPUT); // declare breaker as input
pinMode(stbutPin, INPUT); // declare start button as input
pinMode(turnlowPin, INPUT); // declare resume button as input
pinMode(turnhighPin, INPUT); // declare resume button as input
pinMode(enterPin, INPUT); // declare resume button as input
pinMode(stledPin, OUTPUT); // initialize led pin as output
pinMode(rdledPin, OUTPUT); // initialize led pin as output
pinMode(motorButUp, INPUT);
pinMode(motorButDown, INPUT);
pinMode(pausePin, INPUT);
stepper.setMaxSpeed(20000);
stepper.setAcceleration(10000);
stepper2.setMaxSpeed(100);
stepper2.setAcceleration(100);
lcd.begin(84, 48); // PCD8544 display resolution
lcd.setCursor(10, 0);
lcd.print("COIL WINDER");
lcd.setCursor(25, 1);
lcd.print(" by ");
lcd.setCursor(10, 2);
lcd.print(" Stavros ");
lcd.setCursor(4, 3);
lcd.print("Triantafyllou");
lcd.setCursor(4, 5);
lcd.print(" v1.0 2013 ");
delay (1500);
lcd.clear();
}
//main loop:
void loop(){
stVal = digitalRead(stbutPin);
enterVal = digitalRead(enterPin);
breakVal = digitalRead(breakPin);
if (enterpreVal == LOW){
lcd.setCursor(5, 0);
lcd.print("Please select");
lcd.setCursor(0, 2);
lcd.print(" Turns: ");
lcd.setCursor(45, 2);
lcd.print(turns);
lcd.setCursor(0, 4);
lcd.print("Coil size: ");
lcd.setCursor(61, 4);
lcd.println(coildepth);
lcd.setCursor(4, 5);
lcd.print(">press ENTER<");
stepper2.runToNewPosition(0);
if (digitalRead(motorButUp) == HIGH){
delay(100);
coildepth = coildepth + 0.5;
}
if (digitalRead(motorButDown) == HIGH){
delay(100);
coildepth = coildepth - 0.5;
}
if (digitalRead(turnlowPin) == HIGH){
turns++;
}
if (digitalRead(turnhighPin) == HIGH){
turns--;
}
}
int target2 = coildepth * 3.571;
long target = turns * 4000L;
stepper.moveTo(target);
stepper2.moveTo(target2);
if (enterVal == HIGH){
lcd.clear();
enterpreVal = enterVal;
}else{
enterpreVal = enterpreVal;
}
if (enterpreVal == HIGH){
if (stVal == HIGH && breakVal == LOW){
lcd.setCursor(10, 0);
lcd.print(" Winding ");
lcd.setCursor(5, 2);
lcd.print(" ");
lcd.setCursor(5, 4);
lcd.print("counter: ");
lcd.setCursor(0, 5);
lcd.print(" ");
while (stepper.distanceToGo() != 0) {
if (digitalRead(pausePin) == HIGH) { //Pause of winding
digitalWrite(stledPin, stVal);
lcd.setCursor(60, 4);
lcd.print(stepper.currentPosition() / 4000);
}
if (stepper.distanceToGo() == 0){
digitalWrite (stledPin, LOW);
digitalWrite (rdledPin, HIGH);
lcd.setCursor(5, 0);
lcd.print(">>> READY <<<");
lcd.setCursor(10, 2);
lcd.print("Press start");
lcd.setCursor(5, 4);
lcd.print(" to make a ");
lcd.setCursor(0, 5);
lcd.print(" new coil ");
delay(2000);
}
}
}
}
}
}