<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://www.ccc-mannheim.de/mediawiki/index.php?action=history&amp;feed=atom&amp;title=IOrouter</id>
	<title>IOrouter - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://www.ccc-mannheim.de/mediawiki/index.php?action=history&amp;feed=atom&amp;title=IOrouter"/>
	<link rel="alternate" type="text/html" href="https://www.ccc-mannheim.de/mediawiki/index.php?title=IOrouter&amp;action=history"/>
	<updated>2026-05-07T08:17:26Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in C3MAWiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://www.ccc-mannheim.de/mediawiki/index.php?title=IOrouter&amp;diff=2380&amp;oldid=prev</id>
		<title>Ollo am 9. Februar 2014 um 17:56 Uhr</title>
		<link rel="alternate" type="text/html" href="https://www.ccc-mannheim.de/mediawiki/index.php?title=IOrouter&amp;diff=2380&amp;oldid=prev"/>
		<updated>2014-02-09T17:56:58Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 9. Februar 2014, 17:56 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l4&quot;&gt;Zeile 4:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 4:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= DIE DOKU IST GERADE AM ENTSTEHEN... =&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= DIE DOKU IST GERADE AM ENTSTEHEN... =&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Das Projekt zur Lichtsteuerung des Raumes ist [[Ueberschalter]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Das Projekt zur &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&#039;&#039;&#039;&lt;/ins&gt;Lichtsteuerung&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&#039;&#039;&#039; &lt;/ins&gt;des &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&#039;&#039;&#039;&lt;/ins&gt;Raumes&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&#039;&#039;&#039; &lt;/ins&gt;ist [[Ueberschalter]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Info =&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Info =&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Ollo</name></author>
	</entry>
	<entry>
		<id>https://www.ccc-mannheim.de/mediawiki/index.php?title=IOrouter&amp;diff=2379&amp;oldid=prev</id>
		<title>Ollo: Link zu uberschalter</title>
		<link rel="alternate" type="text/html" href="https://www.ccc-mannheim.de/mediawiki/index.php?title=IOrouter&amp;diff=2379&amp;oldid=prev"/>
		<updated>2014-02-09T17:56:29Z</updated>

		<summary type="html">&lt;p&gt;Link zu uberschalter&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 9. Februar 2014, 17:56 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l3&quot;&gt;Zeile 3:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 3:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= DIE DOKU IST GERADE AM ENTSTEHEN... =&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= DIE DOKU IST GERADE AM ENTSTEHEN... =&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Das Projekt zur Lichtsteuerung des Raumes ist [[Ueberschalter]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Info =&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Info =&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Ollo</name></author>
	</entry>
	<entry>
		<id>https://www.ccc-mannheim.de/mediawiki/index.php?title=IOrouter&amp;diff=270&amp;oldid=prev</id>
		<title>Ollo: /* Startup Script */</title>
		<link rel="alternate" type="text/html" href="https://www.ccc-mannheim.de/mediawiki/index.php?title=IOrouter&amp;diff=270&amp;oldid=prev"/>
		<updated>2010-11-22T19:43:31Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Startup Script&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Kategorie:öffentlich]]&lt;br /&gt;
{{aktives Projekt|Kontakt=Pensoffsky}}&lt;br /&gt;
&lt;br /&gt;
= DIE DOKU IST GERADE AM ENTSTEHEN... =&lt;br /&gt;
&lt;br /&gt;
= Info =&lt;br /&gt;
Ziel dieses Projektes ist es einen Router im mehrere digitale Input / Outputs zu erweitern. Das Projekt soll so billig und einfach wie möglich realisierbar sein. Die benötigte Hardware besteht aus Standardbauteile die fast überall gekauft werden können.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
*Ein Router der mit [http://openwrt.org/ OpenWRT] geflasht werden kann&lt;br /&gt;
**mit RS232 auf dem Board&lt;br /&gt;
*Ein Mikrocontroller mit passender Anzahl IO-Ports&lt;br /&gt;
*Ein Quarz mit 3.6864MHz für den Mikrcontroller&lt;br /&gt;
*Einen Programmer für den Mikrocontroller&lt;br /&gt;
*Kleinzeugs wie Kabel, Wannenstecker, 2 Kondensatoren, Lüsterklemme&lt;br /&gt;
&lt;br /&gt;
= HowTo =&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== Modifikationen am Router ===&lt;br /&gt;
[[Image:IORouterPlatine.jpg|thumb|Geöffneter Router]]&lt;br /&gt;
&lt;br /&gt;
Das Projekt basiert auf dem TP-Link 741 Router. Dieser wurde ausgewählt weil er der billigste Router war der lokal im Geschäft gekauft werden konnte und der OpenWRT tauglich ist. Informationen zu OpenWRT auf diesem Gerät findet sich auf http://wiki.openwrt.org/toh/tp-link/tl-wr741nd. &lt;br /&gt;
&lt;br /&gt;
[[Image:IoRouterpins.jpg|thumb|Angelötete Pins auf dem Board|center]]&lt;br /&gt;
&lt;br /&gt;
Um den Mikrocontroller anzuschließen wird der serielle Anschluss auf dem Routerboard verwendet. Die Position des Ports ist auf dem oben genannten link zu OpenWRT klar zu erkennen. Auf diesem Port befindet sich standardmäßig eine Rootshell die deaktiviert werden sollte. Mehr dazu im Software Kapitel. Man kann die Kabel für die serielle Verbindung direkt an die Lötstellen der Platine löten oder kleine Metallpins einsetzen. Die Pins erlauben es einen Stecker für die Verbindung mit dem Controller zu verwenden. Die Pins können etwas schwierig zu löten sein, da der Masse Pin die Wärme sehr stark ableitet. &lt;br /&gt;
&lt;br /&gt;
=== Mikrocontroller Platine ===&lt;br /&gt;
&lt;br /&gt;
Die Spannungsversorgung erhält der Controller über die 3,3V Leitung die neben den RS232 Pins auf dem Routerboard zu finden ist. Dies erspart ein zusätzliches Netzteil.&lt;br /&gt;
&lt;br /&gt;
[[Image:IoRouterBoardMitKabel.jpg|thumb|uC-Platine mit Kabel (Noch ohne Quarz]]&lt;br /&gt;
[[Image:IoRoutercontrollerAnRouterBoard.jpg|thumb|uC-Platine an Board angeschlossen]]&lt;br /&gt;
&lt;br /&gt;
Die Controllerplatine besteht aus nicht viel mehr als einem AVR Controller der mit 3,3V VCC zurecht kommt. Da der Router nicht sehr tolerant ist beim RS232 Timing, musste der Controller mit einem Quarz ausgestattet werden. ...&lt;br /&gt;
&lt;br /&gt;
[[Image:IoRoutergehausemodifizieren.jpg|thumb|Modifizierung des Router Gehäuses]]&lt;br /&gt;
[[Image:IoRouterprogrammer.jpg|thumb|AVR ISP Programmer]]&lt;br /&gt;
[[Image:IoRouterrouterFertig.jpg|thumb|Fertiger Router]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Router [[Bild:iOrouter_gehaeuse.jpg]] öffnen, und Pins für den seriellen [[Bild:iOrouter_SeriellPins.jpg]] Anschluss anlöten. Gehäuse muss modifiziert [[Bild:iOrouter_gehaeueseMod.jpg]] werden, damit das serielle Kabel zum Mikrocontollerboard geführt werden kann.&lt;br /&gt;
&lt;br /&gt;
Ein Verbinungskabel Mikrocontoller zum Seriellenanschluss erstellen&lt;br /&gt;
&lt;br /&gt;
Eine Platine mit dem Mikrocontroller bauen.&lt;br /&gt;
Die OutputPins des Mikrocontoller mit der Lüsterklemme verbinden.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Über das Web-UI aus den eingestellten Paketqueuellen&lt;br /&gt;
* ser2net (Version 2.7-2)&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Auf der seriellen Konsole läuft für Recoveryzwecke ein Shell die deaktiviert werden muss. Dies erreicht man indem man in der Datei &amp;#039;&amp;#039;&amp;#039;/etc/inittab&amp;#039;&amp;#039;&amp;#039; folgende 2 Zeilen auskommentiert:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#tts/0::askfirst:/bin/ash --login&lt;br /&gt;
#ttyS0::askfirst:/bin/ash --login&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der Konfigurationsdatei &amp;#039;&amp;#039;/etc/ser2net.conf&amp;#039;&amp;#039; von ser2net aktiviert man folgende Konfiguration. Alle weiteren können auskommentiert werden:&lt;br /&gt;
&amp;lt;pre&amp;gt; 2001:raw:120:/dev/ttyS0:9600 NONE 1STOPBIT 8DATABITS -XONXOFF -LOCAL -RTSCTS &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Startup Script ==&lt;br /&gt;
File: /etc/init.d/ser2net&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/ash /etc/rc.common&lt;br /&gt;
# Copyright (C) 2006 OpenWrt.org&lt;br /&gt;
&lt;br /&gt;
START=99&lt;br /&gt;
&lt;br /&gt;
start()&lt;br /&gt;
{&lt;br /&gt;
        /usr/sbin/ser2net&lt;br /&gt;
        sleep 1&lt;br /&gt;
        nc localhost 2001 &amp;amp; sleep 1 ; killall nc&lt;br /&gt;
        for i in 0 1 2 3 4 5 ; do&lt;br /&gt;
                echo &amp;quot;ollpec${i}o&amp;quot; | nc localhost 2001 ; sleep 1&lt;br /&gt;
        done&lt;br /&gt;
        echo &amp;#039;ollpec6i&amp;#039; | nc localhost 2001 ; sleep 1&lt;br /&gt;
&lt;br /&gt;
        echo &amp;#039;ollpew0h&amp;#039; | nc localhost 2001 ; sleep 1&lt;br /&gt;
        echo &amp;#039;ollpew0l&amp;#039; | nc localhost 2001 ; sleep 1&lt;br /&gt;
        # clear data&lt;br /&gt;
#       nc localhost 2001 &amp;amp;; sleep 1 ; killall nc&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
stop()&lt;br /&gt;
{&lt;br /&gt;
        killall ser2net&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Das Skript muss auch in den Startvorgang ganz zum Schluss angetriggert werden.&lt;br /&gt;
 cd /etc/rc.d/&lt;br /&gt;
 ln -s ../init.d/ser2net S99ser2net&lt;br /&gt;
&lt;br /&gt;
== Controller Code ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
control software for &amp;quot;find name&amp;quot;&lt;br /&gt;
ports to control are 8, 7, 6, 5&lt;br /&gt;
accepts only messages with the prefix: ollpe&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
int CMD_MAX = 128;&lt;br /&gt;
char myCmd[128];&lt;br /&gt;
int port; &lt;br /&gt;
&lt;br /&gt;
char booted = 0; // bool variable&lt;br /&gt;
&lt;br /&gt;
void setup(){&lt;br /&gt;
  &lt;br /&gt;
  resetPorts();&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;booted&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void resetPorts()&lt;br /&gt;
{&lt;br /&gt;
  pinMode(8, INPUT);&lt;br /&gt;
  pinMode(7, INPUT);&lt;br /&gt;
  pinMode(6, INPUT);&lt;br /&gt;
  pinMode(5, INPUT);&lt;br /&gt;
  pinMode(4, INPUT);&lt;br /&gt;
  pinMode(3, INPUT);&lt;br /&gt;
  pinMode(2, INPUT);&lt;br /&gt;
  &lt;br /&gt;
  digitalWrite(8, LOW);&lt;br /&gt;
  digitalWrite(7, LOW);&lt;br /&gt;
  digitalWrite(6, LOW);&lt;br /&gt;
  digitalWrite(5, LOW);&lt;br /&gt;
  digitalWrite(4, LOW);&lt;br /&gt;
  digitalWrite(3, LOW);&lt;br /&gt;
  digitalWrite(2, LOW);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void clearCmdArray(){&lt;br /&gt;
  //clear the cmd array&lt;br /&gt;
  for (int i = 0; i &amp;lt; CMD_MAX; i++){&lt;br /&gt;
    myCmd[i] = &amp;#039;\0&amp;#039;;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//returns number of read bytes&lt;br /&gt;
int readFromSerialIntoCmdArray(){ &lt;br /&gt;
  //read from the serial buffer and flush&lt;br /&gt;
  int inputSize = Serial.available();&lt;br /&gt;
  &lt;br /&gt;
  //give serial a chance to receive all bytes&lt;br /&gt;
  if(inputSize &amp;gt; 0){&lt;br /&gt;
    delay(100);&lt;br /&gt;
    inputSize = Serial.available();&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  if(inputSize &amp;gt; 0 &amp;amp;&amp;amp; inputSize &amp;lt; CMD_MAX){&lt;br /&gt;
    Serial.print(&amp;quot;inputSize: &amp;quot;);&lt;br /&gt;
    Serial.println(inputSize);&lt;br /&gt;
    for (int i = 0; i &amp;lt; inputSize; i++){&lt;br /&gt;
      myCmd[i] = Serial.read();&lt;br /&gt;
    }&lt;br /&gt;
  }else if(inputSize &amp;gt;= CMD_MAX){&lt;br /&gt;
   Serial.flush();&lt;br /&gt;
     Serial.println(&amp;quot;too much data, flush&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  return inputSize;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//check if command has the required prefix&lt;br /&gt;
int checkCmdArrayForPrefix(){&lt;br /&gt;
   if (myCmd[0] == &amp;#039;o&amp;#039;&lt;br /&gt;
     &amp;amp;&amp;amp; myCmd[1] == &amp;#039;l&amp;#039;&lt;br /&gt;
     &amp;amp;&amp;amp; myCmd[2] == &amp;#039;l&amp;#039;&lt;br /&gt;
     &amp;amp;&amp;amp; myCmd[3] == &amp;#039;p&amp;#039;&lt;br /&gt;
     &amp;amp;&amp;amp; myCmd[4] == &amp;#039;e&amp;#039;){&lt;br /&gt;
      return 1;&lt;br /&gt;
   }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void sendAckOverSerial(){&lt;br /&gt;
  Serial.println(&amp;quot;ACK&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void sendNackOverSerial(){&lt;br /&gt;
  Serial.println(&amp;quot;NACK&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void sendPingAckOverSerial(){&lt;br /&gt;
  Serial.println(&amp;quot;PACK&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
  //delay needed to have a chance to get the whole message&lt;br /&gt;
  delay(100);&lt;br /&gt;
  clearCmdArray();&lt;br /&gt;
 &lt;br /&gt;
  int inputSize = readFromSerialIntoCmdArray();&lt;br /&gt;
  &lt;br /&gt;
  if (inputSize &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
    //debug&lt;br /&gt;
    Serial.print(&amp;quot;receiced: &amp;quot;);&lt;br /&gt;
    Serial.println(myCmd);&lt;br /&gt;
    &lt;br /&gt;
    int checkCmd = checkCmdArrayForPrefix();&lt;br /&gt;
    if(checkCmd == 0){&lt;br /&gt;
       Serial.println(&amp;quot;if you dont know what to do type \&amp;quot;ollpehelp\&amp;quot;&amp;quot;);&lt;br /&gt;
       sendNackOverSerial();&lt;br /&gt;
       return; &lt;br /&gt;
    }&lt;br /&gt;
    //check for write command&lt;br /&gt;
    if (myCmd[5] == &amp;#039;w&amp;#039;)&lt;br /&gt;
    {&lt;br /&gt;
        port = decodePort(myCmd[6]);&lt;br /&gt;
        if (myCmd[7] == &amp;#039;h&amp;#039;)&lt;br /&gt;
        {&lt;br /&gt;
          digitalWrite(port, HIGH);&lt;br /&gt;
          Serial.println(&amp;quot;HIGH&amp;quot;);&lt;br /&gt;
          sendAckOverSerial();&lt;br /&gt;
        }&lt;br /&gt;
        else if (myCmd[7] == &amp;#039;l&amp;#039;){&lt;br /&gt;
          digitalWrite(port, LOW); &lt;br /&gt;
          Serial.println(&amp;quot;LOW&amp;quot;);  &lt;br /&gt;
          sendAckOverSerial();&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
          sendNackOverSerial();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    else if(myCmd[5] == &amp;#039;r&amp;#039; &lt;br /&gt;
            &amp;amp;&amp;amp; myCmd[6] == &amp;#039;e&amp;#039; &lt;br /&gt;
            &amp;amp;&amp;amp; myCmd[7] == &amp;#039;s&amp;#039; &lt;br /&gt;
            &amp;amp;&amp;amp; myCmd[8] == &amp;#039;e&amp;#039;&lt;br /&gt;
            &amp;amp;&amp;amp; myCmd[9] == &amp;#039;t&amp;#039;)&lt;br /&gt;
    {&lt;br /&gt;
       resetPorts();&lt;br /&gt;
       sendAckOverSerial();&lt;br /&gt;
    }&lt;br /&gt;
    else if (myCmd[5] == &amp;#039;r&amp;#039;)&lt;br /&gt;
    {&lt;br /&gt;
      port = decodePort(myCmd[6]);&lt;br /&gt;
      int readValue = digitalRead(port);&lt;br /&gt;
      Serial.println(readValue);&lt;br /&gt;
    }&lt;br /&gt;
    //check for ping command&lt;br /&gt;
    else if(myCmd[5] == &amp;#039;p&amp;#039; &lt;br /&gt;
            &amp;amp;&amp;amp; myCmd[6] == &amp;#039;i&amp;#039; &lt;br /&gt;
            &amp;amp;&amp;amp; myCmd[7] == &amp;#039;n&amp;#039; &lt;br /&gt;
            &amp;amp;&amp;amp; myCmd[8] == &amp;#039;g&amp;#039;)&lt;br /&gt;
    {&lt;br /&gt;
       sendPingAckOverSerial();&lt;br /&gt;
    }&lt;br /&gt;
    else if(myCmd[5] == &amp;#039;h&amp;#039; &lt;br /&gt;
            &amp;amp;&amp;amp; myCmd[6] == &amp;#039;e&amp;#039; &lt;br /&gt;
            &amp;amp;&amp;amp; myCmd[7] == &amp;#039;l&amp;#039; &lt;br /&gt;
            &amp;amp;&amp;amp; myCmd[8] == &amp;#039;p&amp;#039;)&lt;br /&gt;
    {&lt;br /&gt;
       sendHelpOverSerial();&lt;br /&gt;
    }&lt;br /&gt;
    else if (myCmd[5] == &amp;#039;c&amp;#039;)&lt;br /&gt;
    {&lt;br /&gt;
        port = decodePort(myCmd[6]);&lt;br /&gt;
        if (myCmd[7] == &amp;#039;i&amp;#039;)&lt;br /&gt;
        {&lt;br /&gt;
          pinMode(port, INPUT);&lt;br /&gt;
          Serial.println(&amp;quot;INPUT&amp;quot;);&lt;br /&gt;
          sendAckOverSerial();&lt;br /&gt;
        }&lt;br /&gt;
        else if (myCmd[7] == &amp;#039;o&amp;#039;){&lt;br /&gt;
          pinMode(port, OUTPUT);&lt;br /&gt;
          Serial.println(&amp;quot;OUTPUT&amp;quot;);&lt;br /&gt;
          sendAckOverSerial();&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
          sendNackOverSerial();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      //no write command&lt;br /&gt;
       sendNackOverSerial(); &lt;br /&gt;
    }&lt;br /&gt;
  }     &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void sendHelpOverSerial()&lt;br /&gt;
{&lt;br /&gt;
  Serial.println(&amp;quot;----help is coming----&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;all commands must be prefixed with \&amp;quot;ollpe\&amp;quot;&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;----commands----&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;w0h\t set port 0 high&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;w0l\t set port 0 low&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;c0o\t config port 0 output&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;c0i\t config port 0 input&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;r0\t returns binary state of port 0 (values 0,1)&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;reset\t resets all ports to input and LOW&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;ping\t returns \&amp;quot;PACK\&amp;quot;&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;help\t prints this help&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;----help end----&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//converts a char with the port number 0-6&lt;br /&gt;
//to the arduino port numbers&lt;br /&gt;
int decodePort(char c)&lt;br /&gt;
{&lt;br /&gt;
 switch(c)&lt;br /&gt;
  {&lt;br /&gt;
   case &amp;#039;0&amp;#039;:&lt;br /&gt;
   return 8;&lt;br /&gt;
   case &amp;#039;1&amp;#039;:&lt;br /&gt;
   return 7;&lt;br /&gt;
   case &amp;#039;2&amp;#039;:&lt;br /&gt;
   return 6;&lt;br /&gt;
   case &amp;#039;3&amp;#039;:&lt;br /&gt;
   return 5;&lt;br /&gt;
   case &amp;#039;4&amp;#039;:&lt;br /&gt;
   return 4;&lt;br /&gt;
   case &amp;#039;5&amp;#039;:&lt;br /&gt;
   return 3;&lt;br /&gt;
   case &amp;#039;6&amp;#039;:&lt;br /&gt;
   return 2;&lt;br /&gt;
   default:&lt;br /&gt;
   return &amp;#039;8&amp;#039;;&lt;br /&gt;
  } &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ollo</name></author>
	</entry>
</feed>