Smart Home - Arduino Embedded Web Server Laporan.docx
-
Upload
leonardus-retho -
Category
Documents
-
view
79 -
download
14
description
Transcript of Smart Home - Arduino Embedded Web Server Laporan.docx
SMART HOME ARDUINO EMBEDDED WEB SERVER BERBASIS MIKROKONTROLLER ARDUINO MEGA 2560 DAN ETHERNET SHIELD
MAKALAH
Diajukan Untuk Memenuhi Persyaratan Menyelesaikan
Mata Kuliah PROJECT AKHIR
Oleh:
AHMAD JATI WIDODO (0220120049)
ARDHINATA BAYU KURNIAWAN (0220120051)
DAMAR ARDYANSYAH (0220120053)
PROGRAM STUDI
TEKNIK PRODUKSI DAN PROSES MANUFAKTUR
KONSENTRASI MEKATRONIKA
POLITEKNIK MANUFAKTUR ASTRA
JAKARTA
2015
BAB I
PENDAHULUAN
1.1 Latar belakang
Semakin berkembangnya teknologi yang pesat saat ini menuntut mahasiswa
untuk membuat inovasi-inovasi yang berguna bagi masyarakat. Semua inovasi
dilakukan guna mempermudah masyarakat dalam menjalankan aktivitasnya.
Aktivitas sehari-hari masyarakat di dalam rumah seperti halnya menyalakan lampu
dan perangkat lainnya masih menggunakan tombol / saklar fisik. Dimana masih perlu
sentuhan atau penekanan secara fisik dari manusia ke tombol. Jarak antara letak
tombol dan letak manusia pada saat akan menyalakan perangkat tersebut tidak jarang
terlampau jauh. Sehingga membuat manusia mengeluarkan tenaga lebih untuk
menjangkau letak tombol tersebut.
Smart Home Arduino Embedded Web Server adalah sebuah inovasi di mana
dapat meringankan manusia dalam hal mengontrol perangkat rumah tangga.
Masyarakat dapat mengontrol perangkat rumah tangga meskipun tidak berada di
dalam rumah. Hanya perlu gadget atau perangkat handphone yang mendukung
koneksi wifi (wireless) dan mempunyai aplikasi web browser, manusia dapat
mengontrol perangkat rumah tangga secara fleksibel.
Pada proyek ini, penulis akan membahas bagaimana web server dijalankan
hingga dapat di akses oleh client/user yang kemudian dapat mengontrol perangkat
yang dikontrol oleh Arduino Mega 2560 dengan bantuan Ethernet Shield.
1.2 Tujuan penelitian
Tujuan dari pembuatan Smart Home Arduino Embedded Web Server ini adalah:
1. Membuat prototype Smart Home menggunakan Arduino Mega 2560 yang
dapat diakses oleh web client.
2. Membuat sistem kontrol Smart Home agar dapat berfungsi sebagaimana
fungsinya.
1.3 Manfaat
Manfaat dari pembuatan Smart Home Arduino Embedded Web Server ini adalah:
1. Mahasiswa dapat mengerti teknologi informasi dan komunikasi yang
dikombinasikan dengan sistem otomasi berbasis web.
2 BAB II
2.1 Pengertian Mikronkontroller
Mikrokontroler disebut juga MCU atau μC adalah salah satu komponen
elektronik atau IC yang memiliki beberapa sifat seperti komputer, yaitu: CPU
(Central Processing Unit) atau unit pemprosesan terpusat, kode memori, data memori,
I/O (port untuk input dan output), bentuknya yang kecil dan harganya murah
sehingga dapat dicangkokkan (embedded) di dalam berbagai peralatan rumah tangga,
kantor, industri atau robot. Mikrokontroller dapat diprogrammelalui program
software yang dapat menulis, membaca dan dihapus isi mikrokontroler tersebut.
Mikrokontroler sering digunakan dalam beberapaperalatan otomatik seperti
pengontrol mesin di mobil, pengontrol jarak jauh, mesin cuci otomatis,
pengkondisian udara (AC) peralatan perkantoran dll. Keuntungan dari penggunaan
mikrokontroler yaitu memperkecil ukuran peralatan, mengurangi biaya dan konsumsi
listrik.
2.1.1 Bagian-bagian mikrokontroller
Secara umum mikro kontroller terbagia atas beberapa bagian yang
memiliki fungsinya masing masing. komponen-komponen dari suatu
mikrokontroler yang mempunyai fasilitas lengkap beserta peranti eksternal
yang biasanya dihubungkan ke/dari mikrokontroler. Tidak semua
mikrokontroler mempunyai semua komponen tersebut, misalnya konverter
A/D dan D/A hanya terdapat pada beberapa jenis mikrokontroler tertentu.
Dalam suatu mikrokontroler biasanya terdapat tiga buah memori, yaitu
RAM, ROM dan EEPROM. RAM dan ROM hampir selalu ada pada setiap
mikrokontroler, sedangkan EEPROM hanya terdapat pada beberapa jenis
mikrokontroler tertentu. Bagian-bagian dari mikro kontroller dapat
ditunjukan pada gambar
a. CPU (Central Processing Unit) pada mikrokontroler berupa
mikroprosesor yang berfungsi sebagai otak dari mikrokontroler.
Mikroprocessor adalah peranti yang berfungsi untuk memproses data,
yaitu berupa fungsi logika dan aritmatika.
b. RAM digunakan sebagai penyimpan data sementara yang berupa
register-register. Register adalah tempat penyimpanan data yang
berkaitan dengan banyak hal, misalnya variabel dalam program, keadaan
input/output, serta pengaturan timer/counter dan komunikasi serial.
Telah disebutkan sebelumnya data pada RAM akan hilang saat catu daya
dicabut.
c. ROM digunakan sebagai tempat penyimpanan program. ROM yang
banyak dipakai pada mikrokontroler saat ini adalah flash PEROM
(Programmable Erasable ROM), yang mirip seperti memori pada flash
disk, namun bedanya adalah flash PEROM hanya dapat dihapus dan
ditulis secara sekaligus. EEPROM biasanya digunakan untuk
menyimpan data yang tidak boleh hilang meski catu daya dihapus.
Meski fungsinya mirip EEPROM biasanya lebih sedikit digunakan
dibanding RAM karena kecepatan akses EEPROM yang lebih lambat.
Contoh penggunaannya adalah penyimpanan data password. atau setting
suatu sistem.
d. Timer/counter adalah peranti untuk mencacah sinyal dari clock ataupun
sinyal dari suatu kejadian. Jika sinyal yang dicacah berasal dari clock
maka peranti ini berfungsi sebagai pewaktu, sedangkan jika berasal dari
clock maka peranti ini berfungsi sebagai pencacah. Pewaktu bisa
digunakan untuk bermacam-macam kegunaan, misalnya untuk
menghasilkan tundaan waktu dan untuk mengukur selang waktu suatu
proses.
e. Peranti antarmuka ke input/output pada mikrokontroler disebut sebagai
port. Pada satu port I/O digital terdiri beberapa pin, biasanya berjumlah
8 atau satu byte, dengan masing-masing pin dapat mentransfer satu bit
data biner (logika 0 dan 1) dari/ke mikrokontroler. Selain port I/O
digital, pada suatu mikrokontroler juga dapat berkomunikasi dengan
peranti lain menggunakan komunikasi serial. Terdapat berbagai standar
atau protokol untuk komunikasi serial seperti SPI (Serial Peripherial
Interface), I2C (Inter-Integrated Circuit), 1-wire, 2-wire, UART
(Universal Asynchronous Receiver Transmitter) dan USART (Universal
Synchronous- Asynchronous Receiver Transmitter).
2.2 Konsep dan Perancangan
Sebelum dilakukan pembuatan Smart Home Arduino Embedded Web Server,
maka perlu adanya konsep dan perancangan. Konsep dan perancangan yang
dilakukan meliputi konsep jaringan yang digunakan, kemudian menentukan
perangkat input dan output yang digunakan, sampai dengan perancangan wiring yang
akan digunakam. Berikut adalah tahapan – tahapan yang dilakukan pada konsep dan
perancangan Smart Home Arduino Embedded Web Server.
2.2.1 Perangkat yang digunakan
Pada pembuatan Smart Home Arduino Embedded Web Server ini, membutuhkan beberapa komponen penyusun agar dapat bekerja sesuai dengan apa yang diinginkan. Berikut merupakan daftar komponen yang digunakan:
1. Arduino Mega 25602. Arduino Ethernet Shield + Micro SD Card (Max 2 Gb)3. 5VDC Relay 4 Channel4. LinkSys Wifi Router5. Kabel LAN6. USB Printer7. Laptop (Untuk pemrograman)
Ke tujuh komponen tersebut merupakan komponen utama yang digunakan dalam pembuatan Smart Home Arduino Embedded Web Server.
2.2.2 Software yang digunakan
Pada proses pembuatan Smart Home Arduino Embedded Web Server ini membutuhkan beberapa software untuk mendukung dalam proses pembuatan sistem kontronya. Diantaranya:
1. Notepad ++
Notepad++ digunakan untuk membuat script program halaman web yang akan di embedd pada MicroSD Card yang di pasang pada Arduino Ethernet Shield. Berikut merupakan tampilan pada aplikasi Notepad ++
Notepad++ mendukung banyak bahasa pemrograman website. Diantaranya adalah bahasa html, php, java, Assembly, asp, C, C#, dan masih banyak lainnya. Pada pembuatan proyek ini, penulis menggunakan bahasa html.
2. Arduino IDE
Arduino IDE merupakan software yang digunakan untuk membuat program mikrokontroller arduino mega 2560. Bahasa yang digunakan adalah bahasa pemrograman C yang telah dimodifikasi oleh developer arduino menjadi bahasa C Arduino yang mempunyai ciri khas tersendiri dan berbeda dengan bahasa C pada umunya. Arduino IDE dilengkapi dengan library yang sangat membantu Programmer pada proses pembuatan program. Berikut adalah tampilan dari software Arduino IDE.
3. Linksys Basic Setup
Linksys Basic Setup merupakan software tertanam pada wifi router yang dapat diakses dengan IP default yang dapat digunakan untuk mengatur konfigurasi dari wifi router itu sendiri. IP default yang digunakan adalah “192.168.1.1” (hilangkan tanda petik). Cara mengakses adalah dengan menyambungkan komputer / laptop dengan wifi router menggunakan kabel LAN atau dengan cara menyambungkan komputer / laptop tersebut dengan jaringan yang telah dibuat pada wifi router itu sendiri. Kemudian buka aplikasi browser dan masukkan IP default tersebut dan enter. Berikut merupakan tampilan dari Linksys Basic Setup.
4. Browser
Browser di sini digunakan untuk melihat hasil pembuatan halaman web serta digunakan untuk akses Linksys basi setup. Terdapat banyak aplikasi browser diantaranya adalah Google Chrome, Mozilla Firefox, UC Browser, Internet Explorer dan masih banyak lagi lainnya. Berikut adalah contoh dari tampilan web browser Mozilla Firefox.
2.2.3 Topologi jaringan
Berikut adalah ilustrasi jaringan yang digunakan oleh Smart Home Arduino
Embedded Web Server.
Berdasarkan topologi jaringan diatas, sistem kontrol Smart Home dibagi menjadi
beberapa bagian, yaitu:
1. Perangkat Input:
a. Push Button
b. Client / User (Komputer / Laptop)
2. Perangkat Proses:
a. Arduino Mega 2560
b. Arduino Ethernet Shield
c. Linksys Wifi Router
3. Perangkat Output:
a. 5VDC Relay 4 channel
b. Lampu
c. Stop kontak (terminal)
2.2.4 Pembuatan Wiring Sistem Kontrol
Berikut ini adalah diagram wiring pada project smart home .
Dan berikut merupakan tabel I/O yang digunakan pada Arduino Mega 2560:
2.2.5 Konfigurasi IP Smart Home
Dalam melakukan konfigurasi IP smart home terdapat 2 langkah, yaitu
konfigurasi set-up wi-fi router dan konfigurasi Arduino.
Berikut ini adalah langkah langkah dalam melakukan konfigurasi router Wi-fi
. Buka browser lalu masukan address 192.168.1.1 maka akan muncul basic set-up
Linksys Wi-fi router seperti pada gambar . Set-up ini digunakan untuk
mengkonfigurasi alamat IP public Router Wi-fi dengan cara diisikan pada kolom
Internet Ip address .
Setelah melakukan konfigurasi pada Internet Ip address kemudian pilih pada tab
application & gaming untuk melakukan konfigurasi Ip yang di-forward oleh router
wi-fi yang juga sebagai Ip address pada ethernet shield arduino. Berikut merupakan
gambar konfigurasi Ip yang di-forward wi-fi router.
2.2.6 Pembuatan Program HTML (Terlampir)
Setelah melakukan konfigurasi pada router wifi , kemudian melakukan
pembuatan program html untuk membuat tampilan pada Ip address yang telah
ditentukan, berikut adalah program html pada smart home berbasis arduino.
Pembuatan program html menggukanan software notepad++ kemudian di atur pada
tap language dipilih bahasa html.
Berikut adalah gambar setelah membuat program html maka tampilan web server
pada ip 192.168.1.101
2.2.7 Pembuatan Program Arduino (Terlampir)
Setelah membuat program html yang digunakan untuk tampilan web server
selanjutnya adalah membuat program arduino sebagai sistem kontrol dari Smart
Home. Program arduino di tulis pada software Arduino IDE. Berikut merupakan
tampilan program pada Arduino.
2.3 Pengujian
Berikut ini adalah pengujian yang dilakukan pada smart home setelah dilakukan
program dan konfigurasi IP . Pengujian ini dikendalikan melalui aplikasi browser
untuk mengakses IP yang telah dikonfigurasi.
OK NG1 D5 PUSH BUTTON MENYALAKAN LAMPU D22 LAMPU LAMPU 1 MENYALA v2 D6 PUSH BUTTON MENYALAKAN LAMPU D23 LAMPU LAMPU 2 MENYALA v3 D7 PUSH BUTTON MENYALAKAN LAMPU D24 LAMPU LAMPU 3 MENYALA v4 D8 PUSH BUTTON MENYALAKAN STOP KONTAK D25 STOP KONTAK STOP KONTAK AKTIF v
HASILNO ALAMAT INPUT PERANGKAT FUNGSI ALAMAT OUTPUT PERANGKAT PARAMETER
3 BAB III
PENUTUP
3.1 kesimpulan
Pembuatan Smart Home Arduino Embedded Web Server menggunakan
perangkat kontrol Arduino Mega 2560 dan Ethernet Shield. Web server yang
disimpan pada media penyimpana SD Card dapat diakses melalui web
browser yang kemudian dapat mengontrol perangkat rumah tangga.
3.2 saran
Kedepannya, Smart Home dapat diakses melalui jaringan internet dari
seluruh tempat. Sehingga tidak lagi menggunakan embedded web server
melalui media penyimpanan Micro SD Card, tetapi sudah disimpan dalam
web hosting sehingga dapat diakses dengan menggunakan jaringan internet.
Refernsi
http://www.vedcmalang.com/pppptkboemlg/index.php/menuutama/listrik-electro/
1045-part-2
http://www.vedcmalang.com/pppptkboemlg/index.php/menuutama/listrik-electro/
1053-part-3
LAMPIRAN
1. Program HTML
<!DOCTYPE html><html> <head> <title>Smart Home Mekatronika 2015</title> <script> strLED1 = "";
strLED2 = "";strLED3 = "";strLED4 = "";
var LED1_state = 0;var LED2_state = 0;var LED3_state = 0;var LED4_state = 0;
function GetArduinoIO() { nocache = "&nocache=" + Math.random() * 1000000; var request = new XMLHttpRequest(); request.onreadystatechange = function() { if (this.readyState == 4) { if (this.status == 200) { if (this.responseXML != null) { // XML file received - contains analog values, switch values and LED states var count;
//LED1 if (this.responseXML.getElementsByTagName('LED')[0].childNodes[0].nodeValue === "on0") { document.getElementById("LED1").innerHTML = "Lampu 1 ON (D22)"; LED1_state = 1; } if (this.responseXML.getElementsByTagName('LED')[0].childNodes[0].nodeValue === "off0") { document.getElementById("LED1").innerHTML = "Lampu 1 OFF (D22)"; LED1_state = 0; }
//LED2if (this.responseXML.getElementsByTagName('LED')[1].childNodes[0].nodeValue ===
"on1") { document.getElementById("LED2").innerHTML = "Lampu 2 ON (D23)"; LED2_state = 1; } if (this.responseXML.getElementsByTagName('LED')[1].childNodes[0].nodeValue === "off1") { document.getElementById("LED2").innerHTML = "Lampu 2 OFF (D23)"; LED2_state = 0; }
//LED3if (this.responseXML.getElementsByTagName('LED')[2].childNodes[0].nodeValue ===
"on2") { document.getElementById("LED3").innerHTML = "Lampu 3 ON (D24)"; LED3_state = 1; } if (this.responseXML.getElementsByTagName('LED')[2].childNodes[0].nodeValue === "off2") { document.getElementById("LED3").innerHTML = "Lampu 3 OFF (D24)"; LED3_state = 0; }
//LED4if (this.responseXML.getElementsByTagName('LED')[3].childNodes[0].nodeValue ===
"on3") { document.getElementById("LED4").innerHTML = "Stop Kontak ON (D25)"; LED4_state = 1; } if (this.responseXML.getElementsByTagName('LED')[3].childNodes[0].nodeValue === "off3") { document.getElementById("LED4").innerHTML = "Stop Kontak OFF (D25)"; LED4_state = 0; } } } }
} // send HTTP GET request with LEDs to switch on/off if any request.open("GET", "ajax_inputs" + strLED1 + strLED2 + strLED3 + strLED4 + nocache, true); request.send(null); setTimeout('GetArduinoIO()', 1000); strLED1 = "";
strLED2 = "";strLED3 = "";strLED4 = "";
} function GetButton1() { if (LED1_state === 1) { LED1_state = 0; strLED1 = "&LED1=0"; } else { LED1_state = 1; strLED1 = "&LED1=1"; } }
function GetButton2() { if (LED2_state === 1) { LED2_state = 0; strLED2 = "&LED2=0"; } else { LED2_state = 1; strLED2 = "&LED2=1"; } }
function GetButton3() { if (LED3_state === 1) { LED3_state = 0; strLED3 = "&LED3=0"; } else { LED3_state = 1; strLED3 = "&LED3=1"; } }
function GetButton4() { if (LED4_state === 1) { LED4_state = 0; strLED4 = "&LED4=0"; } else { LED4_state = 1; strLED4 = "&LED4=1"; } } </script> <style> .IO_box { float: left; margin: 0 20px 20px 0; border: 1px solid blue; padding: 0 5px 0 5px; width: 120px; } h1 { font-size: 120%; color: blue; margin: 0 0 10px 0; } h2 { font-size: 85%; color: #5734E6; margin: 5px 0 5px 0; }
p, form, button { font-size: 80%; color: #252525; } .small_text { font-size: 70%; color: #737373; }
marquee_text{font-size: 100%;color: #252525;
} </style> </head> <body onload="GetArduinoIO()">
<marquee direction="up" behavior="scroll" scrollamount="2" scrolldelay="100" height="40px">Selamat Datang di Smart Home Web Controller</marquee> <h1>Politeknik Manufaktur Astra</h1>
<h1>Smart Home - Mekatronika</h1><h1>2015</h1><br>
<div class="IO_box"> <h2>Lampu 1</h2> <button type="button" id="LED1" onclick="GetButton1()">Lampu 1 OFF (D22)</button><br /><br /> </div>
<div class="IO_box"> <h2>Lampu 2</h2> <button type="button" id="LED2" onclick="GetButton2()">Lampu 2 OFF (D23)</button><br /><br /> </div>
<div class="IO_box"> <h2>Lampu 3</h2> <button type="button" id="LED3" onclick="GetButton3()">Lampu 3 OFF (D24)</button><br /><br /> </div>
<div class="IO_box"> <h2>Stop Kontak</h2> <button type="button" id="LED4" onclick="GetButton4()">Stop Kontak OFF (D25)</button><br /><br /> </div> </body><br></html
2. Program Arduino
/* * Program Name : Arduino Smart Home Ethernet Controller * Author : Ahmad Jati Widodo * Year : 2015 * Focus : Mechatronics * Study : Politeknik Manufaktur Astra, Jakarta */
#include <SPI.h>#include <Ethernet.h>#include <SD.h>// size of buffer used to capture HTTP requests#define REQ_BUF_SZ 60
// MAC address from Ethernet shield sticker under boardbyte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };IPAddress ip(192, 168, 1, 106); // IP address, may need to change depending on networkEthernetServer server(80); // create a server at port 80File webFile; // the web page file on the SD cardchar HTTP_req[REQ_BUF_SZ] = {0}; // buffered HTTP request stored as null terminated stringchar req_index = 0; // index into HTTP_req bufferboolean LED_state[4] = {0}; // stores the states of the LEDs
void setup(){ // disable Ethernet chip pinMode(10, OUTPUT); digitalWrite(10, HIGH); Serial.begin(9600); // for debugging // initialize SD card Serial.println("Initializing SD card..."); if (!SD.begin(4)) { Serial.println("ERROR - SD card initialization failed!"); return; // init failed } Serial.println("SUCCESS - SD card initialized."); // check for index.htm file if (!SD.exists("index.htm")) { Serial.println("ERROR - Can't find index.htm file!"); return; // can't find index file } Serial.println("SUCCESS - Found index.htm file."); // switches pinMode(5, INPUT); pinMode(6, INPUT); pinMode(7, INPUT); pinMode(8, INPUT); // LEDs pinMode(22, OUTPUT); pinMode(23, OUTPUT); pinMode(24, OUTPUT); pinMode(25, OUTPUT); Ethernet.begin(mac, ip); // initialize Ethernet device server.begin(); // start to listen for clients}
void loop(){
EthernetClient client = server.available(); // try to get client
if (client) { // got client? boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { // client data available to read char c = client.read(); // read 1 byte (character) from client // limit the size of the stored received HTTP request // buffer first part of HTTP request in HTTP_req array (string) // leave last element in array as 0 to null terminate string (REQ_BUF_SZ - 1) if (req_index < (REQ_BUF_SZ - 1)) { HTTP_req[req_index] = c; // save HTTP request character req_index++; } // last line of client request is blank and ends with \n // respond to client only after last line received if (c == '\n' && currentLineIsBlank) { // send a standard http response header client.println("HTTP/1.1 200 OK"); // remainder of header follows below, depending on if // web page or XML page is requested // Ajax request - send XML file if (StrContains(HTTP_req, "ajax_inputs")) { // send rest of HTTP header client.println("Content-Type: text/xml"); client.println("Connection: keep-alive"); client.println(); SetLEDs(); // send XML file containing input states XML_response(client); } else { // web page request // send rest of HTTP header client.println("Content-Type: text/html"); client.println("Connection: keep-alive"); client.println(); // send web page webFile = SD.open("index.htm"); // open web page file if (webFile) { while(webFile.available()) { client.write(webFile.read()); // send web page to client } webFile.close(); } } // display received HTTP request on serial port Serial.print(HTTP_req); // reset buffer index and all buffer elements to 0 req_index = 0; StrClear(HTTP_req, REQ_BUF_SZ); break; } // every line of text received from the client ends with \r\n if (c == '\n') { // last character on line of received text // starting new line with next character read currentLineIsBlank = true; } else if (c != '\r') { // a text character was received from client currentLineIsBlank = false; } } // end if (client.available()) } // end while (client.connected())
delay(5); // give the web browser time to receive the data client.stop(); // close the connection } // end if (client) // read buttons and debounce ButtonDebounce();}
// function reads the push button switch states, debounces and latches the LED states// toggles the LED states on each push - release cycle// hard coded to debounce two switches on pins 2 and 3; and two LEDs on pins 6 and 7// function adapted from Arduino IDE built-in example:// File --> Examples --> 02.Digital --> Debouncevoid ButtonDebounce(void){ static byte buttonState[4] = {LOW, LOW, LOW, LOW}; // the current reading from the input pin static byte lastButtonState[4] = {LOW, LOW, LOW, LOW}; // the previous reading from the input pin // the following variables are long's because the time, measured in miliseconds, // will quickly become a bigger number than can be stored in an int. static long lastDebounceTime[4] = {0}; // the last time the output pin was toggled long debounceDelay = 50; // the debounce time; increase if the output flickers byte reading[4]; reading[0] = digitalRead(5); reading[1] = digitalRead(6); reading[2] = digitalRead(7); reading[3] = digitalRead(8); for (int i = 0; i < 4; i++) { if (reading[i] != lastButtonState[i]) { // reset the debouncing timer lastDebounceTime[i] = millis(); } if ((millis() - lastDebounceTime[i]) > debounceDelay) { // whatever the reading is at, it's been there for longer // than the debounce delay, so take it as the actual current state: // if the button state has changed: if (reading[i] != buttonState[i]) { buttonState[i] = reading[i]; // only toggle the LED if the new button state is HIGH if (buttonState[i] == HIGH) { LED_state[i] = !LED_state[i]; } } } } // end for() loop // set the LEDs digitalWrite(22, LED_state[0]); digitalWrite(23, LED_state[1]); digitalWrite(24, LED_state[2]); digitalWrite(25, LED_state[3]); // save the reading. Next time through the loop, // it'll be the lastButtonState: lastButtonState[0] = reading[0]; lastButtonState[1] = reading[1]; lastButtonState[2] = reading[2]; lastButtonState[3] = reading[3];
}
// checks if received HTTP request is switching on/off LEDs// also saves the state of the LEDsvoid SetLEDs(void){ // LED 1 (pin 22) if (StrContains(HTTP_req, "LED1=1")) { LED_state[0] = 1; // save LED state digitalWrite(22, HIGH); } else if (StrContains(HTTP_req, "LED1=0")) { LED_state[0] = 0; // save LED state digitalWrite(22, LOW); } // LED 2 (pin 23) if (StrContains(HTTP_req, "LED2=1")) { LED_state[1] = 1; // save LED state digitalWrite(23, HIGH); } else if (StrContains(HTTP_req, "LED2=0")) { LED_state[1] = 0; // save LED state digitalWrite(23, LOW); } // LED 3 (pin 24) if (StrContains(HTTP_req, "LED3=1")) { LED_state[2] = 1; // save LED state digitalWrite(24, HIGH); } else if (StrContains(HTTP_req, "LED3=0")) { LED_state[2] = 0; // save LED state digitalWrite(24, LOW); } // Stop Kontak (pin 25) if (StrContains(HTTP_req, "LED4=1")) { LED_state[3] = 1; // save LED state digitalWrite(25, HIGH); } else if (StrContains(HTTP_req, "LED4=0")) { LED_state[3] = 0; // save LED state digitalWrite(25, LOW); }}
// send the XML file with analog values, switch status// and LED statusvoid XML_response(EthernetClient cl){ int analog_val; // stores value read from analog inputs int count; // used by 'for' loops int sw_arr[] = {5, 6, 7, 8}; // pins interfaced to switches cl.print("<?xml version = \"1.0\" ?>"); cl.print("<inputs>"); // button LED states // LED1 cl.print("<LED>"); if (LED_state[0]) { cl.print("on0"); } else { cl.print("off0"); }
cl.println("</LED>"); // button LED states // LED2 cl.print("<LED>"); if (LED_state[1]) { cl.print("on1"); } else { cl.print("off1"); } cl.println("</LED>");
// button LED states // LED3 cl.print("<LED>"); if (LED_state[2]) { cl.print("on2"); } else { cl.print("off2"); } cl.println("</LED>"); // button SK states // Stop Kontak cl.print("<LED>"); if (LED_state[3]) { cl.print("on3"); } else { cl.print("off3"); } cl.println("</LED>"); cl.print("</inputs>");}
// sets every element of str to 0 (clears array)void StrClear(char *str, char length){ for (int i = 0; i < length; i++) { str[i] = 0; }}
// searches for the string sfind in the string str// returns 1 if string found// returns 0 if string not foundchar StrContains(char *str, char *sfind){ char found = 0; char index = 0; char len;
len = strlen(str); if (strlen(sfind) > len) { return 0; } while (index < len) { if (str[index] == sfind[found]) { found++; if (strlen(sfind) == found) { return 1;