Browse Source

Move from RFTransmitter library to RadioHead for more reliable comms. Add timer to resend message at set interval.

Robert Marshall 5 years ago
parent
commit
61148d767c

+ 2 - 2
Receiver/platformio.ini

@@ -15,5 +15,5 @@ framework = arduino
 upload_port = /dev/ttyUSB1
 
 lib_deps=
-	RFReceiver
-	PinChangeInterruptHandler
+	RadioHead
+	SPI

+ 9 - 8
Receiver/src/Receiver.cpp

@@ -1,25 +1,26 @@
-#include <PinChangeInterruptHandler.h>
-#include <RFReceiver.h>
+#include <RH_ASK.h>
 
 class Receiver{
 	void (*_messageCallback)(char *);
 	unsigned int _bufferSize;
-	RFReceiver _receiver;
+	RH_ASK _driver;
 
 public:
-	Receiver(unsigned int pin, void(*messageCallback)(char*), unsigned int bufferSize):_receiver(pin){
+	Receiver(unsigned int pin, void(*messageCallback)(char*), unsigned int bufferSize){
 		_messageCallback = messageCallback;
 		_bufferSize = bufferSize;
 	}
 
 	void setup(){
-		_receiver.begin();
+		if (!_driver.init())
+			Serial.println("Receiver setup failed");
 	}
 
 	void loop()	{
-		char message[_bufferSize];
-		if (_receiver.ready()){
-			_receiver.recvPackage((byte *)message);
+		uint8_t message[_bufferSize];
+		uint8_t buflen = sizeof(message);
+
+		if (_driver.recv(message, &buflen)){
 			_messageCallback((char *)message);
 		}
 	}

+ 1 - 5
Receiver/src/main.cpp

@@ -33,10 +33,6 @@ void setup(){
 }
 
 void loop(){
-	if (millis() - lastSwitch >= 500) {
-		_led.toggle();
-		lastSwitch = millis();
-	}
-	//_receiver.loop();
+	_receiver.loop();
 	_led.loop();
 }

+ 23 - 0
Transmitter/src/Timer.cpp

@@ -0,0 +1,23 @@
+#include <Arduino.h>
+
+class Timer{
+private:
+	unsigned long _interval, _lastTick;
+	void (*_callback)(void);
+
+public:
+	Timer(unsigned long interval, void (*callback)(void)){
+		_interval = interval;
+		_callback = callback;
+		_lastTick = millis();
+	}
+
+	void loop(){
+		unsigned long tick = millis();
+
+		if (tick >= _lastTick + _interval){
+			_callback();
+			_lastTick = tick;
+		}
+	}
+};

+ 8 - 4
Transmitter/src/Transmitter.cpp

@@ -1,14 +1,18 @@
 #include <Arduino.h>
-#include <RFTransmitter.h>
+#include <RH_ASK.h>
 
 class Transmitter{
-	RFTransmitter _transmitter;
+	RH_ASK _driver;
 
 public:
-	Transmitter(unsigned int pin):_transmitter(pin){
+
+	void setup(){
+		if (!_driver.init())
+			Serial.println("Transmitter setup failed");
 	}
 
 	void send(char* message){
-		_transmitter.send((byte*)message, strlen(message));
+		_driver.send((uint8_t *)message, strlen(message));
+		_driver.waitPacketSent();
 	}
 };

+ 13 - 2
Transmitter/src/main.cpp

@@ -1,14 +1,18 @@
 #include <Arduino.h>
 #include <Button.cpp>
 #include <Transmitter.cpp>
+#include <Timer.cpp>
 
 void sendOnSignal();
 void sendOffSignal();
+void resend();
 Button _button(13, &sendOnSignal, &sendOffSignal);
-unsigned int _counter;
-Transmitter _transmitter(12);
+unsigned int _signalValue;
+Transmitter _transmitter;
+Timer _timer(1000, &resend);
 
 void sendSignal(int value){
+	_signalValue=value;
 	Serial.print("Transmitting: ");
 	char msg[9];
 	sprintf(msg, "LED On: %d", value);
@@ -25,11 +29,18 @@ void sendOffSignal(){
 	sendSignal(0);
 }
 
+void resend(){
+	sendSignal(_signalValue);
+}
+
 void setup() {
 	Serial.begin(9600);
 	Serial.println("Starting");
+	_transmitter.setup();
+	Serial.println("Started");
 }
 
 void loop() {
 	_button.loop();
+	_timer.loop();
 }