//-----library komunikasi UART RX TX------//
#include <SoftwareSerial.h>
//----inisialisasi pin UART dan bentuk data ke String----//
SoftwareSerial barCode(2, 3);
String data;
//-----inisialisasi pin sensor IR(Infrared)-----//
const int IR1 = 4;
const int IR2 = 5;
const int IR3 = 6;
const int IR4 = 7;
//-----inisialisasi pin Relay dan saklar----//
/*const int R1 = 8;
const int R2 = 9;
const int R3 = 10;
const int R4 = 11;*/
const int R5 = 12;
const int SW = 13;
const int s1 = 8;
const int s2 = 9;
const int s3 = 10;
const int s4 = 11;
//-----inisialisasi bilangan boolean----//
bool Start = false;
bool Posisi1 = false;
bool Posisi2 = false;
bool Posisi3 = false;
bool Posisi4 = false;
bool alamat1 = false;
bool alamat2 = false;
bool alamat3 = false;
bool alamat4 = false;
bool posisialamat1 = false;
bool posisialamat2 = false;
bool posisialamat3 = false;
bool posisialamat4 = false;
bool SS1 = false;
bool SS2 = false;
bool SS3 = false;
bool SS4 = false;
//----inisialisasi variabel millis---//
unsigned long previousMillis1 = 0;
const long interval1 = 2500; // 2 detik
unsigned long previousMillis2 = 0;
const long interval2 = 2500; // 2 detik
unsigned long previousMillis3 = 0;
const long interval3 = 2500; // 2 detik
unsigned long previousMillis4 = 0;
const long interval4 = 2500; // 2 detik
//=========================================//
void setup(){
//-----pemanggilan fungsi serial dan UART komunikasi serta batas waktu-----//
Serial.begin(9600);
barCode.begin(9600);
barCode.setTimeout(100);
//-----deklarasi pin IR, saklar, dan relay sebagai input dan output----//
pinMode(IR1, INPUT_PULLUP);
pinMode(IR2, INPUT_PULLUP);
pinMode(IR3, INPUT_PULLUP);
pinMode(IR4, INPUT_PULLUP);
pinMode(SW, INPUT_PULLUP);
pinMode(s1, INPUT_PULLUP);
pinMode(s2, INPUT_PULLUP);
pinMode(s3, INPUT_PULLUP);
pinMode(s4, INPUT_PULLUP);
/*pinMode(R1, OUTPUT);
pinMode(R2, OUTPUT);
pinMode(R3, OUTPUT);
pinMode(R4, OUTPUT);*/
pinMode(R5, OUTPUT);
//-----membuat kondisi output relay mejandi LOW atau kondisi 0----//
/*digitalWrite(R1, 0);
digitalWrite(R2, 0);
digitalWrite(R3, 0);
digitalWrite(R4, 0);
digitalWrite(R5, 0);
*/
}
void loop(){
int SSW = digitalRead(SW);
int SIR1 = digitalRead(IR1);
int SIR2 = digitalRead(IR2);
int SIR3 = digitalRead(IR3);
int SIR4 = digitalRead(IR4);
int ss1 = digitalRead(s1);
int ss2 = digitalRead(s2);
int ss3 = digitalRead(s3);
int ss4 = digitalRead(s4);
if (SSW == 1){
digitalWrite(R5, 1);
if (barCode.available() >0 ){
data = barCode.readString();
Serial.println(data);
}
if (SIR1 == 0){
previousMillis1 = millis();
Posisi1 = true;
}
if (SIR2 == 0){
previousMillis2 = millis();
Posisi2 = true;
}
if (SIR3 == 0){
previousMillis3 = millis();
Posisi3 = true;
}
if (SIR4 == 0){
previousMillis4 = millis();
Posisi4 = true;
}
if ((data == "BATU LAYANG") || (ss1 == 0) ){
alamat1 = true;
}
if ((data == "SIANTAN HILIR") || (ss2 == 0) ){
alamat2 = true;
}
if ((data == "SIANTAN TENGAH") || (ss3 == 0) ){
alamat3 = true;
}
if ((data == "SIANTAN HULU") || (ss4 == 0) ){
alamat4 = true;
}
if (alamat1 == true && Posisi1 == true){
posisialamat1 = true;
}
if (alamat2 == true && Posisi2 == true){
posisialamat2 = true;
}
if (alamat3 == true && Posisi3 == true){
posisialamat3 = true;
}
if (alamat4 == true && Posisi4 == true){
posisialamat4 = true;
}
}
Serial.print(Posisi1);
Serial.print(Posisi2);
Serial.print(Posisi3);
Serial.print(Posisi4);
Serial.print(" ");
Serial.print(alamat1);
Serial.print(alamat2);
Serial.print(alamat3);
Serial.print(alamat4);
Serial.print(" ");
Serial.print(posisialamat1);
Serial.print(posisialamat2);
Serial.print(posisialamat3);
Serial.println(posisialamat4);
reset();
sortir();
delay(500);
}
void reset(){
unsigned long currentMillis = millis();
if (posisialamat1 == true && (currentMillis - previousMillis1 >= interval1)) {
if (Posisi1 == true) {
Posisi1 = false;
alamat1 = 0;
Serial.println("Status 1 FALSE");
posisialamat1 = false;
}
}
if (posisialamat2 == true && (currentMillis - previousMillis2 >= interval2)) {
if (Posisi2 == true) {
Posisi2 = false;
alamat2 = 0;
Serial.println("Status 2 FALSE");
posisialamat2 = false;
}
}
if (posisialamat3 == true && (currentMillis - previousMillis3 >= interval3)) {
if (Posisi3 == true) {
Posisi3 = false;
alamat3 = 0;
Serial.println("Status 3 FALSE");
posisialamat3 = false;
}
}
if (posisialamat4 == true && (currentMillis - previousMillis4 >= interval4)) {
if (Posisi4 == true) {
Posisi4 = false;
alamat4 = 0;
Serial.println("Status 4 FALSE");
posisialamat4 = false;
}
}
}
void sortir(){
if(posisialamat1 == 1){
Serial.println("sortir 1");
}
if(posisialamat2 == 1){
Serial.println("sortir 2");
}
if(posisialamat3 == 1){
Serial.println("sortir 3");
}
if(posisialamat4 == 1){
Serial.println("sortir 4");
}
}