/* Program Otomatis Hydrofil Balance
Alur Program :
1) Tombol Start Automatic ditekan
2) Tombol Start Counter di ON-kan oleh mikrokontroller
3) Mengaktifkan mekanisme mencelupkan sample
4) Cek Hasil apakah mN/m sudah menyentuh CAL
5) Counter bekerja dan menghitung hingga 50 x
6) Jika counter sudah menghitung 50 x, maka mekanisme mencelupkan sample akan berhenti
7) Tombol Measure Counter di ON-kan oleh mikrokontroller
8) Mengaktifkan mekanisme Measure Sample
9) Sample diukur hingga Torque angle bernilai 50
10) Jika Torque Angle sudah bernilai 50 maka mekanisme Measure Sample akan berhenti
11) Mikrokntroller kan membaca nilai hasil pengukuran rata-rata dalam jeda waktu tertentu
12) Mikrokntroller melakukan scalling terhadap data pembacaan
13) Mikrokontroller mengirimkan hasil bacaan ke CONTECT melalui CN-6000
14) Mengaktifkan Trigger untuk CONTECT
15) Mematikan Trigger untuk CONTECT
16) Mengaktifkan mekanisme Reverse hingga limit swith terkena
17) Selesai
*/
// constants won't change. They're used here to set pin numbers:
//DIGITAL INPUT :
const int PbStartAuto = 2; // Pin untuk tombol Start Automatic - Input
const int CountFin = 3; // Pin untuk indikasi Counter 50x Finish - Input
const int MeasFin = 10; // Pin untuk indikasi Process Measure selesai - Input
const int PbStop = 5; // Pin untuk Tombol Stop Proses pembacaan - Input
const int RevFin = 6; // Pin untuk Tombol Stop Reverse - Input
//DIGITAL OUTPUT :
const int StartCount = 7; // Pin untuk perintah Start Counter - Output
const int StartMeas = 4; // Pin untuk perintah Start Measure - Output
const int StartCTC = 9; // Pin untuk perintah Trigger CONTEC - Output
const int PilotLamp = 13; // Pin untuk output lampu indikator - Output
const int CalOverLamp = 11; // Pin untuk indikasi bahwa CAL terlampaui - Output
const int RevLamp = 12; // Pin untuk perintah Start Reverse - Output
const int Stop = 8; // Pin untuk perintah Stop - Output
//ANALOG INPUT :
const int MnmPin = A0; // Pin untuk input Analog nilai mN/m
// variables will change:
int PbStartAutoState = 0; // variable for reading tombol Start Automatic status
int CountFinState = 0; // variable for reading Counter Selesai status
int MeasFinState = 0; // variable for reading Process Measure selesai status
int PbStopState = 0; // variable for reading Tombol Stop Proses status
int CalOverState = 0; // variable for reading CAL over
int RevFinState = 0; // variable for reading Reverse finish (limit switch)
int MnmPinVal = 0; // variable for reading sinyal Analaog nilai mN/m
int Count = 0;
void setup() {
// put your setup code here, to run once:
pinMode(PbStartAuto, INPUT);
pinMode(CountFin, INPUT);
pinMode(MeasFin, INPUT);
pinMode(PbStop, INPUT);
pinMode(RevFin, INPUT);
pinMode(StartCount, OUTPUT);
pinMode(StartMeas, OUTPUT);
pinMode(StartCTC, OUTPUT);
pinMode(PilotLamp, OUTPUT);
pinMode(CalOverLamp, OUTPUT);
pinMode(MnmPin, OUTPUT);
pinMode(RevLamp, OUTPUT);
pinMode(Stop, OUTPUT);
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
// Rutin memualai proses pengukuran Automatis
StartAuto:
PbStopState = digitalRead(PbStop);
// baca apakah tombol Stop ditekan ?
PbStartAutoState = digitalRead(PbStartAuto);
// Cek apakah tombol PbStartAutoState di tekan ?
if (PbStartAutoState == HIGH){
Serial.println("Counter ON");
digitalWrite(PilotLamp, HIGH);
delay(1000);
digitalWrite(StartCount, HIGH);
delay(500);
digitalWrite(StartCount, LOW);
goto StartAuto;
} else if (PbStopState == HIGH){
goto Finish;
} else {
goto StartAuto;
}
//Automatic Measuring FInish / STOP
Finish:
digitalWrite(PbStartAutoState, LOW);
digitalWrite(StartCount, LOW);
digitalWrite(StartMeas, LOW);
digitalWrite(StartCTC, LOW);
digitalWrite(PilotLamp, LOW);
digitalWrite(CalOverLamp, LOW);
digitalWrite(Stop, HIGH);
delay(500);
digitalWrite(Stop, LOW);
Count = 0;
Serial.println("Proses Pengukuran Selesai");
}