Skip to content

Commit ee3319d

Browse files
committed
Use current DAC and ADC drivers instead of deprecated
1 parent ecd0ed1 commit ee3319d

File tree

1 file changed

+50
-21
lines changed

1 file changed

+50
-21
lines changed

src/gpio.c

Lines changed: 50 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
#include <mruby/value.h>
33

44
#include "driver/gpio.h"
5-
#include "driver/dac.h"
6-
#include "driver/adc.h"
5+
#include "driver/dac_oneshot.h"
6+
#include "esp_adc/adc_oneshot.h"
77

88
#define GPIO_MODE_DEF_PULLUP (BIT3)
99
#define GPIO_MODE_DEF_PULLDOWN (BIT3)
@@ -58,11 +58,19 @@ mrb_esp32_gpio_analog_write(mrb_state *mrb, mrb_value self) {
5858
if (!mrb_fixnum_p(ch) || !mrb_fixnum_p(vol)) {
5959
return mrb_nil_value();
6060
}
61-
62-
dac_output_enable(mrb_fixnum(ch));
63-
64-
dac_output_voltage(mrb_fixnum(ch), mrb_fixnum(vol));
65-
61+
62+
// Handle
63+
dac_oneshot_handle_t chan_handle;
64+
65+
// Configuration
66+
dac_oneshot_config_t chan_cfg = {
67+
.chan_id = mrb_fixnum(ch),
68+
};
69+
ESP_ERROR_CHECK(dac_oneshot_new_channel(&chan_cfg, &chan_handle));
70+
71+
// Write
72+
ESP_ERROR_CHECK(dac_oneshot_output_voltage(chan_handle, mrb_fixnum(vol)));
73+
6674
return self;
6775
}
6876

@@ -88,10 +96,28 @@ mrb_esp32_gpio_analog_read(mrb_state *mrb, mrb_value self) {
8896
if (!mrb_fixnum_p(ch)) {
8997
return mrb_nil_value();
9098
}
99+
100+
// Handle
101+
adc_oneshot_unit_handle_t adc1_handle;
102+
adc_oneshot_unit_init_cfg_t init_config1 = {
103+
.unit_id = ADC_UNIT_1,
104+
.ulp_mode = ADC_ULP_MODE_DISABLE,
105+
};
106+
ESP_ERROR_CHECK(adc_oneshot_new_unit(&init_config1, &adc1_handle));
107+
108+
// Configuration. ADC_BITWIDTH_DEFAULT = 12
109+
adc_oneshot_chan_cfg_t config = {
110+
.bitwidth = ADC_BITWIDTH_DEFAULT,
111+
.atten = ADC_ATTEN_DB_11,
112+
};
113+
ESP_ERROR_CHECK(adc_oneshot_config_channel(adc1_handle, mrb_fixnum(ch), &config));
114+
115+
// Read and Delete
116+
int adc_result;
117+
ESP_ERROR_CHECK(adc_oneshot_read(adc1_handle, mrb_fixnum(ch), &adc_result));
118+
ESP_ERROR_CHECK(adc_oneshot_del_unit(adc1_handle));
91119

92-
adc1_config_channel_atten(mrb_fixnum(ch), ADC_ATTEN_DB_11);
93-
94-
return mrb_fixnum_value(adc1_get_raw(mrb_fixnum(ch)));
120+
return mrb_fixnum_value(adc_result);
95121
}
96122

97123
void
@@ -107,8 +133,6 @@ mrb_mruby_esp32_gpio_gem_init(mrb_state* mrb)
107133
mrb_define_module_function(mrb, gpio, "digitalRead", mrb_esp32_gpio_digital_read, MRB_ARGS_REQ(1));
108134
mrb_define_module_function(mrb, gpio, "analogWrite", mrb_esp32_gpio_analog_write, MRB_ARGS_REQ(2));
109135
mrb_define_module_function(mrb, gpio, "analogRead", mrb_esp32_gpio_analog_read, MRB_ARGS_REQ(1));
110-
111-
adc1_config_width(ADC_BITWIDTH_12);
112136

113137
constants = mrb_define_module_under(mrb, gpio, "Constants");
114138

@@ -156,18 +180,23 @@ mrb_mruby_esp32_gpio_gem_init(mrb_state* mrb)
156180
define_const(GPIO_NUM_39);
157181
define_const(GPIO_NUM_MAX);
158182

183+
define_const(DAC_CHAN_0);
184+
define_const(DAC_CHAN_1);
185+
// Old versions of above. Deprecated.
159186
define_const(DAC_CHANNEL_1);
160187
define_const(DAC_CHANNEL_2);
161188

162-
define_const(ADC1_CHANNEL_0);
163-
define_const(ADC1_CHANNEL_1);
164-
define_const(ADC1_CHANNEL_2);
165-
define_const(ADC1_CHANNEL_3);
166-
define_const(ADC1_CHANNEL_4);
167-
define_const(ADC1_CHANNEL_5);
168-
define_const(ADC1_CHANNEL_6);
169-
define_const(ADC1_CHANNEL_7);
170-
define_const(ADC1_CHANNEL_MAX);
189+
define_const(ADC_CHANNEL_0);
190+
define_const(ADC_CHANNEL_1);
191+
define_const(ADC_CHANNEL_2);
192+
define_const(ADC_CHANNEL_3);
193+
define_const(ADC_CHANNEL_4);
194+
define_const(ADC_CHANNEL_5);
195+
define_const(ADC_CHANNEL_6);
196+
define_const(ADC_CHANNEL_7);
197+
// Channel 8 and 9 only exist on ADC2.
198+
define_const(ADC_CHANNEL_8);
199+
define_const(ADC_CHANNEL_9);
171200

172201
mrb_define_const(mrb, constants, "LOW", mrb_fixnum_value(0));
173202
mrb_define_const(mrb, constants, "HIGH", mrb_fixnum_value(1));

0 commit comments

Comments
 (0)