Liebe Menschen im Forum, ich bin völlig neu in der Arduino- und Programmier-Welt und hoffe, ich finde bei euch Hilfe bei einem Projekt. Ich habe schon viel in Foren etc. gestöbert und konnte nichts finden, was mir wirklich hilft.
Projekt:
Ein altes analoges Telefon wird zum Klingeln gebracht (in einem bestimmten Rhythmus und mit random Pausen zwischen den einzelnen "Anrufen").
Das mache ich mit Hilfe eines Relais, da die Klingel mehr als 5V braucht.
Wenn man dann den Hörer abnimmt, muss das Klingeln (sofort) stoppen und ein anderes Programm (Sound) wird gestartet. Wenn man den Hörer wieder auflegt, ist wieder eine Random Pause und das Klingelprogramm startet (rhythmisches Klingeln, random Pause).
Ich habe nun das Problem, dass die delays, die in meinem Klingel-Programm sind, dazu führen, dass das Klingeln nicht sofort stoppt, wenn man den Hörer abnimmt. (Logisch eigentlich.) Ich habe versucht, das Klingeln ohne delay hinzukriegen, da schaffe ich es aber nicht einzubauen, dass das Klingeln nach 3x wieder aufhört UND dann auch noch eine Random Pause kommt. Und: würde das überhaupt das Problem lösen?
Brauche ich vielleicht ein interrupt oder so?
Ich wäre sehr dankbar für Hilfe! Beste Grüße!
Und hier das (der?) Sketch, um das es geht:
const int buttonPin = 2; // the number of the pushbutton pin
const int LedPin = 13; // the number of the LED pin - not needed in the moment. Needed it for testing.
// variables:
int buttonState = 0; // variable for reading the button status
int RelPin = 6; // Relais connected to digital pin 6
long On = 1500; // RING
long Off = 2000; // PAUSE
long randOff = 0; // Initialize a variable for the OFF time
void Relais () // Programm for (rhythmical) phone ring and random pause
{
randOff = random (10000, 20000); // generate OFF time between 10 and 20 seconds
delay(randOff);
digitalWrite(RelPin, HIGH);
delay(On);
digitalWrite(RelPin, LOW);
delay(Off);
digitalWrite(RelPin, HIGH);
delay(On);
digitalWrite(RelPin, LOW);
delay(Off);
digitalWrite(RelPin, HIGH);
delay(On);
digitalWrite(RelPin, LOW);
delay(Off);
delay(randOff);
}
void setup() {
pinMode(LedPin, OUTPUT); // initialize the LED pin as an output - not needed in the moment. Needed it for testing.
pinMode(buttonPin, INPUT); // initialize the pushbutton pin as an input
randomSeed (analogRead (0)); // randomize
pinMode(RelPin, OUTPUT); // sets the digital Relais pin as output
}
void loop(){
buttonState = digitalRead(buttonPin); // read the state of the pushbutton value:
// check if the pushbutton is pressed.
if (buttonState == LOW) { // if it is play program Relais (phone rings)
Relais ();
}
}