File tree 2 files changed +24
-0
lines changed 2 files changed +24
-0
lines changed Original file line number Diff line number Diff line change @@ -12,6 +12,7 @@ int main(void) {
12
12
for (;;) {
13
13
loop ();
14
14
if (arduino::serialEventRun) arduino::serialEventRun ();
15
+ k_yield ();
15
16
}
16
17
17
18
return 0 ;
Original file line number Diff line number Diff line change @@ -201,6 +201,29 @@ PinStatus digitalRead(pin_size_t pinNumber) {
201
201
return (gpio_pin_get_dt (&arduino_pins[pinNumber]) == 1 ) ? HIGH : LOW;
202
202
}
203
203
204
+ struct k_timer arduino_pin_timers[ARRAY_SIZE(arduino_pins)];
205
+
206
+ void tone_expiry_cb (struct k_timer *timer) {
207
+ const struct gpio_dt_spec *spec = (gpio_dt_spec*)k_timer_user_data_get (timer);
208
+ gpio_pin_toggle_dt (spec);
209
+ }
210
+
211
+ void tone (pin_size_t pinNumber, unsigned int frequency, unsigned long duration) {
212
+ struct k_timer *timer = &arduino_pin_timers[pinNumber];
213
+ const struct gpio_dt_spec *spec = &arduino_pins[pinNumber];
214
+ k_timeout_t timeout = K_NSEC (NSEC_PER_SEC / (2 * frequency));
215
+
216
+ k_timer_init (timer, tone_expiry_cb, NULL );
217
+ k_timer_user_data_set (timer, (void *)spec);
218
+ gpio_pin_set_dt (spec, 1 );
219
+ k_timer_start (timer, timeout, timeout);
220
+ }
221
+
222
+ void noTone (pin_size_t pinNumber) {
223
+ k_timer_stop (&arduino_pin_timers[pinNumber]);
224
+ gpio_pin_set_dt (&arduino_pins[pinNumber], 0 );
225
+ }
226
+
204
227
void delay (unsigned long ms) { k_sleep (K_MSEC (ms)); }
205
228
206
229
void delayMicroseconds (unsigned int us) { k_sleep (K_USEC (us)); }
You can’t perform that action at this time.
0 commit comments