🍪 Privacy & Transparency

We and our partners use cookies to Store and/or access information on a device. We and our partners use data for Personalised ads and content, ad and content measurement, audience insights and product development. An example of data being processed may be a unique identifier stored in a cookie. Some of our partners may process your data as a part of their legitimate business interest without asking for consent. To view the purposes they believe they have legitimate interest for, or to object to this data processing use the vendor list link below. The consent submitted will only be used for data processing originating from this website. If you would like to change your settings or withdraw consent at any time, the link to do so is in our privacy policy accessible from our home page..

Vendor List | Privacy Policy
Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry PI

Menu
  • Projekte
    • LED’s
    • Servo & Schrittmotoren
    • Sound
    • LCD’s
    • Kommunikation
    • Sicherheit
    • Weekend Project
  • Arduino
    • Tutorials
    • ProMini
      • Anschließen & Programmieren
    • Nano
      • Arduino Nano – Übersicht
    • UNO
      • Übersicht
    • MEGA 2560
      • Übersicht
    • Leonardo
      • Übersicht
    • NodeMCU
      • NodeMCU – “Einer für (fast) Alles!”
    • Lilypad
      • Arduino: Lilypad “Jetzt Geht’s Rund!”
    • WEMOS
      • WEMOS D1 – Arduino UNO kompatibles Board mit ESP8266 Chip
      • WEMOS D1 Mini – Übersicht
      • Wemos D1 mini Shields
    • STM32x
      • STM32F103C8T6 – Übersicht
    • Maker UNO
      • Maker UNO – Überblick und Test
    • ATTiny85
      • Mini Arduino mit ATTiny85 Chip
      • ATtiny85 mit dem Arduino UNO beschreiben
  • Android
  • Über mich
  • DeutschDeutsch
  • EnglishEnglish
Menu

Piezo Buzzer am ESP32 – „tone was not declared in this scope“

Posted on 9. Mai 202215. Juni 2022 by Stefan Draeger

Wenn du an einem ESP32 in der Arduino IDE einen Piezo Buzzer programmieren möchtest und du dieses genauso programmierst wie an einem „normalen“ Mikrocontroller der Arduino Familie, dann wirst du auf den Fehler „‚tone‘ was not declared in this scope“ stoßen.

ESP32 - Arduino IDE, Fehlermeldung bei tone / noTone
ESP32 – Arduino IDE, Fehlermeldung bei tone / noTone

Dieser Fehler liegt daran, dass der ESP32 diese Funktion nicht unterstützt. ABER das heißt nicht, dass du keinen Piezo Buzzer betreiben kannst, sondern du musst lediglich auf eine andere Funktion zurückgreifen.

sketch_nov12a:16:24: error: 'tone' was not declared in this scope
   tone(buzzer, 800, 250);
                        ^
exit status 1
'tone' was not declared in this scope

Die nachfolgende Lösung habe ich von der Seite https://lifesaver.codes/answer/tone-was-not-declared-in-this-scope-1720 entnommen und möchte ich gerne zuvor als Quelle verlinken.

Die Lösung für den ESP32 ist recht einfach, jedoch bedarf es ein paar mehr Zeilen Code.
Zunächst musst du den mit der Funktion „ledcSetup“ einen Pin für ein PWM Signal definieren

ledcSetup(channel, frequenz, resolution_bits);

Danach muss ein Pin mit dem erzeugten Channel „verbunden“ werden:

  ledcAttachPin(buzzerPin,channel);

Und dann können wir auf dem Channel eine Frequenz ausgeben:

  ledcWriteTone(channel,toneFrequenz);

Alternativ können wir sogar Konstanten für Noten verwenden:

ledcWriteNote(channel, note, octave)

Mögliche Werte für den Parameter „note“ können aus der Datei arduino-esp32/cores/esp32/esp32-hal-ledc.h entnommen werden.

typedef enum {
    NOTE_C, NOTE_Cs, NOTE_D, NOTE_Eb, NOTE_E, 
    NOTE_F, NOTE_Fs, NOTE_G, NOTE_Gs, NOTE_A, 
    NOTE_Bb, NOTE_B, NOTE_MAX
} note_t;

In meinem Beispiel verwende ich:

  int buzzerPin = 25;
  int channel = 0;
  int frequenz = 2000;
  int resolutionBits = 12;
  int toneFrequenz = 600;

  ledcSetup(channel, frequenz, resolutionBits);
  ledcAttachPin(buzzerPin,channel);
  ledcWriteTone(channel,toneFrequenz);

Wenn man das ganze nun mit zwei LEDs und etwas Code ausschmückt, hat man eine kleine Sirene und den Fehler gelöst.

Quellcode

#define ledRot 32
#define ledGruen 33

#define buzzer 25

const int PAUSE = 1500;

const int channel = 0;
const int frequenz = 2000;
const int resolutionBits = 12;
const int toneFrequenz1 = 600;
const int toneFrequenz2 = 800;

void setup() {
  pinMode(ledRot, OUTPUT);
  pinMode(ledGruen, OUTPUT);
  pinMode(buzzer, OUTPUT);

  ledcSetup(channel, frequenz, resolutionBits);
  ledcAttachPin(buzzer, channel);
}

void loop() {
  digitalWrite(ledRot, HIGH);
  digitalWrite(ledGruen, LOW);
  ledcWriteTone(channel, toneFrequenz1);
  delay(PAUSE);
  digitalWrite(ledRot, LOW);
  digitalWrite(ledGruen, HIGH);
  ledcWriteTone(channel, toneFrequenz2);
  delay(PAUSE);
}

Auf der Seite LED Control (LEDC) von Espressif findest du weitere Informationen zu den zuvor genannten Funktionen.

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Kategorien

Tools

  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator
  • Widerstandsrechner
  • Rechner für Strom & Widerstände
  • ASCII Tabelle

Meta

  • Videothek
  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Kontakt
  • Cookie-Richtlinie (EU)

Links

Blogverzeichnis Bloggerei.de Blogverzeichnis TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com
©2023 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb