From 369409f5a76d1c2b1ac8210cdbac02634f874370 Mon Sep 17 00:00:00 2001
From: duc anh vu <vuducanh@informatik.hu-berlin.de>
Date: Tue, 8 May 2018 16:28:02 +0200
Subject: [PATCH] add documentation for camera and ultra sonic sensor

---
 doc/mainDocument/sections/modspez.tex   |  9 ++++++++-
 doc/mainDocument/sections/uss_example.c | 24 ++++++++++++++++++++++++
 2 files changed, 32 insertions(+), 1 deletion(-)
 create mode 100644 doc/mainDocument/sections/uss_example.c

diff --git a/doc/mainDocument/sections/modspez.tex b/doc/mainDocument/sections/modspez.tex
index 162e6202..4354270a 100644
--- a/doc/mainDocument/sections/modspez.tex
+++ b/doc/mainDocument/sections/modspez.tex
@@ -4,6 +4,13 @@
 	\input{../modules/cruiseControl/docCACC-content}
 
 	\subsection{Ultraschallsensor}	
-	An den Fahrzeugen ist ein Ultraschallsensor vom Modell SRF02 angebaut.	
+	An den Fahrzeugen ist ein Ultraschallsensor vom Modell SRF02 angebaut.	Der Sensor ist so am Odroid angeschlossen, dass er im I2C Modus l\"auft. Um mit dem Sensor zu interagieren braucht man die Device-Id, welche auf dem Sensor draufgeklebt ist, z.B. 0x74. Um den Ost der Ger\"atedatei unter Linux zu finden, kann i2c-detect verwendet werden, welches im i2c-tools Paket verf\"ugbar ist. In unserem Fall ist /dev/i2c-1 die Ger\"atedatei f\"ur den Sensor.	Unter \url{http://www.robot-electronics.co.uk/htm/srf02techI2C.htm} stehen die verschiedenen Register die man schreiben und lesen kann, um den Sensor zu bedienen. 0x00 ist das Command-Register, in das geschrieben werden kann, um eine Messung zu beginnen. Schreibt man den Wert 0x51 in das Command-Register, beginnt der Sensor mit der Messung und gibt das Ergebnis in centimeter zur\"uck. In der technischen Spezifikation wird angegeben, dass eine Messung mindestens 65ms dauert bis das Ergebnis zur Verf\"ugung steht. In unserem Code warten wir nach dem Beginn einer Messung 70ms, um sicher das Ergebnis zu bekommen. Am Ende der Messung steht das 16bit Ergebnis in den jeweils 8bit großen Registern 0x02 und 0x03 und kann einfach ausgelesen werden.
+	\\\\
+	Um einfach auf die Register zugreifen zu k\"onnen benutzen wir die wiringPi Library \url{https://github.com/hardkernel/wiringPi}. Mithilfe dieser Library k\"onnte eine Messung wie folgt durchgef\"uhrt werden:\\	
+	\lstinputlisting[language=C]{sections/uss_example.c}
+
+	
+	\subsection{Kamera}
+	An den Fahrzeugen ist eine Kamera vom Model DFM 22BUC03-ML angebaut. Der Hersteller der Kamera stellt die Software zur Bedienung der Kamera \"uber \url{https://github.com/TheImagingSource/tiscamera} zur Verf\"ugung. Hat man sich das Repository runtergeladen, kann man das Projekt nach der angegeben Anleitung zun\"achst bauen. Wenn das Projekt gebaut ist, muss die Firmware auf die Kamera geladen werden. Dazu einfach der Anleitung unter \url{https://github.com/TheImagingSource/tiscamera/wiki/Getting-Started-with-USB-2.0-CMOS-Cameras} folgen. Wenn die Firmware erfolgreich geladen wurde, ist die Kamera einsatzbereit. Im Repository sind auch Beispiele vorhanden, die man direkt ausf\"uhren kann, um Daten von der Kamera zu lesen.
 	
 \end{document}
\ No newline at end of file
diff --git a/doc/mainDocument/sections/uss_example.c b/doc/mainDocument/sections/uss_example.c
new file mode 100644
index 00000000..8ea1c60c
--- /dev/null
+++ b/doc/mainDocument/sections/uss_example.c
@@ -0,0 +1,24 @@
+#include "wiringPiI2C.h"
+
+#include <unistd.h>
+
+const int COMMAND_REGISTER = 0x00;
+const int RESULT_HIGH_BYTE = 0x02;
+const int RESULT_LOW_BYTE = 0x03;
+const int RANGING_MODE_CM = 0x51;
+
+const int DELAY = 70;
+
+int getDistance() {
+
+	char *device = "/dev/i2c-1";
+	int devId = 0x74;
+
+	int fd = wiringPiI2CSetupInterface(device, this->devId);
+	
+	wiringPiI2CWriteReg8(fd, COMMAND_REGISTER, RANGING_MODE_CM);
+	usleep(DELAY * 1000);
+	int distance = wiringPiI2CReadReg16(fd, RESULT_LOW_BYTE);
+
+	return distance;
+}
-- 
GitLab