← Back to ratslair.com
aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt3
-rw-r--r--include/rgb_led.h25
-rw-r--r--rgb_led.c31
3 files changed, 59 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..80b94c9
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,3 @@
+idf_component_register(SRCS "rgb_led.c"
+ INCLUDE_DIRS "include"
+ REQUIRES "driver")
diff --git a/include/rgb_led.h b/include/rgb_led.h
new file mode 100644
index 0000000..66eaddc
--- /dev/null
+++ b/include/rgb_led.h
@@ -0,0 +1,25 @@
+typedef struct {
+ bool R;
+ bool G;
+ bool B;
+} rgb_color;
+
+#define rgb_white (rgb_color){ .R = 0, .G = 0, .B = 0 }
+#define rgb_yellow (rgb_color){ .R = 0, .G = 0, .B = 1 }
+#define rgb_purple (rgb_color){ .R = 0, .G = 1, .B = 0 }
+#define rgb_red (rgb_color){ .R = 0, .G = 1, .B = 1 }
+#define rgb_cyan (rgb_color){ .R = 1, .G = 0, .B = 0 }
+#define rgb_green (rgb_color){ .R = 1, .G = 0, .B = 1 }
+#define rgb_blue (rgb_color){ .R = 1, .G = 1, .B = 0 }
+#define rgb_black (rgb_color){ .R = 1, .G = 1, .B = 1 }
+
+typedef struct {
+ rgb_color color;
+ int R_pin;
+ int G_pin;
+ int B_pin;
+} rgb_led;
+
+void rgb_init_LED(rgb_led *LED, int R_pin, int G_pin, int B_pin);
+
+void rgb_set_color(rgb_led *LED, rgb_color color);
diff --git a/rgb_led.c b/rgb_led.c
new file mode 100644
index 0000000..63d88e5
--- /dev/null
+++ b/rgb_led.c
@@ -0,0 +1,31 @@
+#include "driver/gpio.h"
+#include "rgb_led.h"
+
+void rgb_init_LED(rgb_led *LED, int R_pin, int G_pin, int B_pin)
+{
+ LED->R_pin = R_pin;
+ LED->G_pin = G_pin;
+ LED->B_pin = B_pin;
+ LED->color = rgb_black;
+
+ // Clear previous pin configuration.
+ gpio_reset_pin(LED->R_pin);
+ gpio_set_direction(LED->R_pin, GPIO_MODE_OUTPUT);
+ gpio_reset_pin(LED->G_pin);
+ gpio_set_direction(LED->G_pin, GPIO_MODE_OUTPUT);
+ gpio_reset_pin(LED->B_pin);
+ gpio_set_direction(LED->B_pin, GPIO_MODE_OUTPUT);
+
+ gpio_set_level(LED->R_pin, LED->color.R);
+ gpio_set_level(LED->G_pin, LED->color.G);
+ gpio_set_level(LED->B_pin, LED->color.B);
+}
+
+void rgb_set_color(rgb_led *LED, rgb_color color)
+{
+ LED->color = color;
+
+ gpio_set_level(LED->R_pin, LED->color.R);
+ gpio_set_level(LED->G_pin, LED->color.G);
+ gpio_set_level(LED->B_pin, LED->color.B);
+}