#include <blinker.h>
#include <autoPOT.h>
#include <mechButton.h>
//***********************************************
// Custom pwmBlinker class.
//***********************************************
class pwmBlinker : public blinker {
public:
pwmBlinker(int inPin);
virtual ~pwmBlinker(void);
void setPWM(int inPWM);
virtual void pulseOn(void);
virtual void pulseOff(void);
protected:
int PWM;
};
pwmBlinker::pwmBlinker(int inPin)
: blinker(inPin) { PWM = 125; }
pwmBlinker::~pwmBlinker(void) { }
void pwmBlinker::setPWM(int inPWM) {
if (inPWM<0) PWM = 0;
else if (inPWM>255) PWM = 255;
else PWM = inPWM;
if (pulseHiLow()) pulseOn();
}
void pwmBlinker::pulseOn(void) { analogWrite(pin,PWM); }
void pwmBlinker::pulseOff(void) { analogWrite(pin,0); }
//***********************************************
// The program
//***********************************************
pwmBlinker greenLED(3);
pwmBlinker redLED(5);
pwmBlinker yellowLED(6);
autoPOT ourPOT(A0);
mechButton ourBtn(13);
enum states {
allLEDsOff,
greenLEDOn,
redLEDOn,
yellowLEDOn,
greenNRedFlash
};
states ourState;
void setup() {
yellowLED.setPeriod(1);
yellowLED.setPulse(1);
ourState = allLEDsOff;
ourPOT.setCallback(changePOT);
ourBtn.setCallback(btnClick);
}
void changePOT(int value) {
int mappedVal;
mappedVal = map(value,0,1024,1,255);
greenLED.setPWM(mappedVal);
redLED.setPWM(mappedVal);
yellowLED.setPWM(mappedVal);
}
void btnClick(void) {
if (!ourBtn.getState()) {
switch(ourState) {
case allLEDsOff :
greenLED.setPeriod(1);
greenLED.setPercent(100);
greenLED.setOnOff(true);
ourState = greenLEDOn;
break;
case greenLEDOn :
redLED.setPeriod(1);
redLED.setPercent(100);
redLED.setOnOff(true);
ourState = redLEDOn;
break;
case redLEDOn :
yellowLED.setOnOff(true);
ourState = yellowLEDOn;
break;
case yellowLEDOn :
greenLED.setPeriod(1500);
greenLED.setPulse(500);
redLED.setPeriod(1000);
redLED.setPulse(750);
ourState = greenNRedFlash;
break;
case greenNRedFlash :
greenLED.setOnOff(false);
redLED.setOnOff(false);
yellowLED.setOnOff(false);
ourState = allLEDsOff;
break;
}
}
}
void loop() { idle(); }