Parallel Port per Pfeiltasten steuern

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Parallel Port per Pfeiltasten steuern

    Hallo allerseits.
    Ich möchte gerne den Parallelport per steuern. Also wenn ich "Pfeil hoch" drücke, soll pin 2 ein High pegel kriegen und zwar so lange bis ich die Taste wieder los lasse.
    So weit so gut, das ganze soll aber über den Browser steuerbar sein. Also quasi als Internet Anwendung. Jetzt meine Fragen:
    In welcheer Sprache sollte man es realisieren?
    Gibt es fertige Scripts dazu?
    ICh habe auch mal ein wenig rumgesucht und habe das hier gefunden

    Quellcode

    1. ##############################################################################
    2. # #
    3. # Relais-Steuerung | relais.pl 1.01 #
    4. # #
    5. # CGI-Perlscript für Windows-Webserver #
    6. # #
    7. # Steuert Relaiskarte an der parallelen Schnittstelle. #
    8. # #
    9. # Written 2005-2006 Harald Gabler #
    10. # E-Mail: harald.gabler@netcamera.org #
    11. # Internet: http://www.netcamera.org #
    12. # #
    13. ##############################################################################
    14. # URL des Perlscripts
    15. my $script_url = "http://meinpc.dyndns.org:80/cgi-bin/relais/relais.pl";
    16. # URL des HTML-Verzeichnis (ohne Schraegstrich am Ende)
    17. my $noncgi_dir = ".";
    18. # Portadresse (LTP1 => 0x378 / LTP2 => 0x278)
    19. my $port = 0x378;
    20. # Schalter/Tasten-Modus (0 = Schaltermodus, 1 = Tastenmodus)
    21. my $mode = "0";
    22. # Automatische Aktualisierung (0 = aus, 1 oder groesser = Refresh-Intervall in Sekunden)
    23. my $refresh = "0";
    24. # Name der Seite
    25. my $page_name = "Relais-Steuerung";
    26. # Name des Statusfeldes
    27. my $status_name = "Status der Relais";
    28. # Statusfeld anzeigen (0 = Anzeige aus, 1 = Anzeige ein)
    29. my $status_view = "1";
    30. # Namen der Schalter
    31. my @switch_name = ("Schalter 1","Schalter 2","Schalter 3","Schalter 4","Schalter 5","Schalter 6","Schalter 7","Schalter 8");
    32. # Schalter anzeigen (0 = Anzeige aus, 1 = Anzeige ein)
    33. my @switch_view = ("1","1","1","1","1","1","1","1");
    34. # Name des Feldes zum Schalten aller Relais
    35. my $all_name = "Alle Relais";
    36. # Feld "Alle Relais" anzeigen (0 = Anzeige aus, 1 = Anzeige ein)
    37. my $all_view = "1";
    38. # Name des Eingangsfeldes
    39. my $input_name = "Status der Eingänge";
    40. # Eingangsfeld anzeigen (0 = Anzeige aus, 1 = Anzeige ein)
    41. my $input_view = "1";
    42. # Namen der LEDs (n/a = ohne Funktion nicht aendern)
    43. my @led_name = ("n/a","n/a","n/a","Pin 15","Pin 13","Pin 12","Pin 10","Pin 11");
    44. # LEDs anzeigen (n/a = ohne Funktion nicht aendern, 0 = Anzeige aus, 1 = Anzeige ein)
    45. my @led_view = ("n/a","n/a","n/a","1","1","1","1","1");
    46. ##############################################################################
    47. use strict;
    48. use CGI;
    49. my $cgi = new CGI;
    50. use CGI::Carp qw(fatalsToBrowser);
    51. use Win32::API; # load API module to interface DLL's
    52. my $GetPortVal = new Win32::API("inpout32", "Inp32", ['I'], 'I'); # import Inp32 from DLL
    53. my $SetPortVal = new Win32::API("inpout32", "Out32", ['I','I'], 'I'); # import Out32 from DLL
    54. my @status;
    55. $port = $port + 2;
    56. readPort();
    57. $status[5] = "0"; # Bidirektional aus
    58. writePort();
    59. $port = $port - 2;
    60. if($mode > 0) { setLow(); }
    61. readPort();
    62. if($cgi->param()) {
    63. checkForm();
    64. writePort();
    65. if($mode > 0) {
    66. sleep($mode);
    67. setLow();
    68. readPort();
    69. }
    70. }
    71. printHeader();
    72. if ($status_view > 0) { printStatus(); }
    73. if ($all_view > 0) { printAll(); }
    74. if ($input_view > 0) {
    75. $port = $port + 1;
    76. readPort();
    77. printInput();
    78. }
    79. printRefresh();
    80. printFooter();
    81. ##############################################################################
    82. # Port auslesen und Bitstatus setzen
    83. sub readPort {
    84. my $wert = $GetPortVal->Call($port) & 255;
    85. for(my $i = 7; $i >= 0; $i--) {
    86. $status[$i] = int($wert / (2 ** ($i)));
    87. $wert = $wert % (2 ** ($i));
    88. }
    89. }
    90. # Formulardaten auswerten und neuen Bitstatus setzen
    91. sub checkForm {
    92. my $a = $cgi->param("A");
    93. if($a eq "Einschalten") {
    94. for(my $i = 0; $i <= 7; $i++) {
    95. $status[$i] = 1;
    96. }
    97. }
    98. elsif($a eq "Ausschalten") {
    99. for(my $i = 0; $i <= 7; $i++) {
    100. $status[$i] = 0;
    101. }
    102. }
    103. for(my $i = 0; $i <= 7; $i++) {
    104. my $s = $cgi->param("S$i");
    105. if($s ne "") {
    106. my $r = $cgi->param("R$i");
    107. if($r == 0) {
    108. $status[$i] = 1;
    109. }
    110. elsif($r == 1) {
    111. $status[$i] = 0;
    112. }
    113. }
    114. }
    115. }
    116. # Bitstatus auf Port schreiben
    117. sub writePort {
    118. my $wert = 0;
    119. for(my $i = 0; $i <= 7; $i++) {
    120. $wert += $status[$i] * (2 ** ($i));
    121. }
    122. my $return = $SetPortVal->Call($port,$wert);
    123. }
    124. # Bytestatus 0 auf Port schreiben
    125. sub setLow {
    126. my $wert = 0;
    127. my $return = $SetPortVal->Call($port,$wert);
    128. }
    129. # Ausgabe im Browser
    130. sub printHeader {
    131. print "Content-type: text/html\n\n";
    132. print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n";
    133. print "<html>\n";
    134. print "<head>\n";
    135. if($refresh > 0) { print "<meta http-equiv=\"refresh\" content=\"$refresh; URL=$script_url\">\n"; }
    136. print "<meta http-equiv=\"content-type\" content=\"text/html; charset=ISO-8859-1\">\n";
    137. print "<link rel=\"stylesheet\" type=\"text/css\" href=\"$noncgi_dir/format.css\">\n";
    138. print "<title>$page_name</title>\n";
    139. print "</head>\n";
    140. print "<body>\n";
    141. print "<p><big>$page_name</big></p>\n";
    142. print "<form name=\"Relais\" action=\"$script_url\" method=\"post\">\n";
    143. }
    144. sub printFooter {
    145. print "</form>\n";
    146. print "<p><small>Relais-Steuerung 1.01<br>&copy\; 2005-2006 Harald Gabler - <a href=\"http://www.netcamera.org\">netcamera.org</a></small></p>\n";
    147. print "</body>\n";
    148. print "</html>\n";
    149. }
    150. sub printStatus {
    151. print "<fieldset><legend>$status_name</legend>\n";
    152. print "<table><tr>\n";
    153. for(my $i = 0; $i <= 7; $i++) {
    154. if($switch_view[$i] > 0) {
    155. if($status[$i] == 1) {
    156. print "<td>\n";
    157. if($mode == 0) { print "<img src=\"$noncgi_dir/led_ein.gif\" alt=\"\"><br>\n"; }
    158. print "<input type=\"hidden\" name=\"R$i\" value=\"1\">\n";
    159. if($switch_name[$i] eq "") {
    160. $switch_name[$i] = "Schalter " . ($i + 1);
    161. }
    162. print "<input type=\"submit\" name=\"S$i\" value=\"$switch_name[$i]\">\n";
    163. print "</td>\n";
    164. }
    165. elsif($status[$i] == 0) {
    166. print "<td>\n";
    167. if($mode == 0) { print "<img src=\"$noncgi_dir/led_aus.gif\" alt=\"\"><br>\n"; }
    168. print "<input type=\"hidden\" name=\"R$i\" value=\"0\">\n";
    169. if($switch_name[$i] eq "") {
    170. $switch_name[$i] = "Schalter " . ($i + 1);
    171. }
    172. print "<input type=\"submit\" name=\"S$i\" value=\"$switch_name[$i]\">\n";
    173. print "</td>\n";
    174. }
    175. }
    176. }
    177. print "</tr></table>\n";
    178. print "</fieldset>\n";
    179. print "<p></p>\n";
    180. }
    181. sub printAll {
    182. print "<fieldset><legend>$all_name</legend>\n";
    183. print "<table><tr>\n";
    184. print "<td>\n";
    185. print "<input type=\"submit\" name=\"A\" value=\"Einschalten\">\n";
    186. print "</td>\n";
    187. if($mode == 0) {
    188. print "<td>\n";
    189. print "<input type=\"submit\" name=\"A\" value=\"Ausschalten\">\n";
    190. print "</td>\n";
    191. }
    192. print "</tr></table>\n";
    193. print "</fieldset>\n";
    194. print "<p></p>\n";
    195. }
    196. sub printInput {
    197. print "<fieldset><legend>$input_name</legend>\n";
    198. print "<table><tr>\n";
    199. for(my $i = 3; $i <= 7; $i++) {
    200. if($led_view[$i] > 0) {
    201. if($status[$i] == 1) {
    202. print "<td>\n";
    203. if($i < 7) { print "<img src=\"$noncgi_dir/led_aus.gif\" alt=\"\"><br>\n"; }
    204. else { print "<img src=\"$noncgi_dir/led_ein.gif\" alt=\"\"><br>\n"; }
    205. print "<small>$led_name[$i]</small>\n";
    206. print "</td>\n";
    207. }
    208. elsif($status[$i] == 0) {
    209. print "<td>\n";
    210. if($i < 7) { print "<img src=\"$noncgi_dir/led_ein.gif\" alt=\"\"><br>\n"; }
    211. else { print "<img src=\"$noncgi_dir/led_aus.gif\" alt=\"\"><br>\n"; }
    212. print "<small>$led_name[$i]</small>\n";
    213. print "</td>\n";
    214. }
    215. }
    216. }
    217. print "</tr></table>\n";
    218. print "</fieldset>\n";
    219. print "<p></p>\n";
    220. }
    221. sub printRefresh {
    222. print "<fieldset><legend>Anzeige</legend>\n";
    223. print "<table><tr>\n";
    224. print "<td>\n";
    225. print "<input name=\"refresh\" type=\"button\" value=\"Anzeige aktualisieren\" onClick=\"javascript:location.href=\'$script_url\';\">\n";
    226. print "</td>\n";
    227. print "</tr></table>\n";
    228. print "</fieldset>\n";
    229. }
    Alles anzeigen


    So in etwa stell ich mir das vor, halt die steurung nur per Pfeiltasten. Eine Anzeige brauche ich außerdem auch nicht, somit auch keinen Refresh nach jeder Aktion

    Ich hoffe ihr habt mich verstanden.


    Gruß Sebastian