2
2
#include <mruby/value.h>
3
3
4
4
#include "driver/gpio.h"
5
+ #include "driver/adc.h"
5
6
6
7
#define GPIO_MODE_DEF_PULLUP (BIT3)
7
8
#define GPIO_MODE_INPUT_PULLUP ((GPIO_MODE_INPUT)|(GPIO_MODE_DEF_PULLUP))
@@ -54,6 +55,26 @@ mrb_esp32_gpio_digital_read(mrb_state *mrb, mrb_value self) {
54
55
return mrb_fixnum_value (gpio_get_level (mrb_fixnum (pin )));
55
56
}
56
57
58
+ static mrb_value
59
+ mrb_esp32_gpio_analog_read (mrb_state * mrb , mrb_value self ) {
60
+ mrb_value ch ;
61
+
62
+ mrb_get_args (mrb , "o" , & ch );
63
+
64
+ if (!mrb_fixnum_p (ch )) {
65
+ return mrb_nil_value ();
66
+ }
67
+
68
+ adc1_config_channel_atten (mrb_fixnum (ch ), ADC_ATTEN_11db );
69
+
70
+ return mrb_fixnum_value (adc1_get_voltage (mrb_fixnum (ch )));
71
+ }
72
+
73
+ static mrb_value
74
+ mrb_esp32_gpio_hall_read (mrb_state * mrb , mrb_value self ) {
75
+ return mrb_fixnum_value (hall_sensor_read ());
76
+ }
77
+
57
78
void
58
79
mrb_mruby_esp32_gpio_gem_init (mrb_state * mrb )
59
80
{
@@ -65,6 +86,10 @@ mrb_mruby_esp32_gpio_gem_init(mrb_state* mrb)
65
86
mrb_define_module_function (mrb , gpio , "pinMode" , mrb_esp32_gpio_pin_mode , MRB_ARGS_REQ (2 ));
66
87
mrb_define_module_function (mrb , gpio , "digitalWrite" , mrb_esp32_gpio_digital_write , MRB_ARGS_REQ (2 ));
67
88
mrb_define_module_function (mrb , gpio , "digitalRead" , mrb_esp32_gpio_digital_read , MRB_ARGS_REQ (1 ));
89
+ mrb_define_module_function (mrb , gpio , "analogRead" , mrb_esp32_gpio_analog_read , MRB_ARGS_REQ (1 ));
90
+ mrb_define_module_function (mrb , gpio , "hallRead" , mrb_esp32_gpio_hall_read , MRB_ARGS_NONE ());
91
+
92
+ adc1_config_width (ADC_WIDTH_12Bit );
68
93
69
94
constants = mrb_define_module_under (mrb , gpio , "Constants" );
70
95
@@ -112,6 +137,16 @@ mrb_mruby_esp32_gpio_gem_init(mrb_state* mrb)
112
137
define_const (GPIO_NUM_39 );
113
138
define_const (GPIO_NUM_MAX );
114
139
140
+ define_const (ADC1_CHANNEL_0 );
141
+ define_const (ADC1_CHANNEL_1 );
142
+ define_const (ADC1_CHANNEL_2 );
143
+ define_const (ADC1_CHANNEL_3 );
144
+ define_const (ADC1_CHANNEL_4 );
145
+ define_const (ADC1_CHANNEL_5 );
146
+ define_const (ADC1_CHANNEL_6 );
147
+ define_const (ADC1_CHANNEL_7 );
148
+ define_const (ADC1_CHANNEL_MAX );
149
+
115
150
mrb_define_const (mrb , constants , "LOW" , mrb_fixnum_value (0 ));
116
151
mrb_define_const (mrb , constants , "HIGH" , mrb_fixnum_value (1 ));
117
152
0 commit comments