// Arduino PWM pins int redPin = 11; int greenPin = 6; int bluePin = 9; // Arduino encoder pins int encoderPinA = 3; int encoderPinB = 4; // Color variables int colorVal; int redVal; int greenVal; int blueVal; // Encoder variables int encoderPos; int encoderPinACurrent; int encoderPinALast = HIGH; // Other int counter; void setup(){ pinMode(encoderPinA,INPUT_PULLUP); pinMode(encoderPinB,INPUT_PULLUP); } void loop(){ readEncoder(); encoder2rgb(counter); analogWrite(redPin, redVal); analogWrite(greenPin, greenVal); analogWrite(bluePin, blueVal); } int readEncoder(){ encoderPinACurrent = digitalRead(encoderPinA); if ((encoderPinALast == LOW) && (encoderPinACurrent == HIGH)){ if (digitalRead(encoderPinB) == LOW){ encoderPos = encoderPos - 1; } else { encoderPos = encoderPos + 1; } } encoderPinALast = encoderPinACurrent; counter = encoderPos*8; if (counter < 0){ counter = 1535; } else if (counter > 1535){ counter = 0; } return counter; } int encoder2rgb(int counterVal){ // Red to yellow if (counterVal <= 255) { colorVal = counterVal; redVal = 255; greenVal = colorVal; blueVal = 0; } // Yellow to green else if (counterVal <= 511) { colorVal = counterVal - 256; redVal = 255 - colorVal; greenVal = 255; blueVal = 0; } // Green to cyan else if (counterVal <= 767) { colorVal = counterVal - 512; redVal = 0; greenVal = 255; blueVal = colorVal; } // Cyan to blue else if (counterVal <= 1023) { colorVal = counterVal - 768; redVal = 0; greenVal = 255 - colorVal; blueVal = 255; } // Blue to magenta else if (counterVal <= 1279) { colorVal = counterVal - 1024; redVal = colorVal; greenVal = 0; blueVal = 255; } // Magenta to red else { colorVal = counterVal - 1280; redVal = 255; greenVal = 0; blueVal = 255 - colorVal; } return redVal, greenVal, blueVal; }