#include <SoftwareSerial.h>
#include <Servo.h>
Servo myservo1; //katup_Air
Servo myservo2; //katup_Coklat
Servo myservo3; //katup_Kopi
Servo myservo4; //katup_Susu
Servo myservo5; //katup_Krim
SoftwareSerial mySerial(7, 8); // RX, TX
int counter = -1;
int c1 = -1;
int sw1 = 0;
int ambil1 = 0;
void readEncoder() {
int dtValue = digitalRead(3);
if (dtValue == HIGH) {
counter++; // Clockwise
if (counter > 8) counter = 8;
}
if (dtValue == LOW) {
counter--; // Counterclockwise
if (counter < 0) counter = 0;
}
}
int getCounter() {
int result;
noInterrupts();
result = counter;
interrupts();
return result;
}
void setup() {
Serial.begin(9600);
pinMode(2, INPUT);//clk_encoder
pinMode(3, INPUT);//dt_encoder
pinMode(4, INPUT_PULLUP);//sw_encoder
pinMode(A5, INPUT_PULLUP); //ambil minuman
mySerial.begin(9600);
myservo1.attach(11);
myservo2.attach(10);
myservo3.attach(9);
myservo4.attach(6);
myservo5.attach(5);
myservo1.write(90);
delay(10);
myservo2.write(90);
delay(10);
myservo3.write(90);
delay(10);
myservo4.write(90);
delay(10);
myservo5.write(90);
delay(10);
pinMode(A4, OUTPUT); //R_Air
pinMode(A3, OUTPUT); //R_Coklat
pinMode(A2, OUTPUT); //R_Kopi
pinMode(A1, OUTPUT); //R_Susu
pinMode(A0, OUTPUT); //R_Krim
pinMode(13, OUTPUT); //LED_Power
digitalWrite(13, HIGH);
attachInterrupt(digitalPinToInterrupt(2), readEncoder, FALLING);
}
void loop() {
int c = getCounter();
if (c != c1) {
mySerial.println(c);
switch (c) {
case -1:
Serial.println("Pilih dulu");
break;
case 0:
Serial.println("Ristretto");
break;
case 1:
Serial.println("Espresso");
break;
case 2:
Serial.println("Lungo");
break;
case 3:
Serial.println("Americano");
break;
case 4:
Serial.println("Cappuccino");
break;
case 5:
Serial.println("Latte");
break;
case 6:
Serial.println("Mocha");
break;
case 7:
Serial.println("Vienna");
break;
case 8:
Serial.println("Cacao");
break;
}
}
c1 = c;
int sw = !digitalRead(4);
if (sw && sw != sw1) {
mySerial.println('a');
Serial.print("Pilih ");
switch (c) {
case -1:
Serial.println("dulu");
break;
case 0:
Serial.println("Ristretto");
break;
case 1:
Serial.println("Espresso");
break;
case 2:
Serial.println("Lungo");
break;
case 3:
Serial.println("Americano");
break;
case 4:
Serial.println("Cappuccino");
break;
case 5:
Serial.println("Latte");
break;
case 6:
Serial.println("Mocha");
break;
case 7:
Serial.println("Vienna");
break;
case 8:
Serial.println("Cacao");
break;
}
}
sw1 = sw;
int ambil = !digitalRead(A5);
if (ambil && ambil != ambil1) {
mySerial.println('b');
Serial.println("ambil minuman");
}
ambil1 = ambil;
if (mySerial.available()) {
int d = mySerial.parseInt();
if (mySerial.read() == char(13)) {
switch (d) {
case 0:
digitalWrite(A4, HIGH);
Serial.println("Pemanasan Air");
break;
case 1:
digitalWrite(A4, LOW);
digitalWrite(A3, HIGH);
Serial.println("Ekstraksi Coklat");
break;
case 2:
digitalWrite(A3, LOW);
digitalWrite(A2, HIGH);
Serial.println("Ekstraksi Kopi");
break;
case 3:
digitalWrite(A2, LOW);
digitalWrite(A1, HIGH);
Serial.println("Perebusan Susu");
break;
case 4:
digitalWrite(A1, LOW);
digitalWrite(A0, HIGH);
Serial.println("Pengocokan Susu");
break;
case 5:
digitalWrite(A0, LOW);
myservo1.write(180);
Serial.println("Penuangan Air");
break;
case 6:
myservo1.write(90);
myservo2.write(180);
Serial.println("Penuangan Coklat");
break;
case 7:
myservo2.write(90);
myservo3.write(180);
Serial.println("Penuangan Kopi");
break;
case 8:
myservo3.write(90);
myservo4.write(180);
Serial.println("Penuangan Susu");
break;
case 9:
myservo4.write(90);
myservo5.write(180);
Serial.println("Penuangan Krim");
break;
default:
myservo5.write(90);
Serial.println("Selesai");
break;
}
}
}
}Indikator Power
Katup Air
Katup Coklat
Katup Susu
Katup Kopi
Katup Krim
Air
Susu
Krim
Coklat
Kopi
Pilihan
Ambil