#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
void task1 (void *pvParameters);
//void task2 (void *pvParameters);
const int pinPot1 = 34;
const int pinPot2 = 35;
const int red = 23;
const int green = 19;
const int blue = 0;
float pH_ideal = 7;
float PPM_ideal = 7;
float pH, PPM, selisih_pH, selisih_PPM;
void baca_pH();
void baca_PPM();
void kontrol_pH();
void kontrol_PPM();
float outputFuzzy(float x);
void setup() {
Serial.begin(115200);
pinMode(pinPot2, INPUT);
pinMode(blue, OUTPUT);
pinMode(pinPot1, INPUT);
pinMode(red, OUTPUT);
pinMode(green, OUTPUT);
//pinMode(pinPot1, INPUT);
//pinMode(red, OUTPUT);
//pinMode(green, OUTPUT);
xTaskCreate(task1, "task1", 2048, NULL, 1, NULL);
//xTaskCreate(task2, "task2", 2048, NULL, 1, NULL);
}
void loop() {
baca_PPM();
if (PPM >= 5){ //waktu sesuai RTC
kontrol_pH();
}
}
void task1 (void *pvParameters){
while(1){
baca_pH();
//baca_PPM();
Serial.print("pH : ");
Serial.println(pH);
//Serial.print("PPM : ");
//Serial.println(PPM);
vTaskDelay( 500 / portTICK_PERIOD_MS );
}
}
/*
void task2 (void *pvParameters){
pinMode(pinPot2, INPUT);
pinMode(blue, OUTPUT);
while(1){
baca_PPM();
//Serial.println("Output Nutrisi : ");
//Serial.println(outputFuzzy(selisih_PPM));
int sw = digitalRead(2);
if (sw == HIGH){ //waktu sesuai RTC
kontrol_PPM();
}
//vTaskDelay( 500 / portTICK_PERIOD_MS );
}
}
*/
void baca_pH(){
float potValue1 = analogRead(pinPot1);
pH = potValue1 / 4095 * 14;
selisih_pH = abs(pH_ideal-pH);
//Serial.print("pH : ");
//Serial.println(pH);
}
void kontrol_pH(){
baca_pH();
if (pH <= pH_ideal ){
digitalWrite(red, HIGH);
digitalWrite(green, LOW);
delay(2000);
digitalWrite(red, LOW);
digitalWrite(green, LOW);
}
else if (pH >= pH_ideal ){
digitalWrite(green, HIGH);
digitalWrite(red, LOW);
delay(2000);
digitalWrite(green, LOW);
digitalWrite(red, LOW);
}
}
void baca_PPM(){
float potValue2 = analogRead(pinPot2);
PPM = potValue2 / 4095 * 10;
if (selisih_pH <= PPM_ideal){
selisih_PPM = PPM_ideal-PPM;
}
else if (selisih_pH > PPM_ideal){
selisih_PPM = 0;
}
//Serial.print("PPM : ");
//Serial.println(PPM);
}
void kontrol_PPM(){
baca_PPM();
if (PPM <= PPM_ideal ){
digitalWrite(blue, HIGH);
delay(2000);
digitalWrite(blue, LOW);
}
if (PPM >= PPM_ideal ){
digitalWrite(blue, LOW);
delay(2000);
}
}
float outputFuzzy(float x){
return x*1;
}