/*
Nama : Maulana Agus Setiawan
NIM : 2209106024
Soal : 4
*/
const int LED_PIN[] = {37, 38, 39};
const int SPEED_PIN = 14;
const int PWM_FREQUENCY = 5000;
const int PWM_RESOLUTION = 8;
float phase = 0.0;
const float DOUBLE_PI = 6.28318; // 2π
void setup() {
// Inisialisasi Serial Monitor
Serial.begin(115200);
for(int i = 0; i < 3; i++){
ledcAttach(LED_PIN[i], PWM_FREQUENCY, PWM_RESOLUTION);
}
pinMode(SPEED_PIN, INPUT);
}
void loop() {
int potValue = analogRead(SPEED_PIN);
int changeSpeed = map(potValue, 0, 4095, 1, 20);
float phaseIncrement = 0.01 * changeSpeed;
int red = 128 + 127 * sin(phase);
int green = 128 + 127 * sin(phase + 2.0943); // 2π/3 phase shift
int blue = 128 + 127 * sin(phase + 4.1887); // 4π/3 phase shift
ledcWrite(LED_PIN[2], red);
ledcWrite(LED_PIN[1], green);
ledcWrite(LED_PIN[0], blue);
Serial.print("Kecepatan: ");
Serial.print(changeSpeed);
Serial.print("\tR: ");
Serial.print(red);
Serial.print("\tG: ");
Serial.print(green);
Serial.print("\tB: ");
Serial.println(blue);
// Tingkatkan fase untuk pergerakan
phase += phaseIncrement;
if (phase >= DOUBLE_PI) { // Reset saat mencapai 2π
phase = 0;
}
// Delay kecil untuk kontrol refresh rate
delay(20);
}