const byte NullZwoPin = 11;
const byte NullDreiPin = 12;
const byte NullVierPin = 13;
const byte BeeperPin = 8;
enum LiterType {
NICHTS,
NULLZWO,
NULLDREI,
NULLVIER,
};
byte Value = NICHTS;
byte lastValue = NICHTS;
byte beepCount = 0;
int Frequency = 2000; // [Hz]
int Duration = 75; // [ms]
int Pause = 100; // [ms]
unsigned long lastToneTime = 0;
void setup()
{
Serial.begin(115200);
Serial.println(F("Start..."));
pinMode(NullZwoPin,INPUT);
pinMode(NullDreiPin,INPUT);
pinMode(NullVierPin,INPUT);
}
void loop()
{
CheckEvery(50);
Evaluate();
Play();
}
void CheckEvery(unsigned long CheckTime){
static unsigned long lastCheckTime = 0;
if (millis()-lastCheckTime >= CheckTime){
lastCheckTime = millis();
CheckPins();
}
}
void CheckPins(){
if (digitalRead(NullZwoPin)) Value = NULLZWO;
if (digitalRead(NullDreiPin)) Value = NULLDREI;
if (digitalRead(NullVierPin)) Value = NULLVIER;
}
void Evaluate(){
if (Value == lastValue) return;
noTone(BeeperPin);
lastToneTime = 0;
switch(Value){
case NULLZWO :
Serial.println("0.2l");
beepCount = 1;
break;
case NULLDREI :
Serial.println("0.3l");
beepCount = 2;
break;
case NULLVIER :
Serial.println("0.4l");
beepCount = 3;
break;
default:
break;
}
lastValue = Value;
}
void Play(){
if (beepCount > 0 && millis()-lastToneTime > Duration + Pause) {
lastToneTime = millis();
beepCount--;
tone(BeeperPin, Frequency, Duration);
}
}