Driver for Diving Flashlite

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