// RGB to CMYK conversion Arduino code
// Input format over Serial: R,G,B (e.g. 255,100,0)
void setup() {
Serial.begin(9600);
Serial.println("Send RGB values like: 255,100,0");
}
void loop() {
if (Serial.available()) {
String input = Serial.readStringUntil('\n');
input.trim();
// Parse RGB values from input
int r = -1, g = -1, b = -1;
sscanf(input.c_str(), "%d,%d,%d", &r, &g, &b);
if (r >= 0 && g >= 0 && b >= 0 && r <= 255 && g <= 255 && b <= 255) {
// Convert to CMYK
float c, m, y, k;
rgbToCmyk(r, g, b, &c, &m, &y, &k);
Serial.println("CMYK Output:");
Serial.print("C: "); Serial.print(c, 1); Serial.print("%, ");
Serial.print("M: "); Serial.print(m, 1); Serial.print("%, ");
Serial.print("Y: "); Serial.print(y, 1); Serial.print("%, ");
Serial.print("K: "); Serial.print(k, 1); Serial.println("%");
} else {
Serial.println("Invalid input. Use format R,G,B (0-255 each).");
}
}
}
// Function to convert RGB to CMYK
void rgbToCmyk(int r, int g, int b, float* c, float* m, float* y, float* k) {
float rf = r / 255.0;
float gf = g / 255.0;
float bf = b / 255.0;
*k = 1.0 - max(max(rf, gf), bf);
if (*k == 1.0) {
*c = *m = *y = 0;
} else {
*c = (1.0 - rf - *k) / (1.0 - *k);
*m = (1.0 - gf - *k) / (1.0 - *k);
*y = (1.0 - bf - *k) / (1.0 - *k);
}
// Convert to percentage
*c *= 100.0;
*m *= 100.0;
*y *= 100.0;
*k *= 100.0;
}