#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#define stampHigh
//#define stampLow
#define andonHigh
//#define andonLow
#define BTN_OK 47
#define BTN_SELECT 49
#define BTN_START 51
#define BTN_RESET 53
#define STAMP A14
#define ANDON A15
const int jumlahPN = 4;
int countPN = 0;
int stepEC = 0;
int stepAcc = 0;
int timer = 0;
bool partNumber = false;
bool startEC = false;
bool MISSLOC = false;
bool SHORT = false;
bool ECFinished = false;
struct listPN {
String jenisPN;
const int skmPN;
const int AHSW;
const int clipPN;
const int clearTube;
};
listPN dataPN[jumlahPN] = {
{ " 2 SKM ", 2, 1, 0, 1 },
{ " 3 SKM ", 3, 1, 3, 1 },
{ " 4 SKM 1 AH ", 4, 1, 7, 1 },
{ " 4 SKM 2 AH ", 4, 2, 6, 1 }
};
String selectedPN = dataPN[countPN].jenisPN;
int jumlahSKM = dataPN[countPN].skmPN;
int jumlahAH = dataPN[countPN].AHSW;
int jumlahClip = dataPN[countPN].clipPN;
int anyTube = dataPN[countPN].clearTube;
int jumlahAcc = jumlahClip + jumlahAH;
const int pinIn[] = { A0, A1, A2, A3, A4, A5 };
const int pinOut[] = { 13, 12, 11, 10 };
const int pinAcc[] = { 14, 15, 16, 17, 18, 19, 20, 21 };
int accDone[8] = {0};
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcd.clear();
for (int i = 0; i < 6; i++) {
pinMode(pinIn[i], INPUT);
}
for (int i = 0; i < 4; i++) {
pinMode(pinOut[i], OUTPUT);
}
for (int i = 0; i < 8; i++) {
pinMode(pinAcc[i], INPUT_PULLUP);
}
pinMode(BTN_OK, INPUT_PULLUP);
pinMode(BTN_SELECT, INPUT_PULLUP);
pinMode(BTN_START, INPUT_PULLUP);
pinMode(BTN_RESET, INPUT_PULLUP);
pinMode(STAMP, OUTPUT);
pinMode(ANDON, OUTPUT);
#ifdef stampHigh
digitalWrite(STAMP, LOW);
#endif
#ifdef stampLow
digitalWrite(STAMP, HIGH);
#endif
#ifdef andonHigh
digitalWrite(ANDON, LOW);
#endif
#ifdef andonLow
digitalWrite(ANDON, HIGH);
#endif
lcd.setCursor(0, 0);
lcd.print(" ELECTRIC CHECK ");
lcd.setCursor(0, 1);
lcd.print(" JOYSON 5P45 ");
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" SELECT PARTNUM ");
lcd.setCursor(0, 1);
lcd.print(selectedPN);
selectPN();
delay(1000);
lcd.setCursor(0, 0);
lcd.print(" PRESS BUTTON ");
lcd.setCursor(0, 1);
lcd.print(" TO START ");
}
void loop() {
if (MISSLOC) {
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" MISSLOCATION ");
}
if (SHORT) {
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" SHORT CIRCUIT ");
}
if (digitalRead(BTN_START) == LOW && !startEC) {
startEC = true;
MISSLOC = false;
SHORT = false;
stepEC = 0;
timer = 0;
lcd.setCursor(0, 0);
lcd.print("<< RUNNING! >>");
lcd.setCursor(0, 1);
lcd.print(" CHECK SKM 1 ");
}
if (startEC) {
if (jumlahSKM == 2) {
checkHarness_2SKM();
checkAcc();
}
else if (jumlahSKM == 3) {
checkHarness_3SKM();
checkAcc();
}
else if (jumlahSKM == 4 && jumlahAH == 1) {
checkHarness_4SKM_1AH();
checkAcc();
}
else if (jumlahSKM == 4 && jumlahAH == 2) {
checkHarness_4SKM_2AH();
checkAcc();
}
else {
lcd.setCursor(0, 0);
lcd.print(" NGAPUNTEN BOLO ");
lcd.setCursor(0, 1);
lcd.print(" PROGRAM KOSONG ");
}
}
baca_esp();
}
void checkHarness_2SKM() {
if (MISSLOC || SHORT || ECFinished)
return;
bool in0 = digitalRead(pinIn[0]);
bool in1 = digitalRead(pinIn[1]);
bool in2 = digitalRead(pinIn[2]);
switch (stepEC) {
case 0:
digitalWrite(pinOut[0], HIGH);
if (in0 && (in1 || in2)) {
SHORT = true;
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" SHORT CIRCUIT ");
}
else if (!in0 && (in1 || in2)) {
MISSLOC = true;
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" MISSLOCATION ");
}
else if (in0 && (!in1 && !in2)) {
stepEC++;
lcd.setCursor(0, 0);
lcd.print("<< RUNNING! >>");
lcd.setCursor(0, 1);
lcd.print(" CHECK SKM 2 ");
resetOut();
}
break;
case 1:
digitalWrite(pinOut[1], HIGH);
if (in0 && (in1 || in2)) {
SHORT = true;
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" SHORT CIRCUIT ");
}
else if (in0 && (!in1 && !in2)) {
MISSLOC = true;
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" MISSLOCATION ");
}
else if (!in0 && (in1 && in2)) {
stepEC++;
lcd.setCursor(0, 0);
lcd.print("<< RUNNING! >>");
lcd.setCursor(0, 1);
lcd.print("CHECK AH SWITCH");
resetOut();
}
break;
case 2:
digitalWrite(pinOut[0], HIGH);
if ((in0 || in1) && in2) {
SHORT = true;
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" SHORT CIRCUIT ");
}
else if (in2 && timer < 50) {
Serial.println("#loading");
}
else if (in2 && timer > 50) {
SHORT = true;
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" SHORT CIRCUIT ");
}
else if ((in0 && in1) && !in2) {
stepEC++;
lcd.setCursor(0, 0);
lcd.print("<< RUNNING! >>");
lcd.setCursor(0, 1);
lcd.print("CHECK AH SWITCH");
resetOut();
}
break;
case 3:
digitalWrite(pinOut[1], HIGH);
if ((in0 || in1) && in2) {
SHORT = true;
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" SHORT CIRCUIT ");
}
else if (in2 && timer < 50) {
Serial.println("#loading");
}
else if (in2 && timer > 50) {
SHORT = true;
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" SHORT CIRCUIT ");
}
else if ((in0 && in1) && !in2) {
if (anyTube == 1) {
lcd.setCursor(0, 1);
lcd.print("CHECK CLEAR TUBE");
}
else {
lcd.setCursor(0, 1);
lcd.print(" CHECK CLIP 1 ");
}
resetOut();
ECFinished = true;
}
break;
}
}
void checkHarness_3SKM() {
if (MISSLOC || SHORT || ECFinished)
return;
bool in0 = digitalRead(pinIn[0]);
bool in1 = digitalRead(pinIn[1]);
bool in2 = digitalRead(pinIn[2]);
bool in3 = digitalRead(pinIn[3]);
switch (stepEC) {
case 0:
digitalWrite(pinOut[0], HIGH);
if (in0 && (in1 || in2)) {
SHORT = true;
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" SHORT CIRCUIT ");
}
else if (!in0 && ((in1 || in2) || in3)) {
MISSLOC = true;
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" MISSLOCATION ");
}
else if (in0 && (!in1 && !in2) && !in3) {
stepEC++;
lcd.setCursor(0, 0);
lcd.print("<< RUNNING! >>");
lcd.setCursor(0, 1);
lcd.print(" CHECK SKM 2 ");
resetOut();
}
break;
case 1:
digitalWrite(pinOut[1], HIGH);
if (in0 && (in1 || in2)) {
SHORT = true;
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" SHORT CIRCUIT ");
}
else if ((in0 || in3) && (!in1 && !in2)) {
MISSLOC = true;
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" MISSLOCATION ");
}
else if (!in0 && (in1 && in2) && !in3) {
stepEC++;
lcd.setCursor(0, 0);
lcd.print("<< RUNNING! >>");
lcd.setCursor(0, 1);
lcd.print("CHECK AH SWITCH");
resetOut();
}
break;
case 2:
digitalWrite(pinOut[0], HIGH);
if ((in0 || in1) && in2) {
SHORT = true;
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" SHORT CIRCUIT ");
}
else if (in2 && timer < 50) {
Serial.println("#loading");
}
else if (in2 && timer > 50) {
SHORT = true;
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" SHORT CIRCUIT ");
}
else if ((in0 && in1) && !in2 && !in3) {
stepEC++;
lcd.setCursor(0, 0);
lcd.print("<< RUNNING! >>");
lcd.setCursor(0, 1);
lcd.print("CHECK AH SWITCH");
resetOut();
}
break;
case 3:
digitalWrite(pinOut[1], HIGH);
if ((in0 || in1) && in2) {
SHORT = true;
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" SHORT CIRCUIT ");
}
else if (in2 && timer < 50) {
Serial.println("#loading");
}
else if (in2 && timer > 50) {
SHORT = true;
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" SHORT CIRCUIT ");
}
else if ((in0 && in1) && !in2 && !in3) {
stepEC++;
lcd.setCursor(0, 0);
lcd.print("<< RUNNING! >>");
lcd.setCursor(0, 1);
lcd.print(" CHECK SKM 3 ");
resetOut();
}
break;
case 4:
digitalWrite(pinOut[2], HIGH);
if (((in0 || in1) || in2) && !in3) {
MISSLOC = true;
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" MISSLOCATION ");
}
else if ((!in0 && !in1) && !in2 && in3) {
if (anyTube == 1) {
lcd.setCursor(0, 1);
lcd.print("CHECK CLEAR TUBE");
}
else {
lcd.setCursor(0, 1);
lcd.print(" CHECK CLIP 1 ");
}
resetOut();
ECFinished = true;
}
break;
}
}
void checkHarness_4SKM_1AH() {
if (MISSLOC || SHORT || ECFinished)
return;
bool in0 = digitalRead(pinIn[0]);
bool in1 = digitalRead(pinIn[1]);
bool in2 = digitalRead(pinIn[2]);
bool in3 = digitalRead(pinIn[3]);
bool in4 = digitalRead(pinIn[4]);
switch (stepEC) {
case 0:
digitalWrite(pinOut[0], HIGH);
if (in0 && (in1 || in2)) {
SHORT = true;
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" SHORT CIRCUIT ");
}
else if (!in0 && ((in1 || in2) || in3 || in4)) {
MISSLOC = true;
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" MISSLOCATION ");
}
else if (in0 && (!in1 && !in2) && !in3 && !in4) {
stepEC++;
lcd.setCursor(0, 0);
lcd.print("<< RUNNING! >>");
lcd.setCursor(0, 1);
lcd.print(" CHECK SKM 2 ");
resetOut();
}
break;
case 1:
digitalWrite(pinOut[1], HIGH);
if (in0 && (in1 || in2)) {
SHORT = true;
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" SHORT CIRCUIT ");
}
else if ((in0 || in3 || in4) && (!in1 && !in2)) {
MISSLOC = true;
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" MISSLOCATION ");
}
else if (!in0 && (in1 && in2) && !in3 && !in4) {
stepEC++;
lcd.setCursor(0, 0);
lcd.print("<< RUNNING! >>");
lcd.setCursor(0, 1);
lcd.print("CHECK AH SWITCH");
resetOut();
}
break;
case 2:
digitalWrite(pinOut[0], HIGH);
if ((in0 || in1) && in2) {
SHORT = true;
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" SHORT CIRCUIT ");
}
else if (in2 && timer < 50) {
Serial.println("#loading");
}
else if (in2 && timer > 50) {
SHORT = true;
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" SHORT CIRCUIT ");
}
else if ((in0 && in1) && !in2 && !in3 && !in4) {
stepEC++;
lcd.setCursor(0, 0);
lcd.print("<< RUNNING! >>");
lcd.setCursor(0, 1);
lcd.print("CHECK AH SWITCH");
resetOut();
}
break;
case 3:
digitalWrite(pinOut[1], HIGH);
if ((in0 || in1) && in2) {
SHORT = true;
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" SHORT CIRCUIT ");
}
else if (in2 && timer < 50) {
Serial.println("#loading");
}
else if (in2 && timer > 50) {
SHORT = true;
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" SHORT CIRCUIT ");
}
else if ((in0 && in1) && !in2 && !in3 && !in4) {
stepEC++;
lcd.setCursor(0, 0);
lcd.print("<< RUNNING! >>");
lcd.setCursor(0, 1);
lcd.print(" CHECK SKM 3 ");
resetOut();
}
break;
case 4:
digitalWrite(pinOut[2], HIGH);
if (((in0 || in1) || in2 || in4) && !in3) {
MISSLOC = true;
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" MISSLOCATION ");
}
else if ((!in0 && !in1) && !in2 && in3 && !in4) {
stepEC++;
lcd.setCursor(0, 0);
lcd.print("<< RUNNING! >>");
lcd.setCursor(0, 1);
lcd.print(" CHECK SKM 4 ");
resetOut();
}
break;
case 5:
digitalWrite(pinOut[3], HIGH);
if (((in0 || in1) || in2 || in3) && !in4) {
MISSLOC = true;
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" MISSLOCATION ");
}
else if ((!in0 && !in1) && !in2 && !in3 && in4) {
if (anyTube == 1) {
lcd.setCursor(0, 1);
lcd.print("CHECK CLEAR TUBE");
}
else {
lcd.setCursor(0, 1);
lcd.print(" CHECK CLIP 1 ");
}
resetOut();
ECFinished = true;
}
break;
}
}
void checkHarness_4SKM_2AH() {
if (MISSLOC || SHORT || ECFinished)
return;
bool in0 = digitalRead(pinIn[0]);
bool in1 = digitalRead(pinIn[1]);
bool in2 = digitalRead(pinIn[2]);
bool in3 = digitalRead(pinIn[3]);
bool in4 = digitalRead(pinIn[4]);
bool in5 = digitalRead(pinIn[5]);
switch (stepEC) {
case 0:
digitalWrite(pinOut[0], HIGH);
if (in0 && (in1 || in2)) {
SHORT = true;
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" SHORT CIRCUIT ");
}
else if (!in0 && ((in1 || in2) || in3 || (in4 || in5))) {
MISSLOC = true;
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" MISSLOCATION ");
}
else if (in0 && (!in1 && !in2) && !in3 && (!in4 && !in5)) {
stepEC++;
lcd.setCursor(0, 0);
lcd.print("<< RUNNING! >>");
lcd.setCursor(0, 1);
lcd.print(" CHECK SKM 2 ");
resetOut();
}
break;
case 1:
digitalWrite(pinOut[1], HIGH);
if (in0 && (in1 || in2)) {
SHORT = true;
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" SHORT CIRCUIT ");
}
else if ((in0 || in3 || in4 || in5) && (!in1 && !in2)) {
MISSLOC = true;
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" MISSLOCATION ");
}
else if (!in0 && (in1 && in2) && !in3 && (!in4 && !in5)) {
stepEC++;
lcd.setCursor(0, 0);
lcd.print("<< RUNNING! >>");
lcd.setCursor(0, 1);
lcd.print(" CHECK AH SW 1 ");
resetOut();
}
break;
case 2:
digitalWrite(pinOut[0], HIGH);
if ((in0 || in1) && in2) {
SHORT = true;
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" SHORT CIRCUIT ");
}
else if (in2 && timer < 50) {
Serial.println("#loading");
}
else if (in2 && timer > 50) {
SHORT = true;
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" SHORT CIRCUIT ");
}
else if ((in0 && in1) && !in2 && !in3 && (!in4 && !in5)) {
stepEC++;
lcd.setCursor(0, 0);
lcd.print("<< RUNNING! >>");
lcd.setCursor(0, 1);
lcd.print(" CHECK AH SW 1 ");
resetOut();
}
break;
case 3:
digitalWrite(pinOut[1], HIGH);
if ((in0 || in1) && in2) {
SHORT = true;
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" SHORT CIRCUIT ");
}
else if (in2 && timer < 50) {
Serial.println("#loading");
}
else if (in2 && timer > 50) {
SHORT = true;
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" SHORT CIRCUIT ");
}
else if ((in0 && in1) && !in2 && !in3 && (!in4 && !in5)) {
stepEC++;
lcd.setCursor(0, 0);
lcd.print("<< RUNNING! >>");
lcd.setCursor(0, 1);
lcd.print(" CHECK SKM 3 ");
resetOut();
}
break;
case 4:
digitalWrite(pinOut[2], HIGH);
if (in3 && (in4 || in5)) {
SHORT = true;
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" SHORT CIRCUIT ");
}
else if (!in3 && ((in0 || in1) || in2 || (in4 || in5))) {
MISSLOC = true;
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" MISSLOCATION ");
}
else if ((!in0 && !in1) && !in2 && in3 && (!in4 && !in5)) {
stepEC++;
lcd.setCursor(0, 0);
lcd.print("<< RUNNING! >>");
lcd.setCursor(0, 1);
lcd.print(" CHECK SKM 4 ");
resetOut();
}
break;
case 5:
digitalWrite(pinOut[3], HIGH);
if (in3 && (in4 || in5)) {
SHORT = true;
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" SHORT CIRCUIT ");
}
else if (((in0 || in1) || in2 || in3) && (!in4 && !in5)) {
MISSLOC = true;
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" MISSLOCATION ");
}
else if ((!in0 && !in1) && !in2 && !in3 && (in4 && in5)) {
stepEC++;
lcd.setCursor(0, 0);
lcd.print("<< RUNNING! >>");
lcd.setCursor(0, 1);
lcd.print(" CHECK AH SW 2 ");
resetOut();
}
break;
case 6:
digitalWrite(pinOut[2], HIGH);
if ((in3 || in4) && in5) {
SHORT = true;
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" SHORT CIRCUIT ");
}
else if (in2 && timer < 50) {
Serial.println("#loading");
}
else if (in2 && timer > 50) {
SHORT = true;
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" SHORT CIRCUIT ");
}
else if ((!in0 && !in1) && !in2 && (in3 && in4) && !in5) {
stepEC++;
lcd.setCursor(0, 0);
lcd.print("<< RUNNING! >>");
lcd.setCursor(0, 1);
lcd.print(" CHECK AH SW 2 ");
resetOut();
}
break;
case 7:
digitalWrite(pinOut[3], HIGH);
if ((in3 || in4) && in5) {
SHORT = true;
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" SHORT CIRCUIT ");
}
else if (in2 && timer < 50) {
Serial.println("#loading");
}
else if (in2 && timer > 50) {
SHORT = true;
lcd.setCursor(0, 0);
lcd.print("<< WARNING! >>");
lcd.setCursor(0, 1);
lcd.print(" SHORT CIRCUIT ");
}
else if ((!in0 && !in1) && !in2 && (in3 && in4) && !in5) {
if (anyTube == 1) {
lcd.setCursor(0, 1);
lcd.print(" CHECK TUBE 1 ");
}
else {
lcd.setCursor(0, 1);
lcd.print(" CHECK CLIP 1 ");
}
resetOut();
ECFinished = true;
}
break;
}
}
void checkAcc() {
if (!ECFinished)
return;
if (jumlahClip == 0 && anyTube == 0)
processFinished();
for (int i = 0; i < jumlahAcc; i++) {
if (digitalRead(pinAcc[i]) == LOW) {
delay(400);
if (i == stepAcc && accDone[i] == 0) {
accDone[i] = 1;
stepAcc++;
if (anyTube == 1) {
if (stepAcc < jumlahAH) {
lcd.setCursor(0, 1);
lcd.print(" CHECK TUBE ");
lcd.print(stepAcc + 1);
lcd.print(" ");
}
else {
lcd.setCursor(0, 1);
lcd.print(" CHECK CLIP ");
lcd.print((stepAcc + 1) - jumlahAH);
lcd.print(" ");
}
}
else {
lcd.setCursor(0, 1);
lcd.print(" CHECK CLIP ");
lcd.print(stepAcc + 1);
lcd.print(" ");
}
if (stepAcc == jumlahAcc) {
processFinished();
}
}
}
}
}
void resetOut() {
for (int i = 0; i < 4; i++) {
digitalWrite(pinOut[i], LOW);
}
}
void resetAcc() {
for (int i = 0; i < jumlahAcc; i++) {
accDone[i] = 0;
}
}
void processFinished() {
#ifdef stampHigh
digitalWrite(STAMP, HIGH);
delay(100);
digitalWrite(STAMP, LOW);
#endif
#ifdef stampLow
digitalWrite(STAMP, LOW);
delay(100);
digitalWrite(STAMP, HIGH);
#endif
resetOut();
resetAcc();
lcd.setCursor(0, 0);
lcd.print(" CHECK FINISHED ");
lcd.setCursor(0, 1);
lcd.print(" HARNESS OK ");
delay(2000);
lcd.setCursor(0, 0);
lcd.print(" PRESS BUTTON ");
lcd.setCursor(0, 1);
lcd.print(" TO START ");
stepEC = 0;
stepAcc = 0;
startEC = false;
ECFinished = false;
}
void selectPN() {
while (!partNumber) {
if (digitalRead(BTN_SELECT) == LOW) {
delay(50);
if (digitalRead(BTN_SELECT) == HIGH) {
countPN++;
if (countPN >= jumlahPN)
countPN = 0;
lcd.setCursor(0, 1);
lcd.print(dataPN[countPN].jenisPN);
selectedPN = dataPN[countPN].jenisPN;
jumlahSKM = dataPN[countPN].skmPN;
jumlahAH = dataPN[countPN].AHSW;
jumlahClip = dataPN[countPN].clipPN;
anyTube = dataPN[countPN].clearTube;
jumlahAcc = jumlahClip + jumlahAH;
delay(200);
}
}
if (digitalRead(BTN_OK) == LOW) {
delay(50);
if (digitalRead(BTN_OK) == HIGH) {
lcd.setCursor(0, 0);
lcd.print(" SELECTED ");
lcd.setCursor(0, 1);
lcd.print(selectedPN);
partNumber = true;
}
}
}
}
void baca_esp() {
if (digitalRead(BTN_RESET) == LOW) {
stepEC = 0;
stepAcc = 0;
startEC = 0;
timer = 0;
MISSLOC = false;
SHORT = false;
ECFinished = false;
resetOut();
resetAcc();
lcd.setCursor(0, 0);
lcd.print(" RESET ");
lcd.setCursor(0, 1);
lcd.print(" SUCCESS! ");
delay(2000);
lcd.setCursor(0, 0);
lcd.print(" PRESS BUTTON ");
lcd.setCursor(0, 1);
lcd.print(" TO START ");
}
}STAMP
ANDON
RSET
STRT
SLCT
OK
SKM
1-1
SKM
2-2
AH
SW
SKM
3-3
SKM
4-4
C1
C2
C3
C4
C5
C6
C7
C8