Browse Source

Fade LED in and out

Robert Marshall 5 years ago
parent
commit
fa11075e2f
2 changed files with 29 additions and 4 deletions
  1. 19 2
      Receiver/src/LED.cpp
  2. 10 2
      Receiver/src/main.cpp

+ 19 - 2
Receiver/src/LED.cpp

@@ -5,22 +5,39 @@
 class LED{
 	unsigned int _pin;
 	bool _on;
+	unsigned long _fadeDuration, _fadeStart, _fadeEnd;
+
+	float getMultiplier() {
+		unsigned long now = millis();
+		float remainingTime = _fadeEnd > now ? constrain(_fadeEnd - now, 0, _fadeDuration) : 0;
+		float value = remainingTime / (float)_fadeDuration;
+		return _on ? value : 1.0f - value;
+	}
+
+	void resetTimers(){
+		_fadeStart = millis();
+		_fadeEnd = _fadeStart + _fadeDuration;
+	}
 
 public:
-	LED(unsigned int pin){
+	LED(unsigned int pin, unsigned long fadeDuration){
 		_pin = pin;
 		pinMode(pin, OUTPUT);
+		_fadeDuration = fadeDuration;
 	}
 
 	void on(){
+		resetTimers();
 		_on = true;
 	}
 
 	void off(){
+		resetTimers();
 		_on = false;
 	}
 
 	void loop(){
-		analogWrite(_pin, PWMRANGE * _on);
+		float multiplier = getMultiplier();
+		analogWrite(_pin, PWMRANGE * multiplier);
 	}
 };

+ 10 - 2
Receiver/src/main.cpp

@@ -4,7 +4,10 @@
 
 void messageCallback(char *message);
 Receiver _receiver(2, &messageCallback, 9);
-LED _led(11);
+LED _led(11, 1000);
+
+bool on = false;
+unsigned long lastSwitch = 0;
 
 bool validateMessage(char* message){
 	return strncmp("LED On: ", message, 8) == 0; //returns 0 on match
@@ -29,6 +32,11 @@ void setup(){
 }
 
 void loop(){
-	_receiver.loop();
+	if (millis()-lastSwitch>=2000){
+		on = !on;
+		on ? _led.on() : _led.off();
+		lastSwitch = millis();
+	}
+	//_receiver.loop();
 	_led.loop();
 }