Skip to content

Commit ed48ba4

Browse files
committed
Implement analogRead() and hallRead()
1 parent b64af5a commit ed48ba4

File tree

1 file changed

+35
-0
lines changed

1 file changed

+35
-0
lines changed

src/gpio.c

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#include <mruby/value.h>
33

44
#include "driver/gpio.h"
5+
#include "driver/adc.h"
56

67
#define GPIO_MODE_DEF_PULLUP (BIT3)
78
#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) {
5455
return mrb_fixnum_value(gpio_get_level(mrb_fixnum(pin)));
5556
}
5657

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+
5778
void
5879
mrb_mruby_esp32_gpio_gem_init(mrb_state* mrb)
5980
{
@@ -65,6 +86,10 @@ mrb_mruby_esp32_gpio_gem_init(mrb_state* mrb)
6586
mrb_define_module_function(mrb, gpio, "pinMode", mrb_esp32_gpio_pin_mode, MRB_ARGS_REQ(2));
6687
mrb_define_module_function(mrb, gpio, "digitalWrite", mrb_esp32_gpio_digital_write, MRB_ARGS_REQ(2));
6788
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);
6893

6994
constants = mrb_define_module_under(mrb, gpio, "Constants");
7095

@@ -112,6 +137,16 @@ mrb_mruby_esp32_gpio_gem_init(mrb_state* mrb)
112137
define_const(GPIO_NUM_39);
113138
define_const(GPIO_NUM_MAX);
114139

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+
115150
mrb_define_const(mrb, constants, "LOW", mrb_fixnum_value(0));
116151
mrb_define_const(mrb, constants, "HIGH", mrb_fixnum_value(1));
117152

0 commit comments

Comments
 (0)