Hi,
wie bereits bei dem anderen Bericht ( 96 LED´s über RS232 ) angekündigt, nun das Raumdisplay. Wie auch dei der anderen Schaltung hat auch bei dieser, Tobias den µC programmiert (auch das Test-Script unten).
Die einzelnen Funktionen der Schaltung:
ein 2 x 16 DOGM Display ansteuern
die Hintergrundbeleuchtung des Displays ein- ausschalten
2x LED ansteuern
8x Tasten abfragen
einen Pieper einschalten
den RC-5 Fernbedienungs Code empfangen und entschlüsseln
über RS 232 mit dem PC die Daten austauschen
Es können mehrere von diesen Platinen an einem Seriellen Port betrieben werden. Es gibt dann nur Probleme wenn zwei oder mehr zu genau dem gleichen Zeitpunkt ihre daten zum PC senden. In dem unten beschrieben String ist dann auch eine ID des jeweiligen Bausteins enthalten. Beim Senden können auch alle gleichzeitig angesprochen werden um z.B. die Uhrzeit auf alle Displays schreiben, oder alle Piepser im Haus einzuschalten.
Zur Zeit habe ich die Raum Temp und Feuchtigkeit auf der linken Seite, die aussen Temp und die Uhrzeit auf der Rechten (Bild2). Die Hintergrundbeleuchtung ist zur Zeit die Rote, soll aber wohl doch noch in weiß getauscht werden. Es ist auch auf einer separaten Platine untergebracht, um es bei einem Gehäuseeinbau besser platzieren zu können. Die Steckverbindung ist dabei verdreht, da die Steckerwanne bei der Displayplatine auf der Rückseite sitzt.
Die Anbindung an den PC erfolgt über den MAX232 von Maxim und hat am Ausgang einen Widerstand und eine Diode zur Entkopplung der einzelnen Platinen.
Die Datenübertragung der RS232 ist über ein etwa 25m langes ungeschirmtes Kabel erfolgreich getestet.
Eistellung der seriellen Schnittstelle:
9600,8,1,N
Der RC-5 IR-Code wird mit einem TSOP1736 empfangen und in die Gerätekennung und Tastennummer entschlüsselt und zum PC übertragen. Der Code wird von einigen Firmen (z.B. Loewe/Philips/Grundig/…) verwendet. Daher liegt meisst eine passende ältere Fernbedienung rum.
Also vom Sofa aus mit der Fernbedienung des Fernsehers (da es bei meiner die nicht mehr benötigte Umschaltung auf Gerät VCR gibt) die Rolladen und das Licht steuern.
Daten senden:
\xffBp\0\0($temperatur)\dfC\0
B = Geräte ID
p = Display ansprechen
0 = beginne mit dem Text bei Spalte 0
0 = beginne mit dem Text bei Zeile 0
$temperatur = gebe die Variable $temperatur aus
dfC = das Gradzeichen hinter der Temperatur
xffBp = Daten ans Display (Gerät B)
\xffBa = Licht Display AN (Gerät B)
\xffBb = Licht Display AUS (Gerät B)
\xffBc = Display löschen (Gerät B)
\xffDc = Display löschen (Gerät D)
\xff\0c = Display löschen (alle Geräte)
\xffBv = Versionsinfo
Daten empfangen:
<?
$data = GetValueString("TobiInput");
$teile = explode(";", $data);
// Die Sender heißen A, B, C, D usw...
// Das entspricht dann Wohnzimmer, Flur etc...
$sender = $teile[0]{1};
echo "Sender ".$sender."
";
$typ = $teile[0]{2};
if($typ == "i") //i=Infrarot
{
$geraet = rtrim($teile[1]);
$taste = rtrim($teile[2]);
echo "Infrarot ";
echo "Geraetenummer ".$geraet;
echo " Taste *".$taste."*
";
switch($geraet)
{
case "0": // Gerätecode 0
switch($taste)
{
case "32":
echo "rauf";
MBT_WriteCoil(10397 /*[Wago MBT]*/ ,514 /* Ausgang514 = Licht wozi */,true);
break;
case "33":
echo "runter";
MBT_WriteCoil(10397 /*[Wago MBT]*/ ,514,false);
break;
case "01":
echo "01";
MBT_WriteCoil(10397 /*[Wago MBT]*/ ,540 /* Ausgang525 = Rolladen au */,true);
IPS_Sleep (500);
MBT_WriteCoil(10397 /*[Wago MBT]*/ ,540 /* Ausgang525 = Rolladen au */,false);
break;
case "04":
echo "04";
MBT_WriteCoil(10397 /*[Wago MBT]*/ ,540,false);
break;
case "35":
echo "Display";
COMPort_SendText(20531 /*[Serial Port 17 / 3-1..4a+b]*/ , "\xffBc\0\0\xfe");
$temperatur = GetValueFloat("Temperatur1");
echo $temperatur;
$temperatur2 = round($temperatur, 1);
echo $temperatur2;
COMPort_SendText(20531 /*[Serial Port 17 / 3-1..4a+b]*/ , "\xffBp\0\0{$temperatur2}\xdfC\0");
break;
case "02":
echo "02;
COMPort_SendText(20531 /*[Serial Port 17 / 3-1..4a+b]*/ , "\xffBa\0\1\xfe");
break;
case "05":
echo "05";
COMPort_SendText(20531 /*[Serial Port 17 / 3-1..4a+b]*/ , "\xffBb\0\1\xfe");
break;
case "03":
echo "03";
COMPort_SendText(15185 /*[Serial Port 11 / 3-5a]*/ , "\xffAf\9\1\xfe");
break;
case "06":
echo "06";
COMPort_SendText(15185 /*[Serial Port 11 / 3-5a]*/ , "\xffAe\9\xfe");
break;
case "09":
echo "09";
COMPort_SendText(15185 /*[Serial Port 11 / 3-5a]*/ , "\xffAe\1\xfe");
break;
case "38":
echo "38";
COMPort_SendText(15185 /*[Serial Port 11 / 3-5a]*/ , "\xffAd\9\xfe");
break;
case "38":
echo "OK";
COMPort_SendText(15185 /*[Serial Port 11 / 3-5a]*/ , "\xffAe\9\xfe");
break;
}
break;
case "1": // anderes Gerät
break;
}
}
else if($typ == "t") //t=Taste
{
// Taste am Raumdisplay
$taste = rtrim($teile[1]);
switch($sender)
{
case "B":
// Raum x
switch($taste)
{
case "1":
echo "Taste 1 Raum x";
break;
case "2":
echo "Taste 2 Raum x";
break;
case "3":
echo "Taste 3 Raum x";
break;
}
break;
case "C":
// Raum y
switch($taste)
{
case "1":
echo "Taste 1";
break;
case "2":
echo "Taste 2";
break;
case "3":
echo "Taste 3";
break;
}
break;
}
}
?>
die Scripte werdet Ihr besser verstehen als ich, da ich noch am Anfang des ganzen bin… …ich Kopiere und „versuche“ zu verstehen.
Gruß
Jan