Подключение пищалки к Arduino

Зуммер (активный и пассивный)

Пищалка к Arduino Uno и Nano включается между цифровым выводом и землёй. tone(pin, частота) задаёт высоту тона, noTone(pin) выключает звук.

Схема подключения пищалки к Arduino

ПьезопищалкаArduino Uno
1D8
2GND

Схема из примера «Arduino Uno: азбука Морзе — текст из порта вспышками и писком».

Arduino Uno: азбука Морзе — текст из порта вспышками и писком

Открыть пример целиком

Выводы Пьезопищалка

ВыводНазначение
1плюс (у полярных зуммеров помечен «+»)
2минус — к GND

Код для Arduino

// Азбука Морзе: текст из монитора порта — вспышками и писком.
//
// Точка — одна единица времени, тире — три, пауза внутри буквы — одна,
// между буквами — три, между словами — семь. Скорость задаёт UNIT:
// 120 мс — это десять слов в минуту, темп начинающего радиста.

const int LED = 13, BUZZER = 8;
const int UNIT = 120;
const int TONE_HZ = 700;

// Буквы A…Z и цифры 0…9: точки и тире.
const char *LETTERS[] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---",
  "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--",
  "-..-", "-.--", "--.."};
const char *DIGITS[] = {"-----", ".----", "..---", "...--", "....-", ".....", "-....", "--...",
  "---..", "----."};

void signal(int units) {
  digitalWrite(LED, HIGH);
  tone(BUZZER, TONE_HZ);
  delay(units * UNIT);
  digitalWrite(LED, LOW);
  noTone(BUZZER);
}

void sendChar(char c) {
  const char *code = nullptr;
  if (c >= 'a' && c <= 'z') c -= 32;
  if (c >= 'A' && c <= 'Z') code = LETTERS[c - 'A'];
  else if (c >= '0' && c <= '9') code = DIGITS[c - '0'];
  else if (c == ' ') { Serial.print(F("/ ")); delay(4 * UNIT); return; }   // 3 уже прошло + 4 = 7
  if (!code) return;
  Serial.print(code);
  Serial.print(' ');
  for (const char *p = code; *p; p++) {
    signal(*p == '.' ? 1 : 3);
    delay(UNIT);                 // пауза внутри буквы
  }
  delay(2 * UNIT);               // до трёх единиц между буквами
}

void setup() {
  Serial.begin(9600);
  pinMode(LED, OUTPUT);
  Serial.println(F("Напишите текст латиницей — отстучу его морзянкой"));
}

void loop() {
  if (!Serial.available()) return;
  String text = Serial.readStringUntil('\n');
  text.trim();
  if (!text.length()) return;
  Serial.print(text);
  Serial.print(F(": "));
  for (unsigned i = 0; i < text.length(); i++) sendChar(text[i]);
  Serial.println();
}

Скетч можно править и запускать в симуляторе без платы и установки среды.

Что учесть на Arduino

Частые ошибки при подключении к Arduino

Другие детали для Arduino