# Tone() does not accept two arguments

**URL:** <https://forum.arduino.cc/t/tone-does-not-accept-two-arguments/1154874>\
**Category:** Nano ESP32\
**Created:** [August 4, 2023, 8:16am UTC](https://forum.arduino.cc/t/tone-does-not-accept-two-arguments/1154874 "2023-08-04T08:16:30Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![johnsondavies](https://avatars.discourse-cdn.com/v4/letter/j/58f4c7/32.png) [@johnsondavies](https://forum.arduino.cc/u/johnsondavies)\
**Post date:** [August 4, 2023, 8:16am UTC](https://forum.arduino.cc/t/tone-does-not-accept-two-arguments/1154874/1 "2023-08-04T08:16:30Z")

</div>

Calling `tone()` without the third `duration` argument gives the error:

```
macro "tone" requires 3 arguments, but only 2 given

```

Program to demonstrate:

```arduino
void setup() {
  tone(8, 262); // NOTE_C4
  delay(1000);
  noTone(8);
}

void loop() {}

```

The third argument should be optional:

[tone() - Arduino Reference](https://www.arduino.cc/reference/en/language/functions/advanced-io/tone/)

Tested with Arduino Nano ESP32 core 2.0.11.

---

<div class="post-metadata">

**Author:** ![GolamMostafa](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/golammostafa/32/239011_2.png) [@GolamMostafa](https://forum.arduino.cc/u/GolamMostafa)\
**Post date:** [August 4, 2023, 8:36am UTC](https://forum.arduino.cc/t/tone-does-not-accept-two-arguments/1154874/2 "2023-08-04T08:36:27Z")

</div>

It is compiled in UNO without any error. It is also compiled in ESP32 Dev Module. I have no NANO ESP32.

---

<div class="post-metadata">

**Author:** ![lburelli](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/lburelli/32/989898_2.png) [@lburelli](https://forum.arduino.cc/u/lburelli)\
**Post date:** [August 4, 2023, 8:37am UTC](https://forum.arduino.cc/t/tone-does-not-accept-two-arguments/1154874/3 "2023-08-04T08:37:18Z")

</div>

Hello @johnsondavies, thanks for spotting this! it will be fixed in the next ESP core release.

If you feel OK with editing core files, you can fix it directly in your own installation: look in your [Arduino15 folder](https://support.arduino.cc/hc/en-us/articles/360018448279-Open-the-Arduino15-folder) for the file [edit: fixed path]

```arduino
packages/arduino/hardware/esp32/2.0.11/cores/esp32/io_pin_remap.h

```

(what a mouthful!) and edit the line

```arduino
#define tone(_pin, frequency, duration) tone(digitalPinToGPIONumber(_pin), frequency, duration)

```

so it reads

```arduino
#define tone(_pin, args...) tone(digitalPinToGPIONumber(_pin), args)

```

---

<div class="post-metadata">

**Author:** ![kolaha](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/kolaha/32/966427_2.png) [@kolaha](https://forum.arduino.cc/u/kolaha)\
**Post date:** [August 4, 2023, 8:42am UTC](https://forum.arduino.cc/t/tone-does-not-accept-two-arguments/1154874/4 "2023-08-04T08:42:37Z")

</div>

> **[Arduino Tone for ESP32](https://www.thomascountz.com/2021/02/21/arduino-tone-for-esp32)**
>
> Arduino has a built-in tone() library which allows you to send a PWM frequency at 50% duty cycle to a specific pin in order to generate a tone on a piezoelectric buzzer with an optional duration.

> This functionality is [famously](https://github.com/espressif/arduino-esp32/issues/980) [unavailable](https://github.com/espressif/arduino-esp32/issues/1720) in Espressif’s [arduino-esp32](https://github.com/espressif/arduino-esp32) library and members of the community have found various [work-arounds](https://github.com/lbernstone/Tone) such as using the native [LED Control](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/ledc.html) functions to generate PWM signals.
> 
> However, looking more closely at [arduino-esp32](https://github.com/espressif/arduino-esp32) library, not only has Espressif provided a clean API for generating tones, they’ve provided an interface for generating specific PWM frequencies for specific notes on the chromatic scale in different octaves.

---

<div class="post-metadata">

**Author:** ![johnsondavies](https://avatars.discourse-cdn.com/v4/letter/j/58f4c7/32.png) [@johnsondavies](https://forum.arduino.cc/u/johnsondavies)\
**Post date:** [August 4, 2023, 8:57am UTC](https://forum.arduino.cc/t/tone-does-not-accept-two-arguments/1154874/5 "2023-08-04T08:57:15Z")

</div>

@lburelli Thanks, but I don't seem to have `io_pin_remap.h`. Just `io_pin_remap.cpp`.

---

<div class="post-metadata">

**Author:** ![ptillisch](https://avatars.discourse-cdn.com/v4/letter/p/ad7895/32.png) [@ptillisch](https://forum.arduino.cc/u/ptillisch)\
**Post date:** [August 4, 2023, 9:15am UTC](https://forum.arduino.cc/t/tone-does-not-accept-two-arguments/1154874/6 "2023-08-04T09:15:09Z")

</div>

@johnsondavies check at this path:

```plaintext
packages/arduino/hardware/esp32/2.0.11/cores/esp32/io_pin_remap.h

```

---

<div class="post-metadata">

**Author:** ![lburelli](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/lburelli/32/989898_2.png) [@lburelli](https://forum.arduino.cc/u/lburelli)\
**Post date:** [August 4, 2023, 9:30am UTC](https://forum.arduino.cc/t/tone-does-not-accept-two-arguments/1154874/7 "2023-08-04T09:30:23Z")

</div>

My bad, thanks! Edited the post for future reference 🙂
