Wir bauen uns eine Piepliothek!

Inhaltsverzeichnis

IR-Auslöser für Pentax-Kameras

Akku-Ladekurve
Wir bauen uns eine Piepliothek!

Ein Automat ohne delay()

Pimp my Code!

Tipps + Tricks



Wir bauen uns eine Piepliothek!

Dass auf einem Arduino standardmäßig eine LED verbaut ist, die man über den Digital-Pin 13 schalten kann, ist eine prima Sache, denn damit ist wenigstens minimale Kommunikation möglich. Man kann die LED zum Beispiel kurz aufblinken lassen, wenn ein Signal empfangen wurde oder wenn eine neue „loop()-Runde“ beginnt.

Sehr viel praktischer ist ein Piezo-Schallwandler. So ein Ding gibt es für weniger als 1 € und man kann damit deutlich mehr signalisieren als nur zwei Zustände. Zudem ist egal, ob sich der Schallwandler im Blickfeld befindet oder nicht – man hört ihn ja und kann sich auf anderes konzentrieren.

Ich finde diese Pieper dermaßen praktisch, dass ich immer mindestens einen in Reserve habe. Die meisten Basteleien beginne ich damit, dass ich einen solchen Piezo-Schallwandler anschließe – oft an Pin D4, denn die Möglichkeiten, via D0 und D1 seriell zu kommunizieren oder über D2 und D3 extern Interrupts auslösen zu können, halte ich mir gerne offen. Damit die Handhabung des Piepers schön einfach ist, habe ich mir eine Bibliothek geschrieben.

Wie es sich für eine Arduino-Bibliothek gehört, besteht sie aus drei Dateien:

Piezo.h
Hier wird die Klasse „Piezo“ mit deren Funktionen deklariert. Da ein Piezo-Schallwandler nur eine Sache machen kann, gibt es nur eine Funktion, die ich „beep“ genannt habe.
Piezo.cpp
In dieser Datei werden die in Piezo.h deklarierten Funktionen definiert. Da ich unterschiedliche Meldungen „darstellen“ möchte, habe ich eine Aufzählungsvariable (enum) definiert, deren mögliche Werte unterschiedlichen Meldungen entsprechen (siehe „beeptype“ in Piezo.h bzw. den „switch“-Teil in Piezo.cpp).
keywords.txt
Enthält die Schlüsselworte, die im Editor der Arduino-IDE hervorgehoben werden sollen.

Diese drei Dateien habe ich auf meinem Computer im Verzeichnis ~/sketchbook/libraries/Piezo gespeichert. Deren Inhalte:

Piezo.h

#ifndef PIEZO_H
#define PIEZO_H

#include <Arduino.h>

enum beeptype { ON, OFF, OK, YES, NO, GOOD, BAD, READY, ERROR, PANIC, ALARM };

class Piezo
{
 private:
  byte pin;
 public:
  Piezo(byte); // Konstruktor mit Angabe, an welchem
               // Pin der Schallwandler haengt
  void beep(beeptype);
};

#endif

Piezo.cpp

#include <Arduino.h>
#include "Piezo.h"

Piezo::Piezo(byte pin_)
{
  pin=pin_;
}

void Piezo::beep(beeptype t_)
{
  switch (t_)
  {
    case GOOD:
    case READY:
    case YES:
      tone(pin, 440, 50);
      delay(50);
      tone(pin, 880, 50);
      delay(50);
      break;
    case ON:
    case OK:
      tone(pin, 880, 50);
      delay(50);
      break;
    case OFF:
    case NO:
      tone(pin, 880, 50);
      delay(50);
      tone(pin, 440, 50);
      delay(50);
      break;
    case BAD:
    case ERROR:
      tone(pin, 220, 500);
      delay(500);
      break;
    case ALARM:
    case PANIC:
      for(byte count2=0; count2 != 3; count2++)
        {
          for(byte count=0; count != 250; count++)
            {
              tone(pin, 200+10*count, 10);
              delay(1);
            }
        }
      break;
    default:
      break;
  }
}

keywords.txt

Piezo   KEYWORD1
beep    KEYWORD2

Daran denken: Die Bibliothek steht erst zur Verfügung, wenn die IDE neu gestartet wurde.

Wer mag, kann sich die Pieptöne anhören: REC000.mp3

Einsatz

Der Einsatz der Bibliothek ist denkbar einfach:

  • Bibliothek einbinden
  • Instanz (Objekt) der Klasse Piezo erzeugen
  • Piepen


#include <Piezo.h>

Piezo audio(4);

audio.beep(READY);

Weiter zu: Ein Automat ohne delay()


Nach oben Inhaltsverzeichnis

Valid HTML 4.01 Transitional