#include "PID_v1.h"
#define LEDR 12
#define LEDG 10
#define LEDB 9
#define SETPOINT A1
#define INPUTPIN A0
#define PWMPIN 3
double Kp = 20, Ki = 5, Kd = 2;
double setPoint, input, output;
PID pidcs(&input, &output, & setPoint, Kp, Ki, Kd, P_ON_E, DIRECT);
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println(__FILE__); // kebutuhan Wokwi
// Set pid limit (PWMrange)
pidcs.SetOutputLimits(-4, 255);
// menyalakan PID
pidcs.SetMode(AUTOMATIC);
// Set pin u/ LED sbg Output
pinMode(LEDR, OUTPUT);
pinMode(LEDG, OUTPUT);
pinMode(LEDB, OUTPUT);
// pada NTC suhu berbanding terbalik dengan pembacaan
// input = map(analogRead(INPUTPIN), 115.0, 511.2, 80, 25);
// // define stpoint awal
// setPoint = map(analogRead(SETPOINT), 0, 1023, 16, 80);
}
void report(void){
static uint32_t last = 0;
const int interval = 1000; // interval proses print
if (millis() - last > interval) {
last += interval;
if (output > 0){
digitalWrite(LEDR, LOW);
digitalWrite(LEDG, HIGH);
digitalWrite(LEDB, LOW);
} else {
digitalWrite(LEDR, HIGH);
digitalWrite(LEDG, LOW);
digitalWrite(LEDB, LOW);
}
Serial.print("SP: ");
Serial.print(setPoint);
Serial.print("PV: ");
Serial.print(input);
Serial.print("CV: ");
Serial.print(output);
Serial.print(' ');
Serial.println();
}
}
void loop() {
// put your main code here, to run repeatedly:
// mengecek batas nilai NTC
Serial.println((analogRead(INPUTPIN)));
delay(500);
// input = map(analogRead(INPUTPIN), 115.0, 511.2, 80, 25);
// if (pidcs.Compute()){
// analogWrite(PWMPIN, (int)output);
// setPoint = map(analogRead(SETPOINT), 0, 1023, 26, 80);
// }
// report();
}
80
Set Point
16