mirror of
https://github.com/sigmasternchen/combinationLockPG
synced 2025-03-15 11:38:55 +00:00
lines of doc
This commit is contained in:
parent
646d01a3f7
commit
247eabe934
5 changed files with 66 additions and 2 deletions
|
@ -0,0 +1 @@
|
||||||
|
Die App zeigt ein rundes Codezahlen-Schloss, dessen Ziffernblatt durch Rotation des Gerätes ebenfalls rotiert. Darunter befindet sich ein Button mit der Aufschrift \enquote{I'm feeling lucky}. Durch Klick auf denselben, werden die, seit dem letzten Betätigen des Buttons, aufgenomenen Positionen der Richtungswechsel ausgegeben und mit dem codemäßig eingestellten Code verglichen.
|
44
doc/code.tex
44
doc/code.tex
|
@ -0,0 +1,44 @@
|
||||||
|
Mittels der folgenden Codezeile wird darauf gewartet, dass das Gerät bereit ist und die Sensoren verwendet werden können.
|
||||||
|
\begin{lstlisting}
|
||||||
|
document.addEventListener("deviceready", startup, false);
|
||||||
|
\end{lstlisting}
|
||||||
|
Wenn dieser Befehl nicht vorhanden ist, gibt die App einen Fehler zurück, weil der angesprochene Sensor aus der Sicht der App nicht vorhanden ist.
|
||||||
|
\\
|
||||||
|
Daraufhin wird der folgendeBefehl ausgeführt.
|
||||||
|
\begin{lstlisting}
|
||||||
|
watchID = navigator.accelerometer.watchAcceleration(onSuccess,
|
||||||
|
onError, options);
|
||||||
|
\end{lstlisting}
|
||||||
|
Dieser sorgt dafür, dass im eingestellten Intervall die Beschleunigungen gemessen werden.
|
||||||
|
In diesem Fall wurde eingestellt, dass die Sensoren alle 100ms ($ \widehat{=} $ 10 Hz) abgefragt werden. \\
|
||||||
|
Wenn diese Abfrage funktioniert, wird die Funktion \texttt{onSucess} verwendet, bei einem Fehlschlag \texttt{onError}.
|
||||||
|
\\\\
|
||||||
|
Es wird der Neigungswinkel des Gerätes bestimmt und der Funktion \texttt{handleAngle} mitgegeben.\\
|
||||||
|
Diese rechnet mit Hilfe der Funktion \texttt{angleToNum} vom Winkel auf die entsprechenden Zahl der Zahlenscheibe um.\\
|
||||||
|
Nun folgt eine Prüfung auf bestimmte Sonderfälle, welche das Ergebnis beeinflussen:
|
||||||
|
\begin{itemize}
|
||||||
|
\item Ist der vorige Wert minus den aktuellen Wert größer als zwei Drittel der Wählscheibe, so kann davon ausgegangen werden, dass über 0 gedreht wurde.\\
|
||||||
|
Resultat: Die Richtung wird auf \enquote{links} gesetzt.
|
||||||
|
\item Ist der aktuelle Wert minus den vorigen Wert größer als zwei Drittel der Wählscheibe, so kann davon ausgegangen werden, dass über 0 gedreht wurde.\\
|
||||||
|
Resultat: Die Richtung wird auf \enquote{rechts} gesetzt.
|
||||||
|
\item Ist der aktuelle Wert kleiner als der vorige, so wird die Richtung auf \enquote{rechts} gesetzt.
|
||||||
|
\item Ist der vorige Wert kleiner als der vorige, so wird die Richtung auf \enquote{links} gesetzt.
|
||||||
|
\item Sonst wird die Richtung beibehalten.
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
Sollte die Richtung nun ungleich der alten Richtung sein (und ungleich der Nullrichtung), so wird der aktuelle Wert zum Array der Eingangewerte hinzugefügt. \\
|
||||||
|
Sonst wird, im Falle dessen, dass nach rechts (Richtung ist \enquote{rechts}) gedreht wird, die Anzahl der Nullübergänge geprüft. Ist diese größer als 2, so wird das Array der Eingangswerte gelöscht.\\
|
||||||
|
\\
|
||||||
|
Nun wird noch die alte Richtung durch die neue Richtung, sowie der alte Wert durch den neuen Wert, ersetzt.\\
|
||||||
|
\\
|
||||||
|
Zum Schluss wird noch das Ziffernblatt aktualisieren, dies ist jedoch trivial.\\
|
||||||
|
\\
|
||||||
|
Die Funktion, die beim Click auf den Button ausgelöst wird, macht folgendes:
|
||||||
|
\begin{itemize}
|
||||||
|
\item Ist die Länge des einprogrammierten Codes ungleich der Länge des eingegebenen Codes, so kann davon ausgegangen werden, dass der Code falsch ist.
|
||||||
|
\item Es wird Schritt für Schritt durch das Eingangsarray gelaufen, und bei jedem Eintrag geprüft, ob der absolute Abstand des richtigen Wertes zum eingegebenen größer ist, als eine gewisse Tolleranzgrenze (standardmäßig 2). Ist das der Fall, so wird der Code als falsch angesehen.
|
||||||
|
\end{itemize}
|
||||||
|
Ist das Ergebnis dieser Prüfung, dass der Code falsch ist, so wird die Reihe der eingegebenen Zahlen ausgegeben, und das Eingangsarray zurückgesetzt.\\
|
||||||
|
Ist der Code richtig, so wird ein Youtube-Video geöffnet (\href{http://www.youtube.com/watch?v=aObeQUNELm4}{Link}).\\
|
||||||
|
\\
|
||||||
|
Für Details, siehe Source-Code.
|
|
@ -0,0 +1,3 @@
|
||||||
|
Ursprünglich wurde versucht, das Programm über den Kompass anzusteuern, da dieser direkt einen Winkel zurückgibt. Da sich allerdings herausstellte, dass der eingebaute Kompass zu ungenau ist, entschied sich das Team für das Auslesen des Beschleunigungssensors.\\
|
||||||
|
\\
|
||||||
|
Das Programm funktioniert prinzipiell, allerdings sind die durch den Sensor verursachten Ungenauigkeiten so stark, dass sie in der \texttt{handleAngle}-Funktion einen falsch-interpretierten Richtungswechsel triggern, was das Ergebnis unbrauchbar verfälscht. Um dieses Verhalten zu kompensieren, wurde eine Hysterese eingebaut. Diese funktionierte allerdings nicht wie gewünscht, also wurde diese auf 0 gestellt.
|
|
@ -1,5 +1,5 @@
|
||||||
JavaScript ist eine clientseitige Script-Sprache für Websiten. Der Name kommt daher, dass die Standard-Obejekte in JavaScript den gleichen Namenskonventionen wie die von Java unterliegen. Ansonsten haben diese zwei Sprachen sehr wenig gemeinsam.
|
JavaScript ist eine clientseitige Script-Sprache für Websiten. Der Name kommt daher, dass die Standard-Obejekte in JavaScript den gleichen Namenskonventionen wie die von Java unterliegen. Ansonsten haben diese zwei Sprachen sehr wenig gemeinsam.
|
||||||
|
|
||||||
JavaScript ist objektorientiert. Klassen sind ebenfalls Objekte, mit denen prototypen von ihren Instanzen genieriert werden. Prinzipiell sind alle Objekte, Eigenschaften und Methoden Variablen. Die Variablentypisierung ist dynamisch. Es gibt keine Unterscheidung zwischen publiken und privaten Eigenschaften und Methoden.
|
JavaScript ist objektorientiert. Klassen sind ebenfalls Objekte, mit denen Prototypen von ihren Instanzen genieriert werden. Prinzipiell sind alle Objekte, Eigenschaften und Methoden Variablen. Es gibt daher keine prinzipielle Unterscheidung zwischen Eigenschaften und Methoden. Die Variablentypisierung ist dynamisch. Es gibt keine Unterscheidung zwischen publiken und privaten Eigenschaften und Methoden.
|
||||||
|
|
||||||
In Javascript kann auch ohne objektorientierung programmiert werden.
|
In Javascript kann auch ohne objektorientierung programmiert werden. Für dieses Projekt wird nur diese Art der Programmierung verwendet.
|
|
@ -0,0 +1,16 @@
|
||||||
|
Es ist durch ein Plugin in PhoneGap auf die Beschleunigungssensoren des mobilen Gerätes zuzugreifen.\\
|
||||||
|
Dieses gibt die Beschleunigung in x, y und z-Richtung zurück. Für weitere Überlegungen werden nur x und y-Richtung verwendet.\\
|
||||||
|
Wenn das Handy mit dem Display zum Benutzer und der Kopf des Gerätes nach oben gewandt ist, so zeigt die positive y-Beschleunigung nach unten (normalerweise Erdbeschleunigung: $g \simeq 9.8 \frac{m}{s}$)
|
||||||
|
Für die Umrechnung von den Beschleunigungen in den Neigungswinkel wird \autoref{formel} verwendet.
|
||||||
|
\begin{equation}
|
||||||
|
\phi = - \arctan(\frac{y}{-x}) \cdot \frac{360°}{2 \cdot \pi} - 90°
|
||||||
|
\label{formel}
|
||||||
|
\end{equation}
|
||||||
|
Diese Gleichung ist allerdings nur bei $ x < 0 $ gültig. Für $ x > 0 $ wird daher die \autoref{formel2} verwendet $ \Rightarrow $ Es ist eine Fallunterscheidung notwendig.
|
||||||
|
|
||||||
|
\begin{equation}
|
||||||
|
\phi = 360 - \arctan(\frac{y}{-x}) \cdot \frac{360°}{2 \cdot \pi} - 90°
|
||||||
|
\label{formel2}
|
||||||
|
\end{equation}
|
||||||
|
|
||||||
|
Zusätzlich muss der Fall $ x = 0 $ verhindert werden, da sonst eine Division durch 0 vorliegt. Dies wird durch Addieren eines vernachlässigbar kleinem Wert an $ x $, im Falle dessen, dass $ x = 0 $, verhindert.
|
Loading…
Reference in a new issue