Code
Code
String command;
boolean stringComplete,setFlag_pompa = false,setFlag_pengencer = false,setFlag_done
= false;
boolean setFlag_keadaan_awal = false,setFlag_suhu =false, setFlag_reset_suhu
=false;
int str=0,stp=0;
int value,
valueSuhu,interval,viskoV,X,a,z,selisih,result,banyakData,counting_timer;
float y1,y2,y3,hasil,totalSuhu,nilaiSuhu;
// value adalah
variabel yang digunakan pada format pengiriman data serial
// viskoV adalah
variabel penyimpan hasil pengukuran lamanya waktu tempuh S1-S2
//Berikut ini adalah semua variabel penyimpan hasil kirim data serial
int target;
int viskoValue;
int temp_max;
int temp_min;
int valve_pendingin = 9;
int valve_pengencer = 11;
int pompa=10;
//Berikut ini adalah pin-pin input yang digunakan
int pendeteksi1 = 7;
int pendeteksi2 = 13;
void setup(){
�Serial.begin(9600);
�pinMode(pendeteksi1,INPUT);
�pinMode(pendeteksi2,INPUT);
�pinMode(pompa,OUTPUT);
�pinMode(valve_pengencer,OUTPUT);
�pinMode(valve_pendingin,OUTPUT);
�inputString = "";
�stringComplete = false;
�// inisialisasi timer1
�noInterrupts(); � � � � � � �
�
�TCCR1A = 0;
�TCCR1B = 0;
TCNT1=63535;
� � � � � � � � � � � � � � � �viskoV++;
� � � � � � � � � �}
� � � � � � � � � �else{
� � � � � � � � � � � � � � � �TCNT1 = 63535;
� � � � � � � � � �}
if(digitalRead(pendeteksi2) == HIGH){ // Jika
sensor bawah aktif maka variabel a LOW
� � � � � � � � � � � � � � �
� � � � � � � � � � � � � � � �a = LOW; � // Jika a LOW maka
timer berhenti menghitung
� � � � � � � � � � � � � � � �viskoValue=viskoV;
� � � � � � � � � � � � � � � �if(z==0 | target==0){
Serial.print("Hasil pengujian
nilai Viskositas saat ini adalah � ");
Serial.print(viskoV);
Serial.println(" � �ms");
� � stp=1;
� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � � � � � � � � � � � � � �}
� �}
�}
}
void loop(){ � �
// PROGRAM UTAMA
currentMillis = millis();
// isi variabel currentMillis dengan nilai millis
if(stp==1){
� � � � � � stop(); �
// Jika stop = 1 maka semua akan direstart seperti awalnya
}
else if(str ==0 &&stp ==0){
// Keadaan sewaktu power on, namun belum ada command
setFlag_keadaan_awal = true;
} � � � � � � � � �
penyimpan();
if(str==1 ){
if(Mem_stp==HIGH |setFlag_keadaan_awal == true){
//Jika Mem_stp high,atau keadaan masih awal
digitalWrite(pompa,HIGH);
//maka pompa harus dinyalakan dahulu 1 menit
setFlag_pompa = true;
//Digunakan untuk mencegah crash sensing
� � � � � � � � � �interval = 10000;
jalankan_pompa();
if(setFlag_pompa == false){
setFlag_keadaan_awal = false;
Mem_stp=LOW;
}
}
penyimpan();
selisih = target-viskoV;
� �if(z==1 && viskoV!=0 && target!=0 && a==LOW){
� � � �kontroler();
� � �
� � �} �
� �}
kontrol_temperatur();
}
void stop(){
//RESTART SEMUA KEADAAN KECUALI NILAI PARAMETER YANG TELAH
DISIMPAN
if(Mem_stp==LOW){
Serial.println("Program telah dihentikan ketik 00str1 untuk memulai kembali");
Serial.println("");
Serial.println("");
z=0;
target=0;
result=0;
hasil=0.0;
y1=0.0;
y2=0.0;
y3=0.0;
}
digitalWrite(pompa,LOW);
� �Mem_stp=HIGH;
� �str=0;
setFlag_pompa = false;
setFlag_pengencer = false;
setFlag_done = false;
setFlag_keadaan_awal = false;
setFlag_suhu =false;
� �viskoV=0;
� �digitalWrite(pompa,LOW);
digitalWrite(valve_pengencer,LOW);
TCNT1 = 63535 ;
previousMillis = 0;
previousMillis_suhu =0;
X=0;
selisih=0;
if(setFlag_done == false ){
� � � � � �if(setFlag_pengencer == false){
// SetFlag_done hanya akan true jika kontroler
selesai dijalankan
y1=0.0;y2=0.0;y3=0.0;
� � � � � � � �}
� � � � � � � �if(viskoV>=100 && viskoV<=1053){
� � � � � � � � �if(y2==0 && y3==0){
hasil=y1*0.8333;
hasil=hasil*1000.0;
result = int(hasil);
�}
� � � � � � � � �else{
hasil=(((y2*0.5) +(y3 * 0.5) + (y1*0.8333))/
(y1+y2+y3));
hasil=hasil*1000.0;
result = int(hasil);
�}
� � � � � � � �}
� � � � � � � �else if(viskoV>1053 && viskoV<=1345){
� � � � � � � � � if(y2==0 && y3==0){
hasil=y1*0.5;
hasil=hasil*1000.0;
result = int(hasil);
�}
� � � � � � � � �else{
hasil=(((y2*0.3333) +(y3 * 0.3333) + (y1*0.5))/
(y1+y2+y3));
hasil=hasil*1000.0;
result = int(hasil);
�}
� � � � � � � �}
� � � � � � � �else if(viskoV>1345 && viskoV<=3000){
� � � � � � � � � if(y2==0 && y3==0){
hasil=y1*0.3333;
hasil=hasil*1000.0;
result = int(hasil);
�}
� � � � � � � � �else{
hasil=(((y2*0.1667) +(y3 * 0.1667) +
(y1*0.3333))/(y1+y2+y3));
hasil=hasil*1000.0;
result = int(hasil);
�}
� � � � � � � �}
else{
Serial.println("kekentalan tidak termasuk range yaitu
antara 100 ms - 3000 ms");
� � � � � � � � � � � � � � � � � � � �Serial.println("");
}
� � � � � �
� � � � � �}
� � � � � � � �digitalWrite(valve_pengencer,HIGH);
interval = result;
setFlag_pengencer = true;
jalankan_pengencer();
}
setFlag_done = true;
//Berikut ini proses menyalakan pompa selama 1 menit
digitalWrite(pompa,HIGH);
� � �//Sebelum dilakukan lagi proses pengujian
interval = 10000;
setFlag_pompa = true;
jalankan_pompa();
[glow=yellow,2,300][b]if(setFlag_pompa == false){
Serial.print("According to fuzzy, the diluent pump will be
switched on for : �");
Serial.print(result);
Serial.println(" � �ms");
Serial.print("the viscosity result is �");
Serial.print(viskoV);
� Serial.println(" � �ms");
� � � � � � � �viskoV =0;
}[/b][/glow]
}
�}
}
}
}
if (banyakData <200){
totalSuhu = totalSuhu + temperature;
banyakData++;
}
else{
nilaiSuhu = totalSuhu/200.0; �
banyakData=0;
totalSuhu=0.0;
}
delay (2);
if(temp_min>0 &&temp_max>0){
if(nilaiSuhu>temp_max){
digitalWrite (valve_pendingin,HIGH);
setFlag_suhu = true;
if(counting_timer ==1000){
Serial.print("Hasil pengukuran suhu dalam derajad celcius
saat ini adalah � ");
Serial.println(nilaiSuhu);
counting_timer =0;
}
counting_timer ++;
}
if(setFlag_suhu == true){
if(nilaiSuhu <= temp_min){
digitalWrite (valve_pendingin,LOW);
setFlag_suhu =false;
}
}
}
}
X--;
if(X!=0){
value = (value * 10) + (inputString[6] - 48);
X--;
}
if(X!=0){
value = (value * 10) + (inputString[7] - 48);
X--;
}
if(X!=0){
value = (value * 10) + (inputString[8] - 48);
X--;
}
if(X!=0){
value = (value * 10) + (inputString[9] - 48);
X--;
}
}
}
else if (command[2] == 'p'){
� � � � � � � � � � � � � � � � � � � � � � � �Serial.print("temperatur maximum �=
");
Serial.println(temp_max);
}
}
else if (command [1]== 's'){
if (command[2] == 'v'){
Serial.print("Hasil pengujian nilai Viskositas
saat ini adalah � ");
Serial.print(viskoValue);
� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
�Serial.println(" � �ms");
� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
�Serial.println("");
}
else if (command[2] == 't'){
Serial.print("Hasil pengukuran suhu dalam derajad
celcius saat ini adalah � ");
Serial.println(nilaiSuhu);
}
else if (command[2] == 'r'){
Serial.print("Target mode kontrol adalah � ");
� � � � � � � � � � � � � � � � � � � � � � � �Serial.print(value);
� � � � � � � � � � � � � � � � � � � � � � � �Serial.println(" �ms");
}
}
}
else if (command [0]== 's'){
if (command [1]== 'k'){
if (command [2]== '1'){
target = value;
� � � � � � � � � � � � � � � � � � � � � � � �Serial.print("Target mode kontrol
adalah � ");
� � � � � � � � � � � � � � � � � � � � � � � �Serial.print(value);
� � � � � � � � � � � � � � � � � � � � � � � �Serial.println(" �ms");
� � � � � � � � � � � � � � � � � � � � � � � �Serial.println("");
}
}
else if (command[2] == 'k'){
z=1;
� � � � � � � � � � � � � � � � � � � � � � � �Serial.println("Anda mengoperasikan
mode kontrol, namun mode kontrol hanya berlaku ");
� � � � � � � � � � � � � � � � � � � � � � � �Serial.println("jika anda telah
memasukkan nilai variabel target");
� � � � � � � � � � � � � � � � � � � � � � � �Serial.println("");
}
}
value = 0;
}
}