#include <LiquidCrystal.h>
#include <Stepper.h>
#define STEPS 400
int voltages[5][2] = {{1005, 1016}, {510, 520}, {90, 110}, {170, 185}, {930, 932}};
unsigned long lastButtonReadTime = 0;
unsigned int changedVoltageTime = 0;
int lastButtonVoltage = 0;
bool changeLength = true;
unsigned int cableLength = 0;
unsigned int cableNumber = 0;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
Stepper stepper(STEPS, 6, 7, 8, 9);
void checkButton(int voltage);
void pressButton(int buttonIndex);
void startCutting();
bool isPliersCompressed();
bool isPliersOpen();
void cutt();
void lcdDisplay(unsigned int alreadyCutted);
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
stepper.setSpeed(30);
lcd.setCursor(0, 0);
lcd.print("Welcome!");
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("System is");
lcd.setCursor(0, 1);
lcd.print("starting...");
cutt();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("System is");
lcd.setCursor(0, 1);
lcd.print("ready now!");
delay(2000);
lcdDisplay(0);
}
void loop() {
if (lastButtonReadTime != millis()) {
int voltage = analogRead(A0);
if (voltage != lastButtonVoltage) {
changedVoltageTime++;
} else if (changedVoltageTime > 0) {
changedVoltageTime--;
}
if (changedVoltageTime >= 50) {
changedVoltageTime = 0;
lastButtonVoltage = voltage;
if (voltage > 0) {
checkButton(voltage);
}
}
lastButtonReadTime = millis();
}
}
void checkButton(int voltage) {
for (int i = 0; i < 5; i++) {
if (voltage >= voltages[i][0] && voltage <= voltages[i][1]) {
pressButton(i);
lcdDisplay(0);
return;
}
}
}
void pressButton(int buttonIndex) {
switch (buttonIndex) {
case 0:
Serial.println("Auswahl");
changeLength = !changeLength;
break;
case 1:
if (changeLength && cableLength < 100) {
cableLength++;
Serial.println("Length + 1");
} else if (cableNumber < 100) {
cableNumber++;
Serial.println("Number + 1");
}
break;
case 2:
if (changeLength && cableLength > 0) {
cableLength--;
Serial.println("Length - 1");
} else if (cableNumber > 0) {
cableNumber--;
Serial.println("Number - 1");
}
break;
case 3:
Serial.println("Start");
startCutting();
break;
case 4:
Serial.println("Einzug");
stepper.step(50);
cutt();
break;
}
}
void startCutting() {
lcd.noCursor();
for (unsigned int i = 1; i <= cableNumber; i++) {
stepper.step(cableLength * 17.9);
cutt();
lcdDisplay(i);
}
}
bool isPliersCompressed() {
delay(50);
if (analogRead(A1) == 0 && analogRead(A2) != 0){
delay(10);
return analogRead(A1) == 0 && analogRead(A2) != 0; }else{ return false;}
}
bool isPliersOpen() {
delay(50);
if (analogRead(A2) == 0 && analogRead(A1) != 0){
delay(10);
return analogRead(A2) == 0 && analogRead(A1) != 0; }else{ return false; }
}
void cutt() {
digitalWrite(13, HIGH);
while (!isPliersCompressed()) {
delay (10);
}
digitalWrite(13, LOW);
delay(50);
digitalWrite(10, HIGH);
while (!isPliersOpen()) {
delay(10);
}
if (isPliersOpen()== true) { digitalWrite(10, LOW);}
delay(50);
}
void lcdDisplay(unsigned int alreadyCutted) {
lcd.clear();
lcd.noCursor();
lcd.setCursor(0, 0);
lcd.print("Kabell.:");
lcd.setCursor(9, 0);
lcd.print(cableLength);
lcd.setCursor(12, 0);
lcd.print("cm");
lcd.setCursor(3, 1);
lcd.print(alreadyCutted);
lcd.setCursor(6, 1);
lcd.print("/");
lcd.setCursor(9, 1);
lcd.print(cableNumber);
if (alreadyCutted == 0) {
lcd.cursor();
if (changeLength) {
lcd.setCursor(9, 0);
} else {
lcd.setCursor(9, 1);
}
}
}
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.