       blink(PIN_STATUS, 1);
     }
   }
+
+  processLightMode();
+}
+
+void processLightMode() {
+  switch(lightMode) {
+    case LightMode::CRUDE:
+      processCrudeLightMode();
+      break;
+  }
+}
+
+void processCrudeLightMode() {
+  unsigned long m = millis() - lightModeStart;
+  int r = countColor(m, 0*crude_Ts);
+  int g = countColor(m, 2*crude_Ts);
+  int b = countColor(m, 4*crude_Ts);
+  setColor(1.5*r, g*0.6, b*0.6); // Some calibrations for LED color brightness
 }
 
 String processCommand(String command) {

    String command = Serial.readStringUntil('\n');

    String output = processCommand(command);
    if (output.length() > 1) {
      Serial.println("+" + command);
      if (output != EMPTY_COMMAND_SUCCESS)
        Serial.println(output);


#define EMPTY_COMMAND_SUCCESS " "
#define EMPTY_COMMAND_FAIL ""

enum LightMode {
  NONE, STATIC,CRUDE
};

const int crude_T = 5000;
const int crude_I = 255/2;
const float crude_Ts = 1.0/6 * crude_T;

unsigned long lightModeStart = 0;
LightMode lightMode = NONE;

void setup() {
  pinMode(PIN_RED, OUTPUT);
