#include <HX711.h>
#include <Servo.h>
#include <Stepper.h>
#define btn1 2
#define btn2 8
#define indikatorlight 3
Stepper myst(200, 7, 6, 5, 4);
Servo mys;
Servo mys1;
Servo mys2;
HX711 scale;
float berat = 0;
bool putar = false;
bool servostatus = false;
bool sabun = false;
bool air = false;
bool kering = false;
unsigned long servoOpenTime = 0;
unsigned long sot = 0;
void setup() {
pinMode(indikatorlight, OUTPUT);
pinMode(btn1, INPUT);
pinMode(btn2, INPUT);
scale.begin(A1, A0);
myst.setSpeed(50);
mys1.attach(A3);
mys.attach(A2);
mys2.attach(A4);
Serial.begin(9600);
}
void nberat() {
berat = scale.get_units(10) / 42 / 10;
Serial.print("Berat Baju : ");
Serial.print(berat);
Serial.println(" Kg");
delay(500);
}
void controlSabun() {
if (!sabun && berat >= 1) {
Serial.println("Masukkan sabun, tekan tombol kuning untuk melanjutkan...");
mys1.write(180);
sabun = true;
}
if (sabun && digitalRead(btn2) == LOW) {
Serial.println("Sabun dimasukkan dan tombol kuning ditekan, melanjutkan...");
mys1.write(90);
sabun = false;
}
}
void servoControl() {
if (berat >= 1 && !servostatus) {
unsigned long openTime = berat * 2000;
mys.write(180);
servoOpenTime = millis() + openTime;
servostatus = true;
Serial.print("Mengisi air ke mesin selama ");
Serial.print(openTime / 1000);
Serial.println(" detik");
}
if (servostatus && millis() >= servoOpenTime) {
mys.write(90);
servostatus = false;
Serial.println("menutup keran ditutup");
}
}
void mesinCuci() {
Serial.println("Menjalankan mesin");
if(berat >= 1 && !putar){
for (int i = 0; i < 5; i++) {
myst.step(200);
delay(500);
myst.step(-200);
delay(500);
}
putar = true;
}
if(putar){
Serial.println("Selesai, Melanjutkan...");
delay(1000);
putar = false;
}
}
void buangAir(){
if(berat >= 1 && !air){
mys2.write(180);
unsigned long ot = berat * 2000;
sot = millis() + ot;
Serial.print("Membuang air dari mesin selama ");
Serial.print(ot / 1000);
Serial.println(" detik");
air = true;
}
if(air && millis() >= sot){
delay(500);
air = false;
mys2.write(90);
Serial.println("Pembuangan selesai, melanjutkan...");
delay(500);
}
}
void pengeringan(){
if(berat >= 1 && !kering){
Serial.println("Melakukan pengeringan...");
for(int i = 0; i < 5; i++){
myst.step(200);
delay(500);
myst.step(-200);
delay(500);
}
kering = true;
}
if(kering){
kering = false;
Serial.println("pengeringan selesai.");
}
}
void loop() {
if (digitalRead(btn1) == LOW && !servostatus) {
nberat();
servoControl();
while (servostatus) {
servoControl();
}
controlSabun();
while (sabun) {
controlSabun();
}
mesinCuci();
while(putar){
mesinCuci();
}
buangAir();
while(air){
buangAir();
}
pengeringan();
while(kering){
pengeringan();
}
Serial.println("Baju telah dicuci :)");
Serial.println("Silahkan di ambil :)");
digitalWrite(indikatorlight, HIGH);
}
if(kering){
digitalWrite(indikatorlight, HIGH);
delay(1000);
digitalWrite(indikatorlight, LOW);
delay(1000);
}
}