Hallo allerseits!
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 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 Pieper im Blickfeld befindet oder nicht – denn man hört ihn ja und kann sich auf anderes konzentrieren.
Ich finde solche 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 – meistens an Pin D4, denn die Möglichkeiten, via D0 und D1 seriell zu kommunizieren oder über D2 und D3 externe Interrupts auslösen zu können, halte ich mir gerne offen. Damit die Handhabung des Piepers schön simpel ist, habe ich mir eine Bibliothek geschrieben.
Wie es sich für eine 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, nämlich piepen, gibt es nur eine Funktion, die ich „beep“ genannt habe.
Piezo.cpp - In dieser Datei werden die Funktionen definiert. Da ich verschiedene Tonsequenzen verwenden möchte, die unterschiedliche Meldungen repräsentieren sollen, habe ich eine Aufzählungsvariable (enum) definiert, deren mögliche Werte den möglichen Meldungen entsprechen (siehe „beeptype“ in Piezo.h bzw. den „switch“-Teil in Piezo.cpp).
keywords.txt - enthält die Schlüsselworte, die im Editor hervorgehoben werden sollen.
Diese drei Dateien habe ich auf meinem Linux-System im Verzeichnis ~/sketchbook/libraries/Piezo gespeichert. Deren Inhalte:
[Piezo.h]
#ifndef PIEZO_H
#define PIEZO_H
#include <Arduino.h>
#include <stdint.h>
enum beeptype { ON, OFF, OK, YES, NO, GOOD, BAD, READY, ERROR, PANIC, ALARM };
class Piezo
{
private:
uint8_t pin;
public:
Piezo(uint8_t); // Konstruktor mit Angabe, an welchem Pin der Schallwandler
// haengt
void beep(beeptype);
};
#endif
[Piezo.cpp]
#include <Arduino.h>
#include <stdint.h>
#include "Piezo.h"
Piezo::Piezo(uint8_t 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(uint8_t count2=0; count2 != 3; count2++)
{
for(uint8_t count=0; count != 250; count++)
{
tone(pin, 200+10*count, 10);
delay(1);
}
}
break;
default:
break;
}
}
[keywords.txt]
Piezo KEYWORD1
beep KEYWORD2
Und ein Beispiel-Sketch:
#include <Piezo.h>
Piezo audio(4);
void setup()
{
audio.beep(READY);
delay(2000);
}
void loop()
{
audio.beep(ON);
delay(1000);
audio.beep(OFF);
delay(1000);
audio.beep(READY);
delay(1000);
audio.beep(BAD);
delay(1000);
audio.beep(ALARM);
delay(2000);
}
BTW: Ich weiß natürlich, dass das Wochenende für die meisten Leute erst morgen anfängt. Aber wer keinen Piezo-Schallwandler hat und einen besorgen möchte, freut sich über einen zusätzlichen Tag hierfür.
Schönes WE!
Gregor
Nachtrag:
Unter http://test.szaktilla.de/REC000.mp3 gibt es die Meldungen zum Anhören.