Pakan Ikan Monitor PH Turbidity Amoniak Suhu dan Monitor Water Level IOT Blynk 2.0
Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang bisa mengukur PH Turbidity Suhu dan water level via IOT Blynk. alat ini juga terdapat RTC sebagai pewaktu, jadi ketika waktu sesuai dengan setingan maka pelontar berupa servo akan aktif. berikut adalah kodingdan skemanya.
1. Skema
2. Program Arduino IDE
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal_I2C.h>
#include <DS3231.h>
#include <EEPROM.h>
#define ONE_WIRE_BUS 12
#include <Servo.h>
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3); // RX pin 2, TX pin 3
#define trigPin1 2
#define echoPin1 3
#define trigPin2 5
#define echoPin2 6
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
LiquidCrystal_I2C lcd(0x27,20,4);
DS3231 rtc(SDA, SCL);
Servo myservo1;
int addr1 = 0;
int addr2 = 1;
int addr3 = 2;
int addr4 = 3;
int addr5 = 4;
Time t;
int jampagi,jamsiang,jamsore;
float TempC;
float pHValue;
int tds;
int adctds;
int adcPH;
int TempCx;
int pHValuex;
int ntux;
float ntufix;
long duration1, distance1;
long duration2, distance2;
int btset = 4;
int btup = 8;
int btdown = 7;
int btok = 11;
int btsetx;
int btupx;
int btdownx;
int btokx;
float batasamo;
float batasph;
float amoniak;
int relayaerator = A2;
int relayout = A3;
int relayin = A6;
int tanda = 0;
int kolam;
int tinggipakan;
int tdsValue;
void setup(){
jampagi = EEPROM.read(addr1);
jamsiang = EEPROM.read(addr2);
jamsore = EEPROM.read(addr3);
batasamo = EEPROM.read(addr4);
batasph = EEPROM.read(addr5);
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2, INPUT);
pinMode(relayaerator,OUTPUT);
digitalWrite(relayaerator,HIGH);
pinMode(relayin,OUTPUT);
digitalWrite(relayin,HIGH);
pinMode(relayout,OUTPUT);
digitalWrite(relayout,HIGH);
pinMode(btset,INPUT_PULLUP);
pinMode(btup,INPUT_PULLUP);
pinMode(btdown,INPUT_PULLUP);
pinMode(btok,INPUT_PULLUP);
Wire.begin();
sensors.begin();
Serial.begin(9600);
lcd.begin();
lcd.clear();
rtc.begin();
//rtc.setDOW(WEDNESDAY); // Set Day-of-Week to SUNDAmy
//rtc.setTime(14, 37, 0); // Set the time to 12:00:00 (24hr format)
//rtc.setDate(1, 1, 2014); // Set the date to January 1st, 2014
myservo1.attach(9);
}
void loop(){
btsetx = digitalRead(btset);
btupx = digitalRead(btup);
btdownx = digitalRead(btdown);
btokx = digitalRead(btok);
if(btsetx == 0){
delay(1000);
lcd.clear();
setjampagi();
setjamsiang();
setjamsore();
setbatasamo();
setbatasph();
}
t = rtc.getTime();
adcPH = analogRead(A0); //menggunakan pin A0 untuk membaca output sensor pH
pHValue = (adcPH - 1093.4) / -30.897;
adctds = analogRead(A1);
tdsValue = map(adctds, 566, 1, 0, 100);
pHValuex = pHValue * 100.0;
sensors.requestTemperatures();
TempC = sensors.getTempCByIndex(0); // Celcius
TempCx = TempC * 100.0;
if(pHValue < 6.5){
amoniak = (pHValue / TempC) * 0.202;
}
if(pHValue == 7.0){
amoniak = (pHValue / TempC) * 1.131;
}
if(pHValue > 7.0){
amoniak = (pHValue / TempC) * 3.306;
}
if(amoniak > batasamo){
digitalWrite(relayaerator,HIGH);
}
if(amoniak <= batasamo){
digitalWrite(relayaerator,LOW);
}
if((t.hour == jampagi)&&(jampagi > 0)&&(tanda == 0)){
myservo1.write(150);
delay(5000);
myservo1.write(100);
tanda = 1;
}
if((t.hour == jamsiang)&&(jamsiang > 0)&&(tanda == 1)){
myservo1.write(150);
delay(5000);
myservo1.write(100);
tanda = 2;
}
if((t.hour == jamsore)&&(jamsore > 0)&&(tanda == 2)){
myservo1.write(150);
delay(5000);
myservo1.write(100);
tanda = 0;
}
lcd.setCursor(0,0);
lcd.print("TDS:");
lcd.print(tdsValue);
lcd.print(" ");
lcd.print("PH:");
lcd.print(pHValue);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print("T:");
lcd.print(TempC,1);
lcd.print("c ");
lcd.print(batasamo,1);
lcd.print("/");
lcd.print(batasph,1);
lcd.print("");
lcd.setCursor(0,2);
lcd.print(t.hour, DEC);
lcd.print(":");
lcd.print(t.min, DEC);
lcd.print(":");
lcd.print(t.sec, DEC);
lcd.print(" ");
lcd.print(jampagi);
lcd.print("/");
lcd.print(jamsiang);
lcd.print("/");
lcd.print(jamsore);
lcd.print("");
lcd.setCursor(0,3);
lcd.print("Mg/l:");
lcd.print(amoniak,1);
lcd.print(" ");
lcd.print(distance1);
lcd.print("/");
lcd.print(distance2);
lcd.print(" ");
//ketinggian air kolam
digitalWrite(trigPin1, LOW); // Added this line
delayMicroseconds(2); // Added this line
digitalWrite(trigPin1, HIGH);
delayMicroseconds(10); // Added this line
digitalWrite(trigPin1, LOW);
duration1 = pulseIn(echoPin1, HIGH);
distance1 = (duration1/2) / 29.1;
//ketinggian pakan ikan
digitalWrite(trigPin2, LOW); // Added this line
delayMicroseconds(2); // Added this line
digitalWrite(trigPin2, HIGH);
delayMicroseconds(10); // Added this line
digitalWrite(trigPin2, LOW);
duration2 = pulseIn(echoPin2, HIGH);
distance2 = (duration2/2) / 29.1;
tinggipakan = map(distance2, 5,30,100,0);
if((kolam >= 29)&&(kolam <= 31)){
digitalWrite(relayin,LOW);
digitalWrite(relayout,LOW);
}
if(kolam < 29){
digitalWrite(relayin,HIGH);
digitalWrite(relayout,LOW);
}
if(kolam > 31){
digitalWrite(relayin,LOW);
digitalWrite(relayout,HIGH);
}
Serial.print("*");
Serial.print(pHValue * 100.0);
Serial.print(",");
Serial.print(tdsValue);
Serial.print(",");
Serial.print(amoniak * 100.0);
Serial.print(",");
Serial.print(TempC * 100.0);
Serial.println("#");
delay(1000);
}
void setjampagi(){
btsetx = digitalRead(btset);
btupx = digitalRead(btup);
btdownx = digitalRead(btdown);
btokx = digitalRead(btok);
lcd.setCursor(0,0);
lcd.print("Waktu Pakan Pagi");
lcd.setCursor(0,1);
lcd.print("Jam: ");
lcd.print(jampagi);
lcd.print(" ");
if(btupx == 0){
delay(200);
jampagi++;
}
if(btdownx == 0){
delay(200);
jampagi--;
}
if(jampagi > 23){
jampagi = 0;
}
if(btokx == 0){
lcd.clear();
delay(2000);
EEPROM.write(addr1, jampagi);
return;
}
setjampagi();
}
void setjamsiang(){
btsetx = digitalRead(btset);
btupx = digitalRead(btup);
btdownx = digitalRead(btdown);
btokx = digitalRead(btok);
lcd.setCursor(0,0);
lcd.print("Waktu Pakan Siang ");
lcd.setCursor(0,1);
lcd.print("Jam: ");
lcd.print(jamsiang);
lcd.print(" ");
if(btupx == 0){
delay(200);
jamsiang++;
}
if(btdownx == 0){
delay(200);
jamsiang--;
}
if(jamsiang > 23){
jamsiang = 0;
}
if(btokx == 0){
lcd.clear();
delay(2000);
EEPROM.write(addr2, jamsiang);
return;
}
setjamsiang();
}
void setjamsore(){
btsetx = digitalRead(btset);
btupx = digitalRead(btup);
btdownx = digitalRead(btdown);
btokx = digitalRead(btok);
lcd.setCursor(0,0);
lcd.print("Waktu Pakan Sore ");
lcd.setCursor(0,1);
lcd.print("Jam: ");
lcd.print(jamsore);
lcd.print(" ");
if(btupx == 0){
delay(200);
jamsore++;
}
if(btdownx == 0){
delay(200);
jamsore--;
}
if(jamsore > 23){
jamsore = 0;
}
if(btokx == 0){
lcd.clear();
delay(2000);
EEPROM.write(addr3, jamsore);
return;
}
setjamsore();
}
void setbatasamo(){
btsetx = digitalRead(btset);
btupx = digitalRead(btup);
btdownx = digitalRead(btdown);
btokx = digitalRead(btok);
lcd.setCursor(0,0);
lcd.print("BATAS AMONIAK ");
lcd.setCursor(0,1);
lcd.print("mg/l: ");
lcd.print(batasamo);
lcd.print(" ");
if(btupx == 0){
delay(200);
batasamo = batasamo + 0.1;
}
if(btdownx == 0){
delay(200);
batasamo = batasamo - 0.1;
}
if(batasamo > 100.0){
batasamo = 0;
}
if(btokx == 0){
lcd.clear();
delay(2000);
EEPROM.write(addr4, batasamo);
return;
}
setbatasamo();
}
void setbatasph(){
btsetx = digitalRead(btset);
btupx = digitalRead(btup);
btdownx = digitalRead(btdown);
btokx = digitalRead(btok);
lcd.setCursor(0,0);
lcd.print("BATAS PH ");
lcd.setCursor(0,1);
lcd.print("PH: ");
lcd.print(batasph);
lcd.print(" ");
if(btupx == 0){
delay(200);
batasph = batasph + 0.1;
}
if(btdownx == 0){
delay(200);
batasph = batasph - 0.1;
}
if(batasph > 100.0){
batasph = 0;
}
if(btokx == 0){
lcd.clear();
delay(2000);
EEPROM.write(addr5, batasph);
return;
}
setbatasph();
}
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal_I2C.h>
#include <DS3231.h>
#include <EEPROM.h>
#define ONE_WIRE_BUS 12
#include <Servo.h>
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3); // RX pin 2, TX pin 3
#define trigPin1 2
#define echoPin1 3
#define trigPin2 5
#define echoPin2 6
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
LiquidCrystal_I2C lcd(0x27,20,4);
DS3231 rtc(SDA, SCL);
Servo myservo1;
int addr1 = 0;
int addr2 = 1;
int addr3 = 2;
int addr4 = 3;
int addr5 = 4;
Time t;
int jampagi,jamsiang,jamsore;
float TempC;
float pHValue;
int tds;
int adctds;
int adcPH;
int TempCx;
int pHValuex;
int ntux;
float ntufix;
long duration1, distance1;
long duration2, distance2;
int btset = 4;
int btup = 8;
int btdown = 7;
int btok = 11;
int btsetx;
int btupx;
int btdownx;
int btokx;
float batasamo;
float batasph;
float amoniak;
int relayaerator = A2;
int relayout = A3;
int relayin = A6;
int tanda = 0;
int kolam;
int tinggipakan;
int tdsValue;
void setup(){
jampagi = EEPROM.read(addr1);
jamsiang = EEPROM.read(addr2);
jamsore = EEPROM.read(addr3);
batasamo = EEPROM.read(addr4);
batasph = EEPROM.read(addr5);
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2, INPUT);
pinMode(relayaerator,OUTPUT);
digitalWrite(relayaerator,HIGH);
pinMode(relayin,OUTPUT);
digitalWrite(relayin,HIGH);
pinMode(relayout,OUTPUT);
digitalWrite(relayout,HIGH);
pinMode(btset,INPUT_PULLUP);
pinMode(btup,INPUT_PULLUP);
pinMode(btdown,INPUT_PULLUP);
pinMode(btok,INPUT_PULLUP);
Wire.begin();
sensors.begin();
Serial.begin(9600);
lcd.begin();
lcd.clear();
rtc.begin();
//rtc.setDOW(WEDNESDAY); // Set Day-of-Week to SUNDAmy
//rtc.setTime(14, 37, 0); // Set the time to 12:00:00 (24hr format)
//rtc.setDate(1, 1, 2014); // Set the date to January 1st, 2014
myservo1.attach(9);
}
void loop(){
btsetx = digitalRead(btset);
btupx = digitalRead(btup);
btdownx = digitalRead(btdown);
btokx = digitalRead(btok);
if(btsetx == 0){
delay(1000);
lcd.clear();
setjampagi();
setjamsiang();
setjamsore();
setbatasamo();
setbatasph();
}
t = rtc.getTime();
adcPH = analogRead(A0); //menggunakan pin A0 untuk membaca output sensor pH
pHValue = (adcPH - 1093.4) / -30.897;
adctds = analogRead(A1);
tdsValue = map(adctds, 566, 1, 0, 100);
pHValuex = pHValue * 100.0;
sensors.requestTemperatures();
TempC = sensors.getTempCByIndex(0); // Celcius
TempCx = TempC * 100.0;
if(pHValue < 6.5){
amoniak = (pHValue / TempC) * 0.202;
}
if(pHValue == 7.0){
amoniak = (pHValue / TempC) * 1.131;
}
if(pHValue > 7.0){
amoniak = (pHValue / TempC) * 3.306;
}
if(amoniak > batasamo){
digitalWrite(relayaerator,HIGH);
}
if(amoniak <= batasamo){
digitalWrite(relayaerator,LOW);
}
if((t.hour == jampagi)&&(jampagi > 0)&&(tanda == 0)){
myservo1.write(150);
delay(5000);
myservo1.write(100);
tanda = 1;
}
if((t.hour == jamsiang)&&(jamsiang > 0)&&(tanda == 1)){
myservo1.write(150);
delay(5000);
myservo1.write(100);
tanda = 2;
}
if((t.hour == jamsore)&&(jamsore > 0)&&(tanda == 2)){
myservo1.write(150);
delay(5000);
myservo1.write(100);
tanda = 0;
}
lcd.setCursor(0,0);
lcd.print("TDS:");
lcd.print(tdsValue);
lcd.print(" ");
lcd.print("PH:");
lcd.print(pHValue);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print("T:");
lcd.print(TempC,1);
lcd.print("c ");
lcd.print(batasamo,1);
lcd.print("/");
lcd.print(batasph,1);
lcd.print("");
lcd.setCursor(0,2);
lcd.print(t.hour, DEC);
lcd.print(":");
lcd.print(t.min, DEC);
lcd.print(":");
lcd.print(t.sec, DEC);
lcd.print(" ");
lcd.print(jampagi);
lcd.print("/");
lcd.print(jamsiang);
lcd.print("/");
lcd.print(jamsore);
lcd.print("");
lcd.setCursor(0,3);
lcd.print("Mg/l:");
lcd.print(amoniak,1);
lcd.print(" ");
lcd.print(distance1);
lcd.print("/");
lcd.print(distance2);
lcd.print(" ");
//ketinggian air kolam
digitalWrite(trigPin1, LOW); // Added this line
delayMicroseconds(2); // Added this line
digitalWrite(trigPin1, HIGH);
delayMicroseconds(10); // Added this line
digitalWrite(trigPin1, LOW);
duration1 = pulseIn(echoPin1, HIGH);
distance1 = (duration1/2) / 29.1;
//ketinggian pakan ikan
digitalWrite(trigPin2, LOW); // Added this line
delayMicroseconds(2); // Added this line
digitalWrite(trigPin2, HIGH);
delayMicroseconds(10); // Added this line
digitalWrite(trigPin2, LOW);
duration2 = pulseIn(echoPin2, HIGH);
distance2 = (duration2/2) / 29.1;
tinggipakan = map(distance2, 5,30,100,0);
if((kolam >= 29)&&(kolam <= 31)){
digitalWrite(relayin,LOW);
digitalWrite(relayout,LOW);
}
if(kolam < 29){
digitalWrite(relayin,HIGH);
digitalWrite(relayout,LOW);
}
if(kolam > 31){
digitalWrite(relayin,LOW);
digitalWrite(relayout,HIGH);
}
Serial.print("*");
Serial.print(pHValue * 100.0);
Serial.print(",");
Serial.print(tdsValue);
Serial.print(",");
Serial.print(amoniak * 100.0);
Serial.print(",");
Serial.print(TempC * 100.0);
Serial.println("#");
delay(1000);
}
void setjampagi(){
btsetx = digitalRead(btset);
btupx = digitalRead(btup);
btdownx = digitalRead(btdown);
btokx = digitalRead(btok);
lcd.setCursor(0,0);
lcd.print("Waktu Pakan Pagi");
lcd.setCursor(0,1);
lcd.print("Jam: ");
lcd.print(jampagi);
lcd.print(" ");
if(btupx == 0){
delay(200);
jampagi++;
}
if(btdownx == 0){
delay(200);
jampagi--;
}
if(jampagi > 23){
jampagi = 0;
}
if(btokx == 0){
lcd.clear();
delay(2000);
EEPROM.write(addr1, jampagi);
return;
}
setjampagi();
}
void setjamsiang(){
btsetx = digitalRead(btset);
btupx = digitalRead(btup);
btdownx = digitalRead(btdown);
btokx = digitalRead(btok);
lcd.setCursor(0,0);
lcd.print("Waktu Pakan Siang ");
lcd.setCursor(0,1);
lcd.print("Jam: ");
lcd.print(jamsiang);
lcd.print(" ");
if(btupx == 0){
delay(200);
jamsiang++;
}
if(btdownx == 0){
delay(200);
jamsiang--;
}
if(jamsiang > 23){
jamsiang = 0;
}
if(btokx == 0){
lcd.clear();
delay(2000);
EEPROM.write(addr2, jamsiang);
return;
}
setjamsiang();
}
void setjamsore(){
btsetx = digitalRead(btset);
btupx = digitalRead(btup);
btdownx = digitalRead(btdown);
btokx = digitalRead(btok);
lcd.setCursor(0,0);
lcd.print("Waktu Pakan Sore ");
lcd.setCursor(0,1);
lcd.print("Jam: ");
lcd.print(jamsore);
lcd.print(" ");
if(btupx == 0){
delay(200);
jamsore++;
}
if(btdownx == 0){
delay(200);
jamsore--;
}
if(jamsore > 23){
jamsore = 0;
}
if(btokx == 0){
lcd.clear();
delay(2000);
EEPROM.write(addr3, jamsore);
return;
}
setjamsore();
}
void setbatasamo(){
btsetx = digitalRead(btset);
btupx = digitalRead(btup);
btdownx = digitalRead(btdown);
btokx = digitalRead(btok);
lcd.setCursor(0,0);
lcd.print("BATAS AMONIAK ");
lcd.setCursor(0,1);
lcd.print("mg/l: ");
lcd.print(batasamo);
lcd.print(" ");
if(btupx == 0){
delay(200);
batasamo = batasamo + 0.1;
}
if(btdownx == 0){
delay(200);
batasamo = batasamo - 0.1;
}
if(batasamo > 100.0){
batasamo = 0;
}
if(btokx == 0){
lcd.clear();
delay(2000);
EEPROM.write(addr4, batasamo);
return;
}
setbatasamo();
}
void setbatasph(){
btsetx = digitalRead(btset);
btupx = digitalRead(btup);
btdownx = digitalRead(btdown);
btokx = digitalRead(btok);
lcd.setCursor(0,0);
lcd.print("BATAS PH ");
lcd.setCursor(0,1);
lcd.print("PH: ");
lcd.print(batasph);
lcd.print(" ");
if(btupx == 0){
delay(200);
batasph = batasph + 0.1;
}
if(btdownx == 0){
delay(200);
batasph = batasph - 0.1;
}
if(batasph > 100.0){
batasph = 0;
}
if(btokx == 0){
lcd.clear();
delay(2000);
EEPROM.write(addr5, batasph);
return;
}
setbatasph();
}
3. Program ESP8266
#define BLYNK_TEMPLATE_ID "TMPL7GgHJ-bSF"
#define BLYNK_TEMPLATE_NAME "Pakan Ikan"
#define BLYNK_AUTH_TOKEN "2ycYdRyEJqHnFgXXsJKH3rh-yb5_cvbn"
#define BLYNK_PRINT Serial
#include <SPI.h>
#include <SPI.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
int temp;
int x = 5;
int y;
int value1;
int value2;
int value3;
int value4;
float ph;
int tds;
float amoniak;
float suhu;
int datain1;
int datain2;
int datain3;
int datain4;
String dataIn;
String dt[10];
int i;
boolean parsing = false;
BlynkTimer timer;
char ssid[] = "hotspothpku";
char pass[] = "123456789";
void sendSensor()
{
Blynk.virtualWrite(V0, ph);
Blynk.virtualWrite(V1, tds);
Blynk.virtualWrite(V2, amoniak);
Blynk.virtualWrite(V3, suhu);
delay(1000);
}
void setup(){
Serial.begin(9600);
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
timer.setInterval(1000L, sendSensor);
}
void loop() {
while(Serial.available()>0) {
// dataIn="";
char inChar = (char)Serial.read();
dataIn += inChar;
if (inChar == '\n') {
parsing = true;
}
}
if(parsing){
parsingData();
Blynk.run();
timer.run();
delay(200);
}
delay(100);
}
void parsingData(){
int j=0;
//kirim data yang telah diterima sebelumnya
//Serial.print("data masuk : ");
//Serial.print(dataIn);
//Serial.print("\n");
//inisialisasi variabel, (reset isi variabel)
dt[j]="";
//proses parsing data
for(i=1;i<dataIn.length();i++){
//pengecekan tiap karakter dengan karakter (#) dan (,)
if ((dataIn[i] == '#') || (dataIn[i] == ','))
{
//increment variabel j, digunakan untuk merubah index array penampung
j++;
dt[j]=""; //inisialisasi variabel array dt[j]
}
else
{
//proses tampung data saat pengecekan karakter selesai.
dt[j] = dt[j] + dataIn[i];
}
}
datain1 = dt[0].toInt();
datain2 = dt[1].toInt();
datain3 = dt[2].toInt();
datain4 = dt[3].toInt();
ph = datain1 / 100.0;
tds = datain2 / 1;
amoniak = datain3 / 100.0;
suhu = datain4 / 100.0;
}
#define BLYNK_TEMPLATE_NAME "Pakan Ikan"
#define BLYNK_AUTH_TOKEN "2ycYdRyEJqHnFgXXsJKH3rh-yb5_cvbn"
#define BLYNK_PRINT Serial
#include <SPI.h>
#include <SPI.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
int temp;
int x = 5;
int y;
int value1;
int value2;
int value3;
int value4;
float ph;
int tds;
float amoniak;
float suhu;
int datain1;
int datain2;
int datain3;
int datain4;
String dataIn;
String dt[10];
int i;
boolean parsing = false;
BlynkTimer timer;
char ssid[] = "hotspothpku";
char pass[] = "123456789";
void sendSensor()
{
Blynk.virtualWrite(V0, ph);
Blynk.virtualWrite(V1, tds);
Blynk.virtualWrite(V2, amoniak);
Blynk.virtualWrite(V3, suhu);
delay(1000);
}
void setup(){
Serial.begin(9600);
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
timer.setInterval(1000L, sendSensor);
}
void loop() {
while(Serial.available()>0) {
// dataIn="";
char inChar = (char)Serial.read();
dataIn += inChar;
if (inChar == '\n') {
parsing = true;
}
}
if(parsing){
parsingData();
Blynk.run();
timer.run();
delay(200);
}
delay(100);
}
void parsingData(){
int j=0;
//kirim data yang telah diterima sebelumnya
//Serial.print("data masuk : ");
//Serial.print(dataIn);
//Serial.print("\n");
//inisialisasi variabel, (reset isi variabel)
dt[j]="";
//proses parsing data
for(i=1;i<dataIn.length();i++){
//pengecekan tiap karakter dengan karakter (#) dan (,)
if ((dataIn[i] == '#') || (dataIn[i] == ','))
{
//increment variabel j, digunakan untuk merubah index array penampung
j++;
dt[j]=""; //inisialisasi variabel array dt[j]
}
else
{
//proses tampung data saat pengecekan karakter selesai.
dt[j] = dt[j] + dataIn[i];
}
}
datain1 = dt[0].toInt();
datain2 = dt[1].toInt();
datain3 = dt[2].toInt();
datain4 = dt[3].toInt();
ph = datain1 / 100.0;
tds = datain2 / 1;
amoniak = datain3 / 100.0;
suhu = datain4 / 100.0;
}
4. VIDEO HASILNYA









.jpeg)