ament_target_dependencies(display rclcpp sensor_msgs)
target_compile_features(display PUBLIC cxx_std_20)
+add_executable(light_brightness src/light_brightness.cpp)
+target_link_libraries(light_brightness "${cpp_typesupport_target}")
+ament_target_dependencies(light_brightness rclcpp sensor_msgs)
+target_compile_features(light_brightness PUBLIC cxx_std_20)
+
install(TARGETS hw_node
DESTINATION lib/${PROJECT_NAME})
install(TARGETS display
DESTINATION lib/${PROJECT_NAME})
+install(TARGETS light_brightness
+ DESTINATION lib/${PROJECT_NAME})
install(DIRECTORY launch
DESTINATION share/${PROJECT_NAME})
install(DIRECTORY params
--- /dev/null
+#include <memory>
+#include "sensor_msgs/msg/illuminance.hpp"
+#include "a4wd3/msg/led_stripe.hpp"
+#include "a4wd3/msg/led.hpp"
+
+#include "rclcpp/rclcpp.hpp"
+using std::placeholders::_1;
+
+class LightBrightness : public rclcpp::Node
+{
+ public:
+ LightBrightness() : Node("light_brightness") {
+ sub_light = this->create_subscription<sensor_msgs::msg::Illuminance>("/light", 10, std::bind(&LightBrightness::light_callback, this, _1));
+ pub_led = this->create_publisher<a4wd3::msg::LedStripe>("/led_stripe", 10);
+ }
+
+ private:
+ void light_callback(const sensor_msgs::msg::Illuminance msg) {
+ bool changed=false;
+ if (msg.illuminance == 0 && val < 254) {
+ val++;
+ changed=true;
+ } else if (msg.illuminance > 0 && val > 0) {
+ val--;
+ changed=true;
+ }
+ RCLCPP_INFO(this->get_logger(), "'%.2lflx -> light=%d'", msg.illuminance, val);
+ if (changed) {
+ auto ledmsg = a4wd3::msg::LedStripe();
+ auto led=a4wd3::msg::Led();
+ led.num=0;
+ led.cw=val;
+ led.ww=val;
+ ledmsg.leds.push_back(led);
+ pub_led->publish(ledmsg);
+ }
+ }
+
+ rclcpp::Subscription<sensor_msgs::msg::Illuminance>::SharedPtr sub_light;
+ rclcpp::Publisher<a4wd3::msg::LedStripe>::SharedPtr pub_led;
+ uint8_t val=0;
+};
+
+int main(int argc, char * argv[])
+{
+ rclcpp::init(argc, argv);
+ rclcpp::spin(std::make_shared<LightBrightness>());
+ rclcpp::shutdown();
+ return 0;
+}