Skip to content

Instantly share code, notes, and snippets.

@l3kn
Created September 10, 2012 20:00
Show Gist options
  • Save l3kn/3693461 to your computer and use it in GitHub Desktop.
Save l3kn/3693461 to your computer and use it in GitHub Desktop.
One button Arduino rgb controller
int redPin = 10;
int greenPin = 11;
int bluePin = 9;
int buttonPin = 8;
int colorPins[] = {0, 10, 11, 9};
float colorVals[] = {125,255,255,255}; //aktuelle Farbwerte
float colorValsOrig[] = {125,255,255,255}; //Originalwerte(Warmweiß)
int colorDirs[] = {-2,-3,-3,-3};
int buttonState = 0;
int pressedTime = 0;
int mode = 0;
//0 = fade brightness
//1 = fade red
//2 = fade green
//3 = fade blue
boolean isOn = true;
void setup()
{
for(int i=1;i<=3;i++)
{
pinMode(colorPins[i], OUTPUT);
}
pinMode(buttonPin, INPUT);
Serial.begin(9600);
}
void loop()
{
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH)
{
pressedTime++;
Serial.println(pressedTime);
}
else
{
// Button auslesen
if (pressedTime>2&&pressedTime<=7)
{
isOn=!isOn;
Serial.println("switching on/off");
}
else if (pressedTime>0&&pressedTime<=2&&isOn)
{
Serial.println("switching mode");
mode++;
if(mode>4)
{
mode = 0;
}
for(int i=1;i<=3;i++)
{
digitalWrite(colorPins[i], LOW);
}
delay(50);
switch(mode)
{
case 0:
for(int i=1;i<=3;i++)
{
digitalWrite(colorPins[i], HIGH);
}
break;
case 1:
digitalWrite(colorPins[1], HIGH);
break;
case 2:
digitalWrite(colorPins[2], HIGH);
break;
case 3:
digitalWrite(colorPins[3], HIGH);
break;
}
delay(200);
for(int i=1;i<=3;i++)
{
digitalWrite(colorPins[i], LOW);
}
delay(50);
}
pressedTime = 0;
}
//Eingabe verarbeiten
if(pressedTime>7)
{
if(mode != 4)
{
float result = colorVals[mode]+colorDirs[mode];
if(result < 0 || result > 255)
{
Serial.println("switchDir");
colorDirs[mode]*=-1;
}
else
{
colorVals[mode]+=colorDirs[mode];
}
}
else
{
for(int i=0;i<=3;i++)
{
colorVals[i] = colorValsOrig[i];
}
}
}
//RGB ausgeben
if (isOn) {
for(int i=1;i<=3;i++)
{
analogWrite(colorPins[i], colorVals[i]*colorVals[0]/255);
}
}
else {
for(int i=1;i<=3;i++)
{
digitalWrite(colorPins[i], LOW);
}
}
for(int i=0;i<=3;i++)
{
Serial.print(colorVals[i]);
Serial.print("/");
}
Serial.println("");
delay(100);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment