In recent project, I'm working with light dimmer.
Let me explain with example of fan. In switch board, we have a fan switch which can able to ON/OFF our fan & FAN REGULATOR which vary speed of our fan. Now, when our switch ON then our fan start and then with help of regulator we can vary speed of fan. And when we switch OFF then our fan stop and we can't do anything means not vary fan speed. Same things I want in my light dimmer. One push button pressed once then it's just start my light dimmer and vise versa operation. And When push button pressed again then it's just stop my light dimmer.
Here is my full code.
int kPinPWM = 9; // This pin provides PWM values
int kPinSW1 = 6; // PUSH BUTTON // This pin used for increase PWM values
int kPinSW2 = 7; // PUSH BUTTON // This pin used for decrease PWM values
int kPinSw = 10; // PUSH BUTTON // This pin used for ON/OFF PWM pin means ON/OFF pin 9
int i = 0;
int temp = 0; // Flag
void setup()
{
pinMode(kPinPWM, OUTPUT);
pinMode(kPinSW1, INPUT);
pinMode(kPinSW2, INPUT);
digitalWrite(kPinSW1, HIGH);
digitalWrite(kPinSW2, HIGH);
pinMode(kPinSw, INPUT);
digitalWrite(kPinSw, HIGH);
}
void loop()
{
if(digitalRead(kPinSw) == LOW && temp == 0) //If I pressed PUSH BUTTOPN(PIN 10) and temp = 0
{
temp = 1; // Change value to 1 // temp = 1
digitalWrite(kPinPWM, HIGH); // Turn ON PWM pin (PIN 9)
if(digitalRead(kPinSW1) == LOW) // Pressed PUSH BUTTON to increase PWM value
{
i++;
if(i > 4)
{
i = 4;
}
while(digitalRead(kPinSW1) == LOW); //Until PUSH BUTTON pressed
}
if(digitalRead(kPinSW2) == LOW) // Pressed PUSH BUTTON to decrease PWM value
{
i--;
if(i < 0)
{
i = 0;
}
while(digitalRead(kPinSW2) == LOW); //Until PUSH BUTTON pressed
}
switch (i)
{
case 0:
analogWrite(kPinPWM, 0); // When Button pressed not pressed send 0 value
break;
case 1:
analogWrite(kPinPWM, 64); // When Button pressed and i = 1 send 64 value
break;
case 2:
analogWrite(kPinPWM, 128); // When Button pressed and i = 2 send 128 value
break;
case 3:
analogWrite(kPinPWM, 192); // When Button pressed and i = 3 send 192 value
break;
case 4:
analogWrite(kPinPWM, 255); // When Button pressed and i = 4 send 255 value
break;
}
}
if(digitalRead(kPinSw) == LOW && temp == 1) //If I pressed PUSH BUTTOPN(PIN 10) and temp = 1
{
temp = 0; // Change value to 0 // temp = 0
digitalWrite(kPinPWM, LOW); Turn OFF PWM pin (PIN 9)
}
}