diff --git a/src/drone_services/CMakeLists.txt b/src/drone_services/CMakeLists.txt
index ef491f87..130f0f65 100644
--- a/src/drone_services/CMakeLists.txt
+++ b/src/drone_services/CMakeLists.txt
@@ -28,6 +28,7 @@ rosidl_generate_interfaces(${PROJECT_NAME}
"srv/SetVehicleControl.srv"
"srv/ArmDrone.srv"
"srv/DisarmDrone.srv"
+ "srv/ControlRelais.srv"
"msg/DroneControlMode.msg"
)
diff --git a/src/drone_services/srv/ControlRelais.srv b/src/drone_services/srv/ControlRelais.srv
new file mode 100644
index 00000000..805fcd89
--- /dev/null
+++ b/src/drone_services/srv/ControlRelais.srv
@@ -0,0 +1,5 @@
+#to turn the relais on or off
+bool relais1_on false
+bool relais2_on false
+---
+int8 bits # relais 1 = bit 0, relais 2 is bit 1
\ No newline at end of file
diff --git a/src/relais_control/package.xml b/src/relais_control/package.xml
index 88e8691e..806af7fe 100644
--- a/src/relais_control/package.xml
+++ b/src/relais_control/package.xml
@@ -1,19 +1,21 @@
- relais_control
- 0.0.0
- package to control the relais that enables Pixhawk RX and TX communication
+ relais_control
+ 0.0.0
+ package to control the relais that enables Pixhawk RX and TX communication
ubuntu
- Apache License 2.0
+ Apache License 2.0
rclpy
+ drone_services
- ament_copyright
- ament_flake8
- ament_pep257
- python3-pytest
-
- ament_python
-
-
+ ament_copyright
+ ament_flake8
+ ament_pep257
+ python3-pytest
+
+
+ ament_python
+
+
\ No newline at end of file
diff --git a/src/relais_control/relais_control/relais_controller.py b/src/relais_control/relais_control/relais_controller.py
index 9a9cdb8a..782a4fd3 100644
--- a/src/relais_control/relais_control/relais_controller.py
+++ b/src/relais_control/relais_control/relais_controller.py
@@ -1,13 +1,17 @@
import rclpy
from rclpy.node import Node
+
try:
import RPi.GPIO as GPIO
except RuntimeError:
print("Error importing RPi.GPIO! This is probably because you need superuser privileges. You can achieve this by using 'sudo' to run your script")
+from drone_services.srv import ControlRelais
class RelaisController(Node):
def __init__(self):
super().__init__('relais_controller')
+ self.srv = self.create_service(ControlRelais, 'control_relais', self.control_relais_callback)
+
self.relais1_pin = 17
self.relais2_pin = 27
self.init_gpio()
@@ -29,6 +33,26 @@ class RelaisController(Node):
GPIO.output(self.relais2_pin, GPIO.HIGH)
self.get_logger().info("Relais turned on")
+ def control_relais_callback(self, request, response):
+ if request.relais1:
+ GPIO.output(self.relais1_pin, GPIO.HIGH)
+ else:
+ GPIO.output(self.relais1_pin, GPIO.LOW)
+ if request.relais2:
+ GPIO.output(self.relais2_pin, GPIO.HIGH)
+ else:
+ GPIO.output(self.relais2_pin, GPIO.LOW)
+
+ if GPIO.output(17) == GPIO.LOW:
+ response.bits = response.bits & 0
+ else:
+ response.bits = response.bits | 1
+
+ if GPIO.output(27) == GPIO.LOW:
+ response.bits = response.bits & ~(1 << 1)
+ else:
+ response.bits = response.bits | (1 << 1)
+ return response
def main(args=None):
rclpy.init(args=args)