////////////////////////////////////////////////////////////////////////////////// // fungsi setting Drops = pengaturan jumlah cairan yg
diberikan tiap jam (ml/h)
// data Drop rate sebagai sumber data untuk setting kecepatan motor // ditampilkan pada PC (Drops) ////////////////////////////////////////////////////////////////////////////////// void cek_Up_Drops() { int Set_Up_DR = digitalRead (1); if (Set_Up_DR==LOW) { cek_Up_Drops(); } else { delay(300); if (Drops<500) //jika data volume lbh kecil dari 500 maka { Drops+=10; //data drops + 10 speedset=Drops; //data drops = data speedset (set kecepatan) formula(); } } } ////////////////////////////////////////////////////////////////////////////////// // fungsi formula setting speed // - formula setting drops ke drops1 (data pengaturan supply cairan yg akan // dikeluarkan tiap jam "ml/h)" // - formula setting drops (jumlah pemberian cairan ml/h) ke speedset (setting // kecepatan motor) //////////////////////////////////////////////////////////////////////////////////void formula() { Drops2=Drops; Drops1=Drops2/60; speedset=speedset*10; // data speedset sebagai sumber data pengaturan kecepatan motor } ////////////////////////////////////////////////////////////////////////////////// // fungsi counter = interupsi timer external 0 sebagai counter // putaran motor untuk perbandingan jumlah kecepatan putaran motor tiap menit //////////////////////////////////////////////////////////////////////////////////void IRQcounter() { IRQcount++; // increment data IRQ saat menerima picuan putaran motor } ////////////////////////////////////////////////////////////////////////////////// //fungsi reset counter drops //////////////////////////////////////////////////////////////////////////////////void CountDrops() { cli(); // disable counter IRQcount = 0; // IRQ = 0 result = IRQcount; // result = IRQcount sei(); // enable counter } ////////////////////////////////////////////////////////////////////////////////// //fungsi stop counter drops & pengambilan data counter ////////////////////////////////////////////////////////////////////////////////// void StopCount() { cli(); // disable counter result = IRQcount; // result = IRQcount tetesan=tetesan+=result; // tambahkan data result ke tetesan datatetesan(); tetesan = 0; // clear data counter } ////////////////////////////////////////////////////////////////////////////////// // fungsi datatetesan // jumlah counter putaran motor dikonversi menjadi jumlah cairan yang dihasilkan (tetesdata1) // > kolom = LEFT // > satuan = ml // yang dihasilkan dari perhitungan putaran motor sebanyak 10 putaran motor / ml. ditampilkan pada PC ////////////////////////////////////////////////////////////////////////////////// void datatetesan() { tetesan1=tetesan1+=tetesan; // counter motor disimpan u/ dibandingkan dengan setting drops tetesan2=tetesan1*0.1; // yang kemudian akan di reset u/ di hitung kembali pada // perbandingan selanjutnya tetesdata=tetesdata+=tetesan; // counter motor disimpan u/ data tampilan jumlah cairan // yang telah dikeluarkan tetesdata1=tetesdata*0.1; // data yang ditampilkan akan terus ditambahkan lcd.setCursor(0xC,1); // set cursor baris 1 kolom 12 lcd.print(tetesdata1); // tampilkan data hitungan } ////////////////////////////////////////////////////////////////////////////////// // fungsi External = rutine timer interupsi over flow // membandingkan jumlah pengaturan kecepatan motor (Drops1) dengan // jumlah putaran motor yang terjadi (tetesan2) selama 1 menit (dataload) // yg apabila jumlah cairan yg dihasilkan masih lebih sedikit dari pada // jumlah cairan yg diatur, maka data speed akan ditambah sehingga putaran // motor akan bertambah, demikian pula sebaliknya ////////////////////////////////////////////////////////////////////////////////// void External() { dataload--; if (dataload!=0) { dataload = dataload; } else { dataload1++; dataload = 60; // reload interrupt timer1 = 60 second if (Drops1>tetesan2) // membandingkan data drops1 (setting drop) dgn tetesan2 // (data counter putaran motor) { speedset+=10; // menambah kecepatan motor jika data drop lebih besar dari // hasil counter putaran motor tetesan1 = 0; } else if (Drops1<tetesan2) { speedset-=10; // mengurangi kecepatan motor jika data drop lebih kecil dari // hasil counter putaran motor tetesan1 = 0; } else if (Drops1==tetesan2) { tetesan1 = 0; } } }