Add PCA9685 clear publisher and update button handling in game controller

This commit is contained in:
acki
2024-12-05 20:27:20 -05:00
parent 0e2accc245
commit 70eb8aa1be
2 changed files with 20 additions and 4 deletions

View File

@@ -1,6 +1,8 @@
#pragma once
#include <rclcpp/publisher.hpp>
#include <std_msgs/msg/string.hpp>
#include <std_msgs/msg/empty.hpp>
#include <rclcpp/rclcpp.hpp>
#include <sensor_msgs/msg/joy.hpp>
#include <modelec_interface/msg/servo_mode.hpp>
@@ -27,6 +29,7 @@ namespace Modelec {
rclcpp::Subscription<sensor_msgs::msg::Joy>::SharedPtr subscription_;
rclcpp::Publisher<ServoMode>::SharedPtr servo_publisher_;
rclcpp::Publisher<std_msgs::msg::String>::SharedPtr arduino_publisher_;
rclcpp::Publisher<std_msgs::msg::Empty>::SharedPtr clear_pca_publisher_;
void CheckButton(const sensor_msgs::msg::Joy::SharedPtr msg);
void CheckAxis(const sensor_msgs::msg::Joy::SharedPtr msg);
@@ -36,7 +39,7 @@ namespace Modelec {
bool button_1_was_pressed = false;
bool button_0_was_pressed = false;
bool button_9_was_pressed = false;
bool button_8_was_pressed = false;
bool button_10_was_pressed = false;
int last_speed = 0;
int last_rotation = 0;

View File

@@ -12,11 +12,14 @@ namespace Modelec {
servo_publisher_ = this->create_publisher<ServoMode>("arm_control", 10);
arduino_publisher_ = this->create_publisher<std_msgs::msg::String>("send_to_arduino", 10);
clear_pca_publisher_ = this->create_publisher<std_msgs::msg::Empty>("clear_pca9685", 10);
}
void ControllerListener::joy_callback(const sensor_msgs::msg::Joy::SharedPtr msg)
{
// to check mapping : https://index.ros.org//p/joy/
// bon en fait la doc dit de la merde pour voir les bon checker directement en loggant le topic joy
CheckButton(msg);
CheckAxis(msg);
}
@@ -94,16 +97,26 @@ namespace Modelec {
button_0_was_pressed = false;
}
if (msg->buttons[9] || msg->buttons[10]) {
if (button_9_was_pressed || button_8_was_pressed) {
if (msg->buttons[9]) {
if (button_9_was_pressed) {
return;
}
auto message = std_msgs::msg::String();
message.data = "W\n";
arduino_publisher_->publish(message);
button_9_was_pressed = true;
} else {
button_9_was_pressed = false;
button_8_was_pressed = false;
}
if (msg->buttons[10]) {
if (button_10_was_pressed) {
return;
}
clear_pca_publisher_->publish(std_msgs::msg::Empty());
button_10_was_pressed = true;
} else {
button_10_was_pressed = false;
}
}