Hallo Leute,
der Code ist nun fertig und funktioniert.
Um nochmal auf die Bedenken von euch bezüglich der Spannung zurück zu kommen.
Es liegt im idle definitiv 17 Volt DC an, wird geklingelt liegen 22V an. Dies ist auch mein Indikator.
Zu gucken, ob der Strom dann nicht doch AC wird, wenn jemand Klingelt habe ich noch nicht bedacht, werde ich auf jeden Fall prüfen.
Ich habe einen L78S12CV vor die Spannungsversorgung des Arduino gesetzt.
Nun habe ich noch folgendes Problem, dass das Programm nicht mehr funktioniert, wenn geklingelt wird und der Arduino an den 12 Volt hängt.
Mir ist aufgefallen, dass die Betriebsled flimmert, wenn gekingelt wird.
Deswegen habe ich nachgemessen.
Im ide liegen an dem Arduino 12V an, wenn geklingelt wird, liegen nurnoch 11V an.
Laut Internet, kann das schon mal sein, dass dann der Code nicht mehr läuft.
Betrieben an der USB Schnittstelle funktioniert das Programm einwandfrei. Morsecode Türöffner - YouTube
Ich habe nun gedacht dieses Defizit mit einem Kondensator zu überbrücken und gut ist.
Eure Ideen und Meinungen dazu sind gern erwünscht.
Nun nochmal ein Bild und zum Schluss der Code.
Im Bild zeige ich euch meinen Schaltplan.
Oben Links soll das Spannungssensor Modul darstellen.
Rechts daneben ist besagter Spannungswandler.
Unten Links mein Controller.
Rechts daneben das Relais, welches den Türöffner überbrückt.
S = Signalpin auf Arduino
Nun der Code.
Diesen habe ich nicht alleine angefertigt und verstehe ihn deswegen noch nicht 100%.
Die Zeiten für den Morsecode müssten auch noch individuell angepasst werden, dieser ist eher was für langsamere Morser.
Morsedecoder by https://www.instructables.com/id/Morse-Code-Decoder/
unsigned long signal_len,t1,t2,t3; //time for which button is pressed
int inputPin = A1; //input pin for push button
int ledPin = 18; //outpu pin for LED
String code = ""; //string in which one alphabet is stored
String passwort;
int x=0;
char buf[8];
void setup()
{
Serial.begin(9600);
pinMode(inputPin,INPUT);
pinMode(ledPin,OUTPUT);
pinMode(20, OUTPUT);
digitalWrite(20, HIGH);
}
void loop()
{
NextDotDash:
while (analogRead(inputPin) < 700) {
if(millis() - t3 > 5000){
passwort=buf;
Serial.print("t");
Serial.println(passwort);
passwortabfrage();
memset (buf, 0, sizeof(buf));
passwort="";
x=0;
}
}
t1 = millis(); //time at button press
digitalWrite(ledPin, HIGH); //LED on while button pressed
while (analogRead(inputPin) > 700) {t3 = millis();}
t2 = millis(); //time at button release
digitalWrite(ledPin, LOW); //LED off on button release
signal_len = t2 - t1; //time for which button is pressed
if (signal_len > 50) //to account for switch debouncing
{
code += readio(); //function to read dot or dash
}
while ((millis() - t2) < 1000) //if time between button press greater than 1sec, skip loop and go to next alphabet
{
if (analogRead(inputPin) > 700)
{
goto NextDotDash;
}
}
convertor(); //function to decipher code into alphabet
Serial.println(t3);
}
char readio()
{
if (signal_len < 600 && signal_len > 50)
{
return '.'; //if button press less than 0.6sec, it is a dot
}
else if (signal_len > 600)
{
return '-'; //if button press more than 0.6sec, it is a dash
}
}
void convertor()
{
static String letters[] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-",
".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..", "E"
};
int i = 0;
if (code == ".-.-.-")
{
Serial.print("."); //for break
}
else
{
while (letters[i] != "E") //loop for comparing input code with letters array
{
if (letters[i] == code)
{
Serial.print(char('A' + i));
buf[x] = char('A' + i);
break;
}
i++;
}
if (letters[i] == "E")
{
Serial.println("ERROR"); //if input code doesn't match any letter, error
}
}
code = ""; //reset code to blank string
x++;
}
void passwortabfrage()
{
if (passwort == "XXX" || passwort == "XXX" || passwort == "XXX"){
Serial.println("Passwort OK");
digitalWrite(20, LOW);
delay(500);
digitalWrite(20, HIGH);
}else{
}
}