Translate

Mengakses 3-channel Sensor Jarak Ultrasonik SRF04 dengan Penampil LCD NOKIA 5110 / 3310 ARDUINO

Mengakses 3-channel Sensor Jarak Ultrasonik SRF04 dengan Penampil LCD NOKIA 5110 / 3310 ARDUINO


        Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara mengakses LCD NOKIA 5110 / 3310 menggunakan Arduino atau sejenisnya yang mana digunakan untuk menampilkan nilai tiga buah jarak atau 3-channel sensor jarak, sebenarnya jika diganti dengan sensor lain bisa juga, misalkan sensor gas atau sensor suhu, yang membahagiakan lagi coding / program ini bisa digunakan untuk OLED juga dengan perintah dan library yang sama, untuk lebih jelasnya berikut adalah skema dan programnya, untuk library bisa didownload disini.

DOWNLOAD LIBRARY




a. Arduino UNO





b. LCD NOKIA 5110 / 3310


Ket :
1. VCC = 3.3 volt
2. Pin BL diberi Resistor 220 ohm lalu ke 5v
3. Pin CLK, CE, DIN, DC, CE diberi Resistor 1 KOhm lalu ke pin Arduino  




c. Sensor Jarak SRF04 





d. Program Arduino IDE

#include <U8glib.h>
#include <stdlib.h>

#define trigPin1 A0
#define echoPin1 A1

#define trigPin2 A2
#define echoPin2 A3

#define trigPin3 A4
#define echoPin3 A5

U8GLIB_PCD8544 u8g(8, 9, 11, 10, 12);  // CLK=8, DIN=9, CE=11, DC=10, RST=12

char tmp_string1[8];
char tmp_string2[8];
char tmp_string3[8];

int duration1, distance1;
int duration2, distance2;
int duration3, distance3;
 
void draw(void) {
 
 
  itoa(distance1, tmp_string1, 10);
  itoa(distance2, tmp_string2, 10);
  itoa(distance3, tmp_string3, 10);

 //u8g.setFont(u8g_font_fub30);
  //u8g.setFont(u8g_font_profont11);
  u8g.setFont(u8g_font_unifont);
  //u8g.setFont(u8g_font_osb21);
  //u8g.setFont(u8g_font_profont11);
 
  u8g.drawStr(0, 10, "Depan= ");
  u8g.drawStr(50, 10, tmp_string1);
 
  u8g.drawStr(0, 25, "Kanan= ");
  u8g.drawStr(50, 25, tmp_string2);

  u8g.drawStr(0, 40, "Kiri= "); 
  u8g.drawStr(50, 40, tmp_string3);
 
}


void setup(void) {
  Serial.begin (9600);
 
  pinMode(trigPin1, OUTPUT);
  pinMode(echoPin1, INPUT);

  pinMode(trigPin2, OUTPUT);
  pinMode(echoPin2, INPUT);

  pinMode(trigPin3, OUTPUT);
  pinMode(echoPin3, INPUT);
 
 
}


void loop(void) {

  digitalWrite(trigPin1, LOW);  // Added this line
  delayMicroseconds(2); // Added this line
  digitalWrite(trigPin1, HIGH);
  delayMicroseconds(10); // Added this line
  digitalWrite(trigPin1, LOW);
  duration1 = pulseIn(echoPin1, HIGH);
  distance1 = (duration1/2) / 29.1;

  digitalWrite(trigPin2, LOW);  // Added this line
  delayMicroseconds(2); // Added this line
  digitalWrite(trigPin2, HIGH);
  delayMicroseconds(10); // Added this line
  digitalWrite(trigPin2, LOW);
  duration2 = pulseIn(echoPin2, HIGH);
  distance2 = (duration2/2) / 29.1;

  digitalWrite(trigPin3, LOW);  // Added this line
  delayMicroseconds(2); // Added this line
  digitalWrite(trigPin3, HIGH);
  delayMicroseconds(10); // Added this line
  digitalWrite(trigPin3, LOW);
  duration3 = pulseIn(echoPin3, HIGH);
  distance3 = (duration3/2) / 29.1;


  u8g.firstPage(); 
  do {
    draw();
  } while( u8g.nextPage() );
 

  delay(100);


}





e. VIDEO HASILNYA












  

Mengakses HID RFID Reader DT 5506 EM Output Wiegand 26 bit Menggunakan Arduino

Mengakses HID RFID Reader DT 5506 EM Output Wiegand 26 bit Menggunakan Arduino


         Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara mengakses sebuah RFID Reader HID tipe DT 5506 EM menggunakan mikrokontroller Arduino, alat ini digunakan untuk membaca tag card / kartu sehingga bisa teridentifikasi ID-nya di komputer, alat ini sangat cocok untuk pengaman pintu rumah atau kantor, buka-tutup palang pintu / pagar, mesin absensi dan lain-lain. yang perlu diperhatikan yaitu output dari RFID reader ini adalah wiegand 26 bit sehingga harus terlebih dahulu diolah datanya sehingga menjadi sebuah code atau ID unix. untuk program dan skema seperti penjelasan dibawah ini.




a. Arduino Uno





b. HID RFID Reader DT 5506 EM







c. Program Arduino IDE

//sumber: http://www.pagemac.com/projects/rfid/arduino_wiegand

#define MAX_BITS 100                 // max number of bits
#define WEIGAND_WAIT_TIME  3000      // time to wait for another weigand pulse. 

unsigned char databits[MAX_BITS];    // stores all of the data bits
unsigned char bitCount;              // number of bits currently captured
unsigned char flagDone;              // goes low when data is currently being captured
unsigned int weigand_counter;        // countdown until we assume there are no more bits

unsigned long facilityCode=0;        // decoded facility code
unsigned long cardCode=0;            // decoded card code

// interrupt that happens when INTO goes low (0 bit)
void ISR_INT0()
{
  //Serial.print("0");   // uncomment this line to display raw binary
  bitCount++;
  flagDone = 0;
  weigand_counter = WEIGAND_WAIT_TIME; 
 
}

// interrupt that happens when INT1 goes low (1 bit)
void ISR_INT1()
{
  //Serial.print("1");   // uncomment this line to display raw binary
  databits[bitCount] = 1;
  bitCount++;
  flagDone = 0;
  weigand_counter = WEIGAND_WAIT_TIME; 
}

void setup()
{
  pinMode(13, OUTPUT);  // LED
  pinMode(2, INPUT);     // DATA0 (INT0)
  pinMode(3, INPUT);     // DATA1 (INT1)
 
  Serial.begin(9600);
  Serial.println("RFID Readers");
 
  // binds the ISR functions to the falling edge of INTO and INT1
  attachInterrupt(0, ISR_INT0, FALLING); 
  attachInterrupt(1, ISR_INT1, FALLING);
 

  weigand_counter = WEIGAND_WAIT_TIME;
}

void loop()
{
  // This waits to make sure that there have been no more data pulses before processing data
  if (!flagDone) {
    if (--weigand_counter == 0)
      flagDone = 1;   
  }
 
  // if we have bits and we the weigand counter went out
  if (bitCount > 0 && flagDone) {
    unsigned char i;
   
    Serial.print("Read ");
    Serial.print(bitCount);
    Serial.print(" bits. ");
   
    // we will decode the bits differently depending on how many bits we have
    // see www.pagemac.com/azure/data_formats.php for mor info
    if (bitCount == 35)
    {
      // 35 bit HID Corporate 1000 format
      // facility code = bits 2 to 14
      for (i=2; i<14; i++)
      {
         facilityCode <<=1;
         facilityCode |= databits[i];
      }
     
      // card code = bits 15 to 34
      for (i=14; i<34; i++)
      {
         cardCode <<=1;
         cardCode |= databits[i];
      }
     
      printBits();
    }
    else if (bitCount == 26)
    {
      // standard 26 bit format
      // facility code = bits 2 to 9
      for (i=1; i<9; i++)
      {
         facilityCode <<=1;
         facilityCode |= databits[i];
      }
     
      // card code = bits 10 to 23
      for (i=9; i<25; i++)
      {
         cardCode <<=1;
         cardCode |= databits[i];
      }
     
      printBits(); 
    }
    else {
      // you can add other formats if you want!
     Serial.println("Unable to decode.");
    }

     // cleanup and get ready for the next card
     bitCount = 0;
     facilityCode = 0;
     cardCode = 0;
     for (i=0; i<MAX_BITS; i++)
     {
       databits[i] = 0;
     }
  }
}

void printBits()
{
      // I really hope you can figure out what this function does
      Serial.print("FC = ");
      Serial.print(facilityCode);
      Serial.print(", CC = ");
      Serial.println(cardCode);
}





d. VIDEO HASILNYA











 

Membuat Alat Kendali Motor Stepper Idle Air Control Valve

Membuat Alat Kendali Motor Stepper Idle Air Control Valve


      Pada kesempatan yang berbahagia kali ini saya akan menjelaskan mengenai bagaimana cara membuat alat yang digunakan untuk mengecek suatu motor stepper idle air control valve, jadi alat ini semacam alat buat nge-check apakah idle air control valve nya bisa jalan atau rusak. alat ini memiliki dua buah tombol yang akan menggerakkan motor stepper maju atau mundur, jika maju maka tekan tombol kuning, jika mundur maka tekan tombol merah, jika stepper rusak maka akan ketahuan karena akan macet ditengah jalan saat ada perintah maju atau mundur. jika ujung motor stepper telah menyentuh limit switch artinya stepper normal dan akan menghidupkan led hijau, jika motor steppernya rusak maka led hijau tidak akan menyata. untuk lebih jelasnya berikut adalah skema dan programnya.




a. Minimums System ATMega8






b. Driver Motor L298





c. Motor Stepper Idle Air Control Valve







d. Push Button





e. Program Bascom AVR

$regfile = "m8def.dat"
$crystal = 11059200

Ddrb.0 = 1
Ddrb.1 = 1
Ddrc.5 = 0
Ddrc.4 = 0
Ddrc.3 = 0

Ddrd = &B11111111

Tbmerah Alias Pinc.5
Tbkuning Alias Pinc.4

Switch Alias Pinc.3

Set Portc.3
Set Portc.5
Set Portc.4

Ledbiru Alias Portb.1
Ledhijau Alias Portb.0


Dim Count As Integer

Mulai:

Ledbiru = 0
Ledhijau = 0

Count = 0

Do

If Tbmerah = 0 Then
Waitms 200

Goto Maju

End If

If Tbkuning = 0 Then
Waitms 200

Goto Mundur

End If


If Switch = 0 Then
Ledbiru = 0
Ledhijau = 1
Else
Ledbiru = 1
Ledhijau = 0
End If

Loop


Maju:

Do

Portd = &B00001000
Waitms 10

Portd = &B00000100
Waitms 10

Portd = &B00000010
Waitms 10

Portd = &B00000001
Waitms 10

Incr Count

Loop Until Count > 50

Goto Mulai

Return


Mundur:

Do

Portd = &B00000001
Waitms 10

Portd = &B00000010
Waitms 10

Portd = &B00000100
Waitms 10

Portd = &B00001000
Waitms 10

Incr Count

Loop Until Count > 50

Goto Mulai

Return





f. VIDEO HASILNYA










 

Membuat Alat Kontrol Relay ON / OFF dengan Timer / Delay Tertentu ARDUINO

Membuat Alat Kontrol Relay ON / OFF dengan Timer / Delay Tertentu ARDUINO


           Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang berfungsi untuk kendali suatu alat dengan tundaan / delay tertentu, alat ini menggunakan Relay sebagai pemutus / penyambung tegangan input, alat ini sebenarnya untuk kendali tanaman / penyiraman tanaman secara otomatis dengan waktu yang telah di-setting sebelumnya melalui program, alat ini menggunakan mikrokontroller Arduino Mega dengan jumlah relay yang dikendalikan adalah 20 buah. untuk lebih jelasnya berikut adalah skema dan programnya.




a. Arduino Mega





b. Skema Alat Keseluruhan





c Relay Omron





d. Program Arduino IDE

int relay1 = A0;
int relay2 = A1;
int relay3 = A2;
int relay4 = A3;
int relay5 = A4;
int relay6 = A5;
int relay7 = A6;
int relay8 = A7;
int relay9 = A8;
int relay10 = A9;
int relay11 = A10;
int relay12 = A11;
int relay13 = A12;
int relay14 = A13;
int relay15 = A14;
int relay16 = A15;
int relay17 = 53;
int relay18 = 49;
int relay19 = 47;
int relay20 = 45;


void setup(){
 
pinMode(relay1,OUTPUT);
pinMode(relay2,OUTPUT);
pinMode(relay3,OUTPUT);
pinMode(relay4,OUTPUT);
pinMode(relay5,OUTPUT);
pinMode(relay6,OUTPUT);
pinMode(relay7,OUTPUT);
pinMode(relay8,OUTPUT);
pinMode(relay9,OUTPUT);
pinMode(relay10,OUTPUT);
pinMode(relay11,OUTPUT);
pinMode(relay12,OUTPUT);
pinMode(relay13,OUTPUT);
pinMode(relay14,OUTPUT);
pinMode(relay15,OUTPUT);
pinMode(relay16,OUTPUT);
pinMode(relay17,OUTPUT);
pinMode(relay18,OUTPUT);
pinMode(relay19,OUTPUT);
pinMode(relay20,OUTPUT);


}


void loop(){

digitalWrite(relay1,HIGH);
delay(1000);
digitalWrite(relay1,LOW);
delay(200);

digitalWrite(relay2,HIGH);
delay(1000);
digitalWrite(relay2,LOW);
delay(200);

digitalWrite(relay3,HIGH);
delay(1000);
digitalWrite(relay3,LOW);
delay(200);

digitalWrite(relay4,HIGH);
delay(1000);
digitalWrite(relay4,LOW);
delay(200);

digitalWrite(relay5,HIGH);
delay(1000);
digitalWrite(relay5,LOW);
delay(200);

digitalWrite(relay6,HIGH);
delay(1000);
digitalWrite(relay6,LOW);
delay(200);

digitalWrite(relay7,HIGH);
delay(1000);
digitalWrite(relay7,LOW);
delay(200);

digitalWrite(relay8,HIGH);
delay(1000);
digitalWrite(relay8,LOW);
delay(200);

digitalWrite(relay9,HIGH);
delay(1000);
digitalWrite(relay9,LOW);
delay(200);

digitalWrite(relay10,HIGH);
delay(1000);
digitalWrite(relay10,LOW);
delay(200);

digitalWrite(relay11,HIGH);
delay(1000);
digitalWrite(relay11,LOW);
delay(200);

digitalWrite(relay12,HIGH);
delay(1000);
digitalWrite(relay12,LOW);
delay(200);

digitalWrite(relay13,HIGH);
delay(1000);
digitalWrite(relay13,LOW);
delay(200);

digitalWrite(relay14,HIGH);
delay(1000);
digitalWrite(relay14,LOW);
delay(200);

digitalWrite(relay15,HIGH);
delay(1000);
digitalWrite(relay15,LOW);
delay(200);

digitalWrite(relay16,HIGH);
delay(1000);
digitalWrite(relay16,LOW);
delay(200);

digitalWrite(relay17,HIGH);
delay(1000);
digitalWrite(relay17,LOW);
delay(200);

digitalWrite(relay18,HIGH);
delay(1000);
digitalWrite(relay18,LOW);
delay(200);

digitalWrite(relay19,HIGH);
delay(1000);
digitalWrite(relay19,LOW);
delay(200);

digitalWrite(relay20,HIGH);
delay(1000);
digitalWrite(relay20,LOW);
delay(200);

 
}





e. VIDEO HASILNYA











Membuat Kontroller Palang PIntu Masuk / Keluar / Parkir

Membuat Kontroller Palang PIntu Masuk / Keluar / Parkir


         Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang berfungsi untuk kendali motor dc dengan menggunakan relay dan mikrokontroller. alat ini sebagaimana namanya yaitu menggerakkan palang pintu saat ada kendaraan mau masuk atau keluar. alat ini dilengkapi dengan 2 buah sensor metal detektor untuk stop atas dan bawah. selain itu kendali buka tutup menggunakan tombol pada komputer server / kasir dan juga metal detektor yang diletakkan dibawah aspal guna deteksi kendaraan. untuk lebih jelasnya berikut adalah skema dan programnya.




a. Skema Kontroller





b. Sensor Metal Detektor





c. Program Bascom AVR

$regfile = "m16def.dat"
$crystal = 11059200

Config Lcdpin = Pin , Rs = Portc.7 , E = Portc.6 , Db4 = Portc.5
Config Lcdpin = Pin , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2
Config Lcd = 16 * 2

Config Adc = Single , Prescaler = Auto , Reference = Avcc

'Dim Adc0 As Word
'Dim Adc1 As Word

Dim X As Integer
Dim Y As Integer


Ddrb.0 = 1
Ddrb.1 = 1

Ddrd.5 = 0
Ddrd.6 = 0
Set Portd.5
Set Portd.6

Portb.0 = 1
Portb.1 = 1

Cls
Cursor Off

Start Adc

Main:

Do

X = Getadc(0)
Y = Getadc(1)

Upperline
Lcd X
Lowerline
Lcd Y

Waitms 200


'buka
If Pind.5 = 0 Then
Waitms 200
Goto Buka
End If

'tutup
If Pind.6 = 0 Then
Waitms 200

Do
Waitms 200
Portb.0 = 1
Portb.1 = 1
Loop Until Pind.6 = 1

Goto Tutup

End If

Loop


Buka:
Do

'Buka
Y = Getadc(1)

'Buka
Portb.0 = 1
Portb.1 = 0

Loop Until Y < 10

'Stop
Portb.0 = 1
Portb.1 = 1
Waitms 200

Goto Main

Return


Tutup:

Do

'tutup
X = Getadc(0)

'tutup
Portb.0 = 0
Portb.1 = 1

If Pind.5 = 0 Then
Waitms 200
Portb.0 = 1
Portb.1 = 1
Wait 1

Do

'Buka
Y = Getadc(1)

'Buka
Portb.0 = 1
Portb.1 = 0

Loop Until Y < 10

Portb.0 = 1
Portb.1 = 1
Waitms 200

Goto Main

End If


Loop Until X < 10

'stop
Portb.0 = 1
Portb.1 = 1
Waitms 200

Goto Main

Return





d. Gambar Alatnya













 

Membuat Kontroller / Kendali Motor DC atau AC Menggunakan Relay dan Mikrokontroller

Membuat Kontroller / Kendali Motor DC atau AC Menggunakan Relay dan Mikrokontroller


       Pada kesempatan kali ini dimalam yang sunyi dan menjelang pagi, saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang digunakan untuk kendali baik itu motor dc / ac maupun peralatan lainnya, misalnya lampu atau alarm / sirine. alat ini memang didesain untuk kontrol motor dengan kendali hanya arah putarannya saja, tidak bisa kecepatan. relay yang digunakan adalah relay omron dan mikrokontroller yang digunakan adalah ATMega16, yang perlu diperhatikan yaitu rangkaian driver relay yang digunakan. pada alat ini menggunakan optocoupler 4n35 dan transistor BD139 sebagai kendali relaynya. untuk lebih jelasnya berikut adalah skema dan programnya.



a. Skema Keseluruhan

  



b. Gambar Board





c. Gambar Alatnya









d. Program Uji Coba

$regfile = "m16def.dat"
$crystal = 11059200

Config Lcdpin = Pin , Rs = Portc.7 , E = Portc.6 , Db4 = Portc.5
Config Lcdpin = Pin , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2
Config Lcd = 16 * 2


Ddrb.0 = 1
Ddrb.1 = 1


Cls
Cursor Off


Do
Upperline
Lcd "test lcd"
Lowerline
Lcd "hello world"

'hidupkan relay
Portb.0 = 0
Portb.1 = 0
Wait 5

'matikan relay
Portb.0 = 1
Portb.1 = 1
Wait 1

Portb.0 = 0
Portb.1 = 1
Wait 3

Portb.0 = 1
Portb.1 = 0
Wait 3

Loop





e. VIDEO HASILNYA








Membuat Water Mixer / Alat Pencampur Minuman / Cairan Menggunakan Arduino WIFI Ethernet Shield

Membuat Water Mixer / Alat Pencampur Minuman / Cairan Menggunakan Arduino WIFI Ethernet Shield


        Pada kesempatan kali ini saya akan membahas mengenai bagaimana cara membuat sebuah alat yang digunakan untuk mencampur minuman atau cairan, misalnya terdapat susu, teh, gula dan kopi, kemudian si pembeli ingin memesan kopi susu sehingga yang akan keluar dari alat adalah gula, kopi dan susu, begitu pula dengan menu yang lain seperti teh susu atau kopi / teh manis. yang menarik dari alat ini adalah si pembeli bisa memesan dengan dua cara yaitu bisa dengan manual atau tombol, selain itu pembeli juga bisa memesan melalui handphone mereka atau komputer yang terhubung ke sebuah router yang sama dengan alat ini, komunikasinya menggunakan wifi. untuk lebih jelasnya berikut adalah skema dan programnya.




a. Arduino + Ethernet Shield





b. Solenoid Valve 1/2 dim





c. UBEC 3A maks 5A





d. Router WIFI





e. LCD 20x4





f. Program Arduino IDE

#include "Wire.h"
#include <LiquidCrystal.h>
#include <SPI.h>
#include <Ethernet.h>

LiquidCrystal lcd(A8, A9, A13, A12, A11, A10);

byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,0,99);

EthernetServer server(80);

String readString;
int a;
int b;
int c;
int d;


void setup() {

  lcd.begin(20, 4);
  lcd.clear();
  lcd.noCursor();

//A0 = RELAY1 = KOPI
//A1 = RELAY2 = SUSU
//A2 = RELAY3 = TEH
//A3 = RELAY4 = GULA
 
pinMode(A0,OUTPUT);;
pinMode(A1,OUTPUT);;
pinMode(A2,OUTPUT);;
pinMode(A3,OUTPUT);;

pinMode(18,INPUT);;
pinMode(19,INPUT);;
pinMode(20,INPUT);;
pinMode(21,INPUT);;

digitalWrite(18,HIGH);
digitalWrite(19,HIGH);
digitalWrite(20,HIGH);
digitalWrite(21,HIGH);

//digitalWrite(A0,HIGH);
//digitalWrite(A1,HIGH);
//digitalWrite(A2,HIGH);
//digitalWrite(A3,HIGH);

 
  Serial.begin(9600);
   while (!Serial) {
  }

  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}

void loop() {

  EthernetClient client = server.available();
  if (client) {
   
   
  lcd.setCursor(3, 0);
  lcd.print("ANDRE CAFE MENU");
  lcd.setCursor(0, 1);
  lcd.print("1.KOPI");
  lcd.setCursor(0, 2);
  lcd.print("2.TEH");
  lcd.setCursor(0, 3);
  lcd.print("3.SUSU");

   
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
     if (readString.length() < 100) {

          //store characters to string
          readString += c;
          //Serial.print(c);
        }
        if (c == '\n' && currentLineIsBlank) {
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          client.println(" ");
          client.println("<title> Andre Cafe </title> ");    
          client.println("<body bgcolor = #000000>");    
          client.println("<left>");
            client.println("<font color = yellow><center><h1>DAFTAR MENU MINUMAN ANDRE CAFE</h1></center><br></font>");
            client.println("<font color = #FFFFFF>");                 
          client.println("<h2>KOPI :</h2>");
          client.println("<br>");
          //client.println("<center");
          client.println("<a href = \"/?lighton1\"\"><input type = 'button' value = 'KOPI' ></a>");
          client.println("<a href = \"/?lighton2\"\"><input type = 'button' value = 'KOPI HITAM' ></a> ");
          client.println("<a href = \"/?lighton3\"\"><input type = 'button' value = 'KOPI SUSU' ></a> ");
          //client.println("</center");
          client.println("<br>");
          client.println("<br>");
          client.println("<h2>TEH :</h2>");
          client.println("<br>");
          //client.println("<center");
          client.println("<a href = \"/?lighton4\"\"><input type = 'button' value = 'TEH ' ></a>");
          client.println("<a href = \"/?lighton5\"\"><input type = 'button' value = 'TEH TARIK' ></a> ");
          client.println("<a href = \"/?lighton6\"\"><input type = 'button' value = 'TEH MANIS ' ></a> ");
          //client.println("</center");
          client.println("<br>");
          client.println("<br>");
          client.println("<h2>SUSU :</h2>");
          client.println("<br>");
          //client.println("<center");
          client.println("<a href = \"/?lighton7\"\"><input type = 'button' value = 'SUSU MANIS' ></a> ");
          client.println("<a href = \"/?lighton8\"\"><input type = 'button' value = 'SUSU TAWAR' ></a> ");
          //client.println("</center");
          client.println("<br>");
          client.println("</left>");
          client.println("</body>");
          client.println("</html>");
           
          break;      
        }   
        if (c == '\n') {
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          currentLineIsBlank = false;
        }
      }
    }
    delay(1);
    client.stop();
    Serial.println("client disonnected");
  }
          //kopi
          if(readString.indexOf("?lighton1") >0)
          {
            //gula
            digitalWrite(A3,HIGH);
            delay(1000);
            digitalWrite(A3,LOW);
            delay(1000);
            //kopi
            digitalWrite(A0,HIGH);
            delay(1000);
            digitalWrite(A0,LOW);
            delay(1000);       
           
          }
   
          if(readString.indexOf("?lighton2") >0)
          {

            //kopi
            digitalWrite(A0,HIGH);
            delay(1000);
            digitalWrite(A0,LOW);
            delay(1000);       


          }         
         
          if(readString.indexOf("?lighton3") >0)
          {

            //gula
            digitalWrite(A3,HIGH);
            delay(1000);
            digitalWrite(A3,LOW);
            delay(1000);
            //kopi
            digitalWrite(A0,HIGH);
            delay(1000);
            digitalWrite(A0,LOW);
            delay(1000);       
            //susu
            digitalWrite(A1,HIGH);
            delay(1000);
            digitalWrite(A1,LOW);
            delay(1000);

          } 
        
        
          if(readString.indexOf("?lighton4") >0)
          {

            //teh
            digitalWrite(A2,HIGH);
            delay(1000);
            digitalWrite(A2,LOW);
            delay(1000);       
 
          } 
         
         
          if(readString.indexOf("?lighton5") >0)
          {
           
            //gula
            digitalWrite(A3,HIGH);
            delay(1000);
            digitalWrite(A3,LOW);
            delay(1000);
            //teh
            digitalWrite(A2,HIGH);
            delay(1000);
            digitalWrite(A2,LOW);
            delay(1000);       
            //susu
            digitalWrite(A1,HIGH);
            delay(1000);
            digitalWrite(A1,LOW);
            delay(1000);

          } 
         
         
          if(readString.indexOf("?lighton6") >0)
          {

            //gula
            digitalWrite(A3,HIGH);
            delay(1000);
            digitalWrite(A3,LOW);
            delay(1000);       
            //teh
            digitalWrite(A2,HIGH);
            delay(1000);
            digitalWrite(A2,LOW);
            delay(1000);

          }
        
        
          if(readString.indexOf("?lighton7") >0)
          {

            //gula
            digitalWrite(A3,HIGH);
            delay(1000);
            digitalWrite(A3,LOW);
            delay(1000);       
            //susu
            digitalWrite(A1,HIGH);
            delay(1000);
            digitalWrite(A1,LOW);
            delay(1000);

          } 
         
         
          if(readString.indexOf("?lighton8") >0)
          {

            //susu
            digitalWrite(A1,HIGH);
            delay(1000);
            digitalWrite(A1,LOW);
            delay(1000);

          } 

a = digitalRead(19);
b = digitalRead(18);
c = digitalRead(20);
d = digitalRead(21);

 if(a == LOW){
 lcd.clear();
delay(500);
   menu1();
 }

 if(b == LOW){
 lcd.clear();
delay(500);
   menu2();  
 }

 if(c == LOW){
 lcd.clear();
delay(500);
   menu3();  
 }

if(d == LOW){

 lcd.clear();
    
  lcd.setCursor(3, 0);
  lcd.print("ANT CAFE MENU");
  lcd.setCursor(0, 1);
  lcd.print("1.KOPI");
  lcd.setCursor(0, 2);
  lcd.print("2.TEH");
  lcd.setCursor(0, 3);
  lcd.print("3.SUSU");

    
 }

 
         
         
         readString="";

}




void menu1(){

// lcd.clear();
a = digitalRead(19);
b = digitalRead(18);
c = digitalRead(20);
d = digitalRead(21);
    
  lcd.setCursor(3, 0);
  lcd.print("Menu Kopi");
  lcd.setCursor(0, 1);
  lcd.print("1.Kopi Hitam Manis");
  lcd.setCursor(0, 2);
  lcd.print("2.Kopi Hitam");
  lcd.setCursor(0, 3);
  lcd.print("3.Kopi Susu");
 
  if(d == LOW){
  return;
  }
 
  if(a == 0){
 
              //gula
            digitalWrite(A3,HIGH);
            delay(1000);
            digitalWrite(A3,LOW);
            delay(1000);
            //kopi
            digitalWrite(A0,HIGH);
            delay(1000);
            digitalWrite(A0,LOW);
            delay(1000);       
  }
    if(b == 0){
 
            //kopi
            digitalWrite(A0,HIGH);
            delay(1000);
            digitalWrite(A0,LOW);
            delay(1000);       
  }
    if(c == 0){
 
            //gula
            digitalWrite(A3,HIGH);
            delay(1000);
            digitalWrite(A3,LOW);
            delay(1000);
            //kopi
            digitalWrite(A0,HIGH);
            delay(1000);
            digitalWrite(A0,LOW);
            delay(1000);
            //susu
            digitalWrite(A1,HIGH);
            delay(1000);
            digitalWrite(A1,LOW);
            delay(1000);      
  }
 
menu1();
}




void menu2(){
   //lcd.clear();
a = digitalRead(19);
b = digitalRead(18);
c = digitalRead(20);
d = digitalRead(21);
    
  lcd.setCursor(3, 0);
  lcd.print("Menu Teh");
  lcd.setCursor(0, 1);
  lcd.print("1.Teh");
  lcd.setCursor(0, 2);
  lcd.print("2.Teh Tarik");
  lcd.setCursor(0, 3);
  lcd.print("3.Teh Manis");
 
  if (a == 0){
 
            //teh
            digitalWrite(A2,HIGH);
            delay(1000);
            digitalWrite(A2,LOW);
            delay(1000);   
  }

  if (b == 0){
 
              //gula
            digitalWrite(A3,HIGH);
            delay(1000);
            digitalWrite(A3,LOW);
            delay(1000);
            //teh
            digitalWrite(A2,HIGH);
            delay(1000);
            digitalWrite(A2,LOW);
            delay(1000);       
            //susu
            digitalWrite(A1,HIGH);
            delay(1000);
            digitalWrite(A1,LOW);
            delay(1000);
   
  }
 
    if (c == 0){
 
              //gula
            digitalWrite(A3,HIGH);
            delay(1000);
            digitalWrite(A3,LOW);
            delay(1000);
            //teh
            digitalWrite(A2,HIGH);
            delay(1000);
            digitalWrite(A2,LOW);
            delay(1000);       
           
   
  }
 
 
if(d == LOW){
  return;
  }
 
menu2();

}



void menu3(){
  //lcd.clear();
a = digitalRead(19);
b = digitalRead(18);
c = digitalRead(20);
d = digitalRead(21);
    
  lcd.setCursor(3, 0);
  lcd.print("Menu Susu");
  lcd.setCursor(0, 1);
  lcd.print("1.Susu Manis");
  lcd.setCursor(0, 2);
  lcd.print("2.Susu Tawar");

if(a == 0){
            //gula
            digitalWrite(A3,HIGH);
            delay(1000);
            digitalWrite(A3,LOW);
            delay(1000);       
            //susu
            digitalWrite(A1,HIGH);
            delay(1000);
            digitalWrite(A1,LOW);
            delay(1000);
}

if(b == 0){
        //susu
            digitalWrite(A1,HIGH);
            delay(1000);
            digitalWrite(A1,LOW);
            delay(1000);
}


if(d == LOW){
  return;
  }
 
menu3();

}





g. VIDEO HASILNYA