Browse Source

Add a button input

Robert Marshall 5 years ago
parent
commit
cf8cf2908c
2 changed files with 46 additions and 11 deletions
  1. 33 0
      Transmitter/src/Button.cpp
  2. 13 11
      Transmitter/src/main.cpp

+ 33 - 0
Transmitter/src/Button.cpp

@@ -0,0 +1,33 @@
+#include <Arduino.h>
+
+class Button {
+	const unsigned int _debounceDelay = 50;
+
+	unsigned int _pin;
+	unsigned long _lastDebounce;
+	bool _prevButtonValue, _currentValue;
+	void (*_pressCallback)(void);
+
+public:
+	Button(int pin, void (*pressCallback)(void)) {
+		_pin = pin;
+		_pressCallback = pressCallback;
+		pinMode(pin, INPUT);
+	}
+
+	void loop() {
+		bool reading = digitalRead(_pin);
+
+		if (_prevButtonValue != reading) {
+			_lastDebounce = millis();
+		}
+
+		if (millis() - _lastDebounce > _debounceDelay && reading != _currentValue){
+			_currentValue = reading;
+			if (_currentValue)
+				_pressCallback();
+		}
+
+		_prevButtonValue = reading;
+	}
+};

+ 13 - 11
Transmitter/src/main.cpp

@@ -1,12 +1,13 @@
 #include <Arduino.h>
 #include <RH_ASK.h>
+#include <Button.cpp>
 
 RH_ASK _driver;
-int _buttonPin=13;
+void buttonPress();
+Button _button(13, &buttonPress);
 unsigned int _counter;
 
 void setup() {
-	pinMode(_buttonPin, INPUT);
 	Serial.begin(9600);
 	Serial.println("Starting...");
     if (!_driver.init())
@@ -15,13 +16,14 @@ void setup() {
 }
 
 void loop() {
-	if (digitalRead(_buttonPin)){
-		Serial.println("Transmitting...");
-		char msg[12];
-		sprintf(msg, "Hello World%d", _counter++);
-		_driver.send((uint8_t *)msg, strlen(msg));
-		_driver.waitPacketSent();
-		Serial.println("Transmitted");
-		delay(1000);
-	}
+	_button.loop();
+}
+
+void buttonPress(){
+	Serial.println("Transmitting...");
+	char msg[12];
+	sprintf(msg, "Hello World%d", _counter++);
+	_driver.send((uint8_t *)msg, strlen(msg));
+	_driver.waitPacketSent();
+	Serial.println("Transmitted");
 }