46 LAMPIRAN A //Kode Program Sistem //inisialisasi variabel dan library #include <SD.h> #include <SPI.h> #include <Time.h> #include <Ethernet.h> byte sensorinterrupt = 0; // 0 = pin 2; 1 = pin 3 byte sensorpin = 2; // konstanta untuk faktor kalibrasi flow sensor float calibrationfactor = 8.5; volatile byte pulsecount; int volbulan[6] ; int temp[6]; unsigned long volume; unsigned long total; unsigned long oldmin; unsigned long oldmonth; unsigned long oldtime; float debitmenit; unsigned int debitdetik; const int chipselect = 4; File datafile; byte mac[] = 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED ; byte ip[] = 10,4,11,177 ; const int MAX_PAGE_NAME_LEN = 8; // max characters in a page name char buffer[max_page_name_len+1]; // page name + terminating null EthernetServer server(80); EthernetClient client; //inisialisasi server,sd card, waktu dan interupsi void setup() Serial.begin(9600); Ethernet.begin(mac, ip); server.begin(); Serial.println("Ready");
47 settime(12,0,0,6,30,14); attachinterrupt(sensorinterrupt, pulsecounter, RISING); // make sure that the default chip select pin is set to // output, even if you don't use it: pinmode(10, OUTPUT); // see if the card is present and can be initialized: if (!SD.begin(chipSelect)) Serial.println("Card failed, or not present"); // don't do anything more: return; Serial.println("card initialized."); //Fungsi Utama Sistem void loop() debit(); // Rutin pembacaan data debbit air dari sensor client = server.available(); if (client) while (client.connected()) if (client.available()) if( client.find("get ") ) // look for the page name memset(buffer,0, sizeof(buffer)); // clear the buffer if(client.find( "/")) if(client.readbytesuntil('/', buffer, MAX_PAGE_NAME_LEN )) if(strcmp(buffer, "tampil") == 0) showanalog(); else if(strcmp(buffer, "data") == 0) showdigital();
48 else unknownpage(buffer); Serial.println(); break; client.stop(); // Rutin Halaman Data real-time sistem void showanalog() sendheader(); client.println(f("data PELANGGAN ")); client.println(f("nama PELANGGAN : Arif Azhari")); client.println(f("nomor PELANGGAN : 11691")); client.println(f("alamat PELANGGAN : Jl Ayahanda Gg tabib NO : 6")); client.print(" Jam : "); client.print(hour()); client.print(f(" Menit : ")); client.print(minute()); client.print(f(" Detik : ")); client.print(second()); client.print(f(" Tanggal : ")); client.print(day()); client.print(f(" Bulan : ")); client.print(monthstr(month())); client.print(f(" Tahun : ")); client.print(year());
49 client.print(f("pemakaian air Bulan ini (dalam m3) : ")); client.print(volume); for (int bulan = 0; bulan < 5; bulan++) client.print(f("pemakaian air ")); client.print(bulan+1); client.print(f(" Bulan Lalu : ")); client.print(volbulan[bulan]); //Rutin Halaman Web Data pada kartu memori void showdigital() sendheader(); File datafile = SD.open("datalog.txt"); int i; while(datafile.available()) client.write(datafile.read()); i++; if(i > 40) i=0; datafile.close(); //Halaman Web default void unknownpage(char *page) sendheader(); client.println("<h1>halaman utama
50 Sistem</h1>"); client.print(page); client.println("halaman yang tersedia :<br />"); client.println("/hasil Pembacaan /<br />"); client.println("/data Pembacaan/<br />"); client.println("</body></html>"); void swap() // Tukan data bulan ini ke bulan yang sudah berlalu for(int bulan = 5;bulan >= 1;bulan--) temp[bulan]=volbulan[bulan-1]; volbulan[bulan]=temp[bulan]; volbulan[0]=volume; volume=0; void pulsecounter() // naikan cacahan Pulsa pulsecount++; void debit() if((millis() - oldtime) > 1000) // rutin memproses pulsa counter dalam rentang satu detik // disable interupsi untuk memulai perhitungan pulsa dan proses lainnya detachinterrupt(sensorinterrupt); // Rumus perhitungan dari sensor
51 debit dalam liter per menit debitmenit = ((1000.0 / (millis() - oldtime)) * pulsecount) / calibrationfactor; // waktu setelah interupsi berlalu. oldtime = millis(); 1000; // konversikan kedalam mililiter debitdetik = (debitmenit / 60) * // jumlahkan milliliter yang telah lewat dengan yang sekarang untuk mendapatkan total volume volume += debitdetik; total += debitdetik; String datastring =" "; // Reset ulang pulsa pulsecount = 0; if(month()!= oldmonth) swap(); oldmonth = month(); if(minute()!= oldmin) oldmin = minute(); datastring += day(); datastring += month(); datastring += year(); datastring += " "; datastring += hour(); datastring += minute(); datastring += second(); datastring += " "; datastring += " Volume"; datastring += String(volbulan[0]); datastring += " M3 ";
52 File datafile = SD.open("datalog.txt", FILE_WRITE); datafile.println(datastring); datafile.close(); // nyalakan kembali interpsi attachinterrupt(sensorinterrupt, pulsecounter, RISING); void sendheader() // send a standard http response header client.println("http/1.1 200 OK"); client.println("content-type: text/html"); client.println(); client.println("<html><head><title>web multi-page </title>"); client.println("<body>"); server