here I provide the code from arduino uno, maybe it'll help
#include <Fuzzy.h>
#include <OneWire.h> //Memanggil library OneWire yang diperlukan sebagai dependensi library Dallas Temperature
#include <Wire.h>
#include <DallasTemperature.h> // Memanggil library Dallas Temperature
#define ONE_WIRE_BUS 7 // Menempatkan PIN hasil pembacaan sensor DS18B20 pada PIN 7.
OneWire oneWire(ONE_WIRE_BUS); //Membuat variabel oneWire berdasarkan PIN yang telah didefinisikan
DallasTemperature sensor(&oneWire); //Membuat variabel untuk menyimpan hasil pengukuran
float suhuDS18B20; //deklarasi variable suhu DS18B20 dengan jenis data float
int sensorPin = A0;
float volt;
int ntu;
// Instantiating a Fuzzy object
Fuzzy *fuzzy = new Fuzzy();
//FuzzyInput Turbidity
FuzzySet *jernih = new FuzzySet(0, 0, 50, 150);
FuzzySet *agakkeruh = new FuzzySet(50, 150, 1300, 1500);
FuzzySet *keruh = new FuzzySet(1300, 1500, 1600, 1600);
//FuzzyInput Suhu
FuzzySet *dingin = new FuzzySet(0, 0, 15, 23);
FuzzySet *hangat = new FuzzySet(15, 23, 30, 35);
FuzzySet *panas = new FuzzySet(30, 35, 45, 45);
//FuzzyOutput Kondisi
FuzzySet *baik = new FuzzySet(0, 0, 50, 100);
FuzzySet *cukupbaik = new FuzzySet(50, 100, 150, 200);
FuzzySet *bahaya = new FuzzySet(150, 200, 255, 255);
void setup(void) {
Serial.begin(9600); //Menginisiasikan setup kecepatan komunikasi
sensor.begin(); //Menginisiasikan sensor One-Wire DS18B20
FuzzyInput *turbidity = new FuzzyInput(1);
turbidity->addFuzzySet(jernih);
turbidity->addFuzzySet(agakkeruh);
turbidity->addFuzzySet(keruh);
fuzzy->addFuzzyInput(turbidity);
FuzzyInput *suhu = new FuzzyInput(2);
suhu->addFuzzySet(dingin);
suhu->addFuzzySet(hangat);
suhu->addFuzzySet(panas);
fuzzy->addFuzzyInput(suhu);
FuzzyOutput *kondisi = new FuzzyOutput(1);
kondisi->addFuzzySet(baik);
kondisi->addFuzzySet(cukupbaik);
kondisi->addFuzzySet(bahaya);
fuzzy->addFuzzyOutput(kondisi);
// Building FuzzyRule 1
FuzzyRuleAntecedent *jernih_dingin = new FuzzyRuleAntecedent();
jernih_dingin->joinWithAND(jernih, dingin);
FuzzyRuleConsequent *kondisi_cukupbaik1 = new FuzzyRuleConsequent();
kondisi_cukupbaik1->addOutput(cukupbaik);
FuzzyRule *fuzzyRule01 = new FuzzyRule(1, jernih_dingin, kondisi_cukupbaik1);
fuzzy->addFuzzyRule(fuzzyRule01);
// Building FuzzyRule 2
FuzzyRuleAntecedent *jernih_hangat = new FuzzyRuleAntecedent();
jernih_hangat->joinWithAND(jernih, hangat);
FuzzyRuleConsequent *kondisi_baik = new FuzzyRuleConsequent();
kondisi_baik->addOutput(baik);
FuzzyRule *fuzzyRule02 = new FuzzyRule(2, jernih_hangat, kondisi_baik);
fuzzy->addFuzzyRule(fuzzyRule02);
// Building FuzzyRule 3
FuzzyRuleAntecedent *jernih_panas = new FuzzyRuleAntecedent();
jernih_panas->joinWithAND(jernih, panas);
FuzzyRuleConsequent *kondisi_bahaya1 = new FuzzyRuleConsequent();
kondisi_bahaya1->addOutput(bahaya);
FuzzyRule *fuzzyRule03 = new FuzzyRule(3, jernih_panas, kondisi_bahaya1);
fuzzy->addFuzzyRule(fuzzyRule03);
// Building FuzzyRule 4
FuzzyRuleAntecedent *agakkeruh_dingin = new FuzzyRuleAntecedent();
agakkeruh_dingin->joinWithAND(agakkeruh, dingin);
FuzzyRuleConsequent *kondisi_cukupbaik2 = new FuzzyRuleConsequent();
kondisi_cukupbaik2->addOutput(cukupbaik);
FuzzyRule *fuzzyRule04 = new FuzzyRule(4, agakkeruh_dingin, kondisi_cukupbaik2);
fuzzy->addFuzzyRule(fuzzyRule04);
// Building FuzzyRule 5
FuzzyRuleAntecedent *agakkeruh_hangat = new FuzzyRuleAntecedent();
agakkeruh_hangat->joinWithAND(agakkeruh, hangat);
FuzzyRuleConsequent *kondisi_cukupbaik3 = new FuzzyRuleConsequent();
kondisi_cukupbaik3->addOutput(cukupbaik);
FuzzyRule *fuzzyRule05 = new FuzzyRule(5, agakkeruh_hangat, kondisi_cukupbaik3);
fuzzy->addFuzzyRule(fuzzyRule05);
// Building FuzzyRule 6
FuzzyRuleAntecedent *agakkeruh_panas = new FuzzyRuleAntecedent();
agakkeruh_panas->joinWithAND(agakkeruh, panas);
FuzzyRuleConsequent *kondisi_bahaya2 = new FuzzyRuleConsequent();
kondisi_bahaya2->addOutput(bahaya);
FuzzyRule *fuzzyRule06 = new FuzzyRule(6, agakkeruh_panas, kondisi_bahaya2);
fuzzy->addFuzzyRule(fuzzyRule06);
// Building FuzzyRule 7
FuzzyRuleAntecedent *keruh_dingin = new FuzzyRuleAntecedent();
keruh_dingin->joinWithAND(keruh, dingin);
FuzzyRuleConsequent *kondisi_bahaya3 = new FuzzyRuleConsequent();
kondisi_bahaya3->addOutput(bahaya);
FuzzyRule *fuzzyRule07 = new FuzzyRule(7, keruh_dingin, kondisi_bahaya3);
fuzzy->addFuzzyRule(fuzzyRule07);
// Building FuzzyRule 8
FuzzyRuleAntecedent *keruh_hangat = new FuzzyRuleAntecedent();
keruh_hangat->joinWithAND(keruh, hangat);
FuzzyRuleConsequent *kondisi_bahaya4 = new FuzzyRuleConsequent();
kondisi_bahaya4->addOutput(bahaya);
FuzzyRule *fuzzyRule08 = new FuzzyRule(8, keruh_hangat, kondisi_bahaya4);
fuzzy->addFuzzyRule(fuzzyRule08);
// Building FuzzyRule 9
FuzzyRuleAntecedent *keruh_panas = new FuzzyRuleAntecedent();
keruh_panas->joinWithAND(keruh, panas);
FuzzyRuleConsequent *kondisi_bahaya5 = new FuzzyRuleConsequent();
kondisi_bahaya5->addOutput(bahaya);
FuzzyRule *fuzzyRule09 = new FuzzyRule(9, keruh_panas, kondisi_bahaya5);
fuzzy->addFuzzyRule(fuzzyRule09);
delay(1000);
}
void loop(void) {
// baca permintaan dari NodeMCU
String minta = "";
// baca permintaan NodeMCU
while (Serial.available() > 0) {
minta += char(Serial.read());
}
// buang spasi data yang diterima
minta.trim();
// Uji variable minta
if (minta == "Ya") {
// jalankan kirimdata
{
kirimdata();
}
}
// kosongkan variable minta
minta = "";
delay(1000);
}
float round_to_dp(float in_value, int decimal_place) {
float multiplier = powf(10.0f, decimal_place);
in_value = roundf(in_value * multiplier) / multiplier;
return in_value;
}
void kirimdata() {
//Sensor Suhu Dallas temperature ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//sensor.setResolution(9); // Sebelum melakukan pengukuran, atur resolusinya
sensor.setResolution(10);
//sensor.setResolution(11);
//sensor.setResolution(12);
sensor.requestTemperatures(); // Perintah konversi suhu
suhuDS18B20 = sensor.getTempCByIndex(0); //Membaca data suhu dari sensor #0 dan mengkonversikannya ke nilai Celsius
// suhuDS18B20 = (suhuDS18B20*9/5) + 32;
// suhuDS18B20 = suhuDS18B20 = 273.15;
// Sensor Kekeruhan Sen0189 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
volt = 0;
for (int i = 0; i < 800; i++) {
volt += ((float)analogRead(sensorPin) / 1024) * 5;
//float voltage = analogRead(sensorPin) * (5.0 / 1024.0);
}
volt = volt / 800;
volt = round_to_dp(volt, 2);
if (volt < 2.5) {
ntu = 3000;
} else {
ntu = -1103.2 * square(volt) + 5399.2 * (volt)-3592.2;
}
// Serial communication ////////////////////////////////////////////////////////////////////////////////////////////////////////
// Set the random value as an input
fuzzy->setInput(1, ntu);
fuzzy->setInput(2, suhuDS18B20);
fuzzy->fuzzify();
// Running the Defuzzification
int output = fuzzy->defuzzify(1);
//analogWrite(pin_led, output);
/*
if (output >= 0 && output <= 49) {
// Sediakan variable penampung data
datakirim = String(suhuDS18B20, 2) + "#" + String(ntu) + "#" + String("Baik");
}
else if(output >= 50 && output <= 200){
// Sediakan variable penampung data
datakirim = String(suhuDS18B20, 2) + "#" + String(ntu) + "#" + String("sedang");
}
else (output >= 201 && output <= 255);{
// Sediakan variable penampung data
datakirim = String(suhuDS18B20, 2) + "#" + String(ntu) + "#" + String("aman");
}
*/
String datakirim;
datakirim = String(suhuDS18B20, 2) + "#" + String(ntu) + "#" + String(output);
// kirim data
Serial.println(datakirim);
// Tampilan serial Monitor ////////////////////////////////////////////////////////////////////////////////////////////////////
/*
//Serial.println(suhuDS18B20, 1); //Presisi 1 digit
Serial.print(suhuDS18B20, 2); //Presisi 2 digit
//Serial.println(suhuDS18B20, 3); //Presisi 3 digit
//Serial.println(suhuDS18B20, 4); //Presisi 4 digit
Serial.print(" ");
Serial.print(output);
Serial.print(" ");
Serial.print(volt);
Serial.print(" Volt ");
Serial.print(ntu);
Serial.println(" NTU");
*/
}