Hi,
my arduino hardware arrived yesterday so i did some teste. i have now a working sollution and read some more about switch case.
this is my sollution:
#define whiteled 11 //assign pin 11 to white led
#define blueled 10 //assign pin 10 to blue led
#define BUTTON 9 //assign pin 7 to pushbutton
#define SAMPLING 50 //50milliSecond per press, used for debouncing
static unsigned long TIMER = 0; //record current millis()
byte state = 0; //val used to check current status of pushbutton later in the program
int previous=LOW;
int reading;
void setup()
{
pinMode(whiteled,OUTPUT);
pinMode(blueled,OUTPUT);
pinMode(BUTTON,INPUT);
}
void loop()
{
reading = digitalRead(BUTTON);
if(millis() - TIMER >= SAMPLING) //sampling ~= 50mS
{ TIMER = millis(); if(reading == HIGH && previous == LOW) //button pressed, pulled low
{ state++; //increment state
delay(500); //delay for not ramping up if pressed to long
}
if(state == 1)
{ digitalWrite(blueled,0);
analogWrite(whiteled, 64);
}
else if(state == 2)
{ analogWrite(whiteled, 128);
digitalWrite(blueled,0);
}
else if(state == 3)
{ analogWrite(whiteled, 255);
digitalWrite(blueled,0);
}
else if(state == 4)
{ analogWrite(whiteled, 0);
digitalWrite(blueled,1);
}
else if(state > 4)
{ state = 0;
analogWrite(whiteled, 0);
digitalWrite(blueled,0);
}
}
}
and i think this will also work:
#define whiteled 11 //assign pin 11 to white led
#define blueled 10 //assign pin 10 to blue led
#define BUTTON 9 //assign pin 7 to pushbutton
#define SAMPLING 50 //50milliSecond per press, used for debouncing
static unsigned long TIMER = 0; //record current millis()
byte state = 0; //val used to check current status of pushbutton later in the program
int previous=LOW;
int reading;
int whiteLevel;
int blueLevel;
void setup()
{
pinMode(whiteled,OUTPUT);
pinMode(blueled,OUTPUT);
pinMode(BUTTON,INPUT);
}
void loop()
{
reading = digitalRead(BUTTON);
if(millis() - TIMER >= SAMPLING) //sampling ~= 50mS
{ TIMER = millis(); if(reading == HIGH && previous == LOW)
{ state++; //increment state
delay(500); //delay for not ramping up if pressed to long
}
switch (state)
{
case 0:
whiteLevel = 0;
blueLevel = 0;
break;
case 1:
whiteLevel = (30 * 255) / 100;
blueLevel = 0;
break;
case 2:
whiteLevel = (75 * 255) / 100;
blueLevel = 0;
break;
case 3:
whiteLevel = 255;
blueLevel = 0;
break;
case 4:
whiteLevel = 0;
blueLevel = 255;
break;
default:
state = 0;
}
analogWrite(whiteled, whiteLevel);
analogWrite(blueled, blueLevel);
}
}
now i would like to add some battery monitor that ramps down the light if it will go empty.
markus