Von Patrick Kaiser
// Frequenz-/RechteckgeneratorDownload p_frequenzgen3.zip
#define INLENGTH 5 //maximale Größe der Zahl
#define INTERMINATOR 'H' //'H' von 'Hz'
char inString[INLENGTH+2];
int inCount;
#define MinFreq 33
#define MaxFreq 65535
#define Ausgangspin 13 //muss kein PWM-Pin sein
unsigned int Frequenz = 100; //Hz (Maximum: 65535 Hz)
void setup(){
Serial.begin(9600);
Serial.println("Bitte angeben wieviel Hz ausgegeben werden sollen (mit 'Hz')!");
tone(Ausgangspin, Frequenz);
}
void loop(){
Eingabe(); //Eingabe-Funktion, die Eingabe-String entgegennimmt
//Zeichenkette -> Zahl
//Alternative: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1176289764
Frequenz=atol(inString);
//Bereich prüfen
Frequenz=constrain(Frequenz, MinFreq, MaxFreq);
Serial.print("Es wird gesetzt: ");
Serial.print(Frequenz,DEC);
Serial.println("Hz!");
tone(Ausgangspin, Frequenz);
}
void Eingabe(){
inCount=0; //Ziffern-Zähler rücksetzen
do
{
while (Serial.available()==0);
inString[inCount] = Serial.read();
if(inString[inCount]==INTERMINATOR) break;
if((inString[inCount]<'0')||(inString[inCount]>'9')){
//continue; //geht nicht
inCount--; //-> Workaround
}
}
while(++inCount < (INLENGTH+1));
Serial.flush();
}
// Patrick's Arduino :-)Download p_frequenzgen2.zip
// Frequenz-/Rechteckgenerator
#include <Tone.h>
#define INLENGTH 5 //maximale Größe der Zahl
#define INTERMINATOR 'H' //'H' von 'Hz'
char inString[INLENGTH+2];
int inCount;
#define MinFreq 2
#define MaxFreq 65535
#define Ausgangspin 13 //muss kein PWM-Pin sein
unsigned int Frequenz = 2; //Hz (Maximum: 65535 Hz)
Tone Generator;
void setup(){
Serial.begin(9600);
Serial.println("Bitte angeben wieviel Hz ausgegeben werden sollen (mit 'Hz')!");
Generator.begin(Ausgangspin);
Generator.play(Frequenz);
}
void loop(){
Eingabe(); //Eingabe-Funktion, die Eingabe-String entgegennimmt
//Zeichenkette -> Zahl
//Alternative: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1176289764
Frequenz=atol(inString);
//Bereich prüfen
Frequenz=constrain(Frequenz, MinFreq, MaxFreq);
Serial.print("Es wird gesetzt: ");
Serial.print(Frequenz,DEC);
Serial.println("Hz!");
Generator.play(Frequenz);
}
void Eingabe(){
inCount=0; //Ziffern-Zähler rücksetzen
do
{
while (Serial.available()==0);
inString[inCount] = Serial.read();
if(inString[inCount]==INTERMINATOR) break;
if((inString[inCount]<'0')||(inString[inCount]>'9')){
//continue; //geht nicht
inCount--; //-> Workaround
}
}
while(++inCount < (INLENGTH+1));
Serial.flush();
}
genau: 2Hz 10Hz 20Hz 100Hz 200Hz 1000Hz 10kHz 20kHz | leicht nach oben schwankend/abweichend (1 bis 2 Hz): 5Hz -> 5,001Hz 50Hz -> 50,01Hz 60Hz -> 60,01Hz 2000Hz 2500Hz 5000Hz 15kHz -> 15,01kHz 40kHz 50kHz -> 50,01kHz | stärker schwankend/abweichend: 1Hz -> 2,102Hz (! -> deaktiviert) 70Hz -> 70,04Hz 80Hz -> 80,04Hz 90Hz -> 90,07Hz 7500Hz 30kHz -> 30,08kHz 60kHz -> 60,16kHz 65,5kHz (und größer) -> 65,58kHz |