DarkSchwabe Geschrieben 21. März 2005 Geschrieben 21. März 2005 Hallo, ich habe hier eine IR FErnbedienung und einen Empfänger den ich an COm1 anschließe. Nun weiß ich aber nicht wie ich den Empfänger anspreche oder das Signal bekomme, das am COM1 ankommt. Ich will die Fernbedienung in einem C++-Projekt nutzen. Ich habe das Programm WinLirc als Beispiel geholt, da funktioniert das auch. Nur ist der BEispielcode ziemlich unübersichtlich und kaum kommentiert. Kennt sich da jemand aus und könnte mir das ein wenig erklären? Wäre super. danke Gruß Zitieren
Klotzkopp Geschrieben 21. März 2005 Geschrieben 21. März 2005 Nun weiß ich aber nicht wie ich den Empfänger anspreche oder das Signal bekomme, das am COM1 ankommt. Ich will die Fernbedienung in einem C++-Projekt nutzen.Der C++-Standard deckt die Kommunikation über serielle (oder sonstige) Schnittstellen nicht ab. Also musst du verraten, für welches Betriebssystem das sein soll. WegenWinLirc tippe ich mal auf Windows, richtig? Nur ist der BEispielcode ziemlich unübersichtlich und kaum kommentiert. Kennt sich da jemand aus und könnte mir das ein wenig erklären?Was möchtest du jetzt erklärt haben? Den Beispielcode? Dann solltest du den posten. Oder die Kommunikation über die serielle Schnittstelle allgemein? Da gibt es in der MSDN-Library passende Artikel (falls es denn wirklich um Windows geht). Zitieren
DarkSchwabe Geschrieben 21. März 2005 Autor Geschrieben 21. März 2005 wow schnelle Antwort. Also ich programmiere mit Visual c++ auf einem Windows 2000 Server. Den ganzen Code von WinLirc zu posten ist vielleicht etwas zu viel des guten, deswegen vielleicht mal ein oaar Fragen von mir: WinLirc benutzt: Initialisierung: CreateEvent, SetCommState, SetCommMask, WaitCommEvent dann: ReadFile und dann WaitforMultipleObjects. Okay ich habe die Hilfe gelesen, aber nicht ganz verstanden was da nun wirklich passiert. Was macht denn WaitCommEvent und was macht WaitForMultipleObjects? Hoffe, daß das genug Informationen sind.. sonst fragt mich nochmal... ich weiß eben nicht so genau wie ich fragen soll *smile* vielel Dank, Gruß... P.s.: ich habe einen Teil des Codes als txt angehängtcodedatei.txt Zitieren
Vicious Geschrieben 22. März 2005 Geschrieben 22. März 2005 Hallo, habe auch erst in C++ angefangen... Ich fand die Beispiele in den Lernbüchern auch blöd, deshalb hab ich mir was praxisnahes gesucht: Das Steuern des IR-Empfängers mit WinLIRC Du brauchst für dein Projekt die "WS2_32.lib" (für die Kommunikation zwischen WinXP und der IR-Modul) Ich hab mir noch zusätzlich ein Interface mit 8 LEDs an die parallele Schnittstelle gehängt um kleine Programme auf Tastendruck zu testen Macht echt Fun, kann ich nur empfehlen... Hier ein Beispiel Code: #include <winsock2.h> // <- wichtiger Header von der Winsock Bibl. #include <iostream> #include <conio.h> #include <sstream> //für std::string #include <stdio.h> #include "LptTools.h" // paralleler Schnittstellentreiber (ab Win2000 benötigt) void main() { int i, key, port=0; unsigned short addr[3]; // Treiber initialisieren LptDetectPorts(i,addr,3); if(addr[port]==0) { std::cout << "\n\n Der Port ist nicht vorhanden !\n" << std::endl; getch(); return; } if(!LptInit()) { std::cout << "\n\n Der Treiber ist nicht installiert !\n" << std::endl; getch(); return; } // Winsock Bibliotek initialisieren WSADATA wsaData; if( WSAStartup(MAKEWORD(2,0),&wsaData) != 0) { std::cout << "Socket Initialization Error. Program aborted!" << std::endl; getch(); return; } // socket erzeugen SOCKET lhSocket; lhSocket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP ); if(lhSocket == INVALID_SOCKET) { std::cout << "Invalid Socket " <<GetLastError()<< ". Program Aborted!" << std::endl; getch(); return; } // socket verbindung herstellen int gPort = 8765; // der Port zum WinLIRC Server SOCKADDR_IN lSockAddr; memset( &lSockAddr, 0, sizeof(lSockAddr) ); lSockAddr.sin_family = AF_INET; lSockAddr.sin_port = htons( gPort ); lSockAddr.sin_addr.s_addr = inet_addr( "127.0.0.1" ); // da der WinLIRC Server ja auf dem gleichen Rechner laeuft, // wie das Programm hier, geben wir den Local Host an! int lConnect; lConnect = connect( lhSocket, (SOCKADDR *)&lSockAddr, sizeof(SOCKADDR_IN) ); if(lConnect != 0) { std::cout << "Connect Error. Program aborted" << std::endl; getch(); return; } // von der Sockeverbindung lesen char value = 0; LptPortOut(port,0,value); std::cout << "-= Start =-" << std::endl; while( true ) { char lesePuffer[ 256 ]; int receivedBytes = recv( lhSocket, lesePuffer, sizeof(lesePuffer), 0 ); lesePuffer[ receivedBytes ] = 0; std::istringstream fernin( lesePuffer ); std::string hexCode; // Aufteilen der Ausgabe von WinLIRC int Wiederholung; std::string TastenName; std::string FersteuerungsName; fernin >> hexCode; fernin >> std::hex >> Wiederholung; fernin >> TastenName; fernin >> FersteuerungsName; std::cout << "TastenName: " << TastenName << std::endl; std::cout << "FersteuerungsName: " << FersteuerungsName << std::endl; std::cout << "Wiederholung: " << Wiederholung << std::endl; if( Wiederholung == 0 ) { if( TastenName == "off" ) // Wenn die Taste "off" gedrueckt wird, werden alle LEDs ausgeschaltet und das Programm velassen { std::cout << "Ende." << std::endl; value = 0; LptPortOut(port,0,value); return; } else if( TastenName == "on" ) // Toggelt alle LEDs { if (value == 0) { value = 255;} else { value = 0;} std::cout << "PowerOn" << std::endl; } else if( TastenName == "1" ) // LED #1 toogeln { std::cout << "Taste 1" << std::endl; value ^= 1; } else if( TastenName == "2" ) // LED #2 toogeln { std::cout << "Taste 2" << std::endl; value ^= 2; } else if( TastenName == "3" ) // LED #3 toogeln { std::cout << "Taste 3" << std::endl; value ^= 4; } // usw... so viele Tasten wie man halt mit WinLIRC definiert hat LptPortOut(port,0,value); //senden der Parameter an die LPT-Schnittstelle } } closesocket( lhSocket ); //schließen der SOcketverbindung return; } [/PHP] Um das alles rauszubekommen und letztendlich auch zum Laufen zu bringen, hat 2 Tage gedauert... Wie gesagt, hab ja noch nicht viel Erfahrung! Aber ich finde sowas ist schon mal echt eine praxisnahe Aufgabe mit spaßigem Erfolgserlebnis Wen es interessiert, kann cih noch ein Prgramm posten, welcehs das Interface mit der Tastatur steuert... So mit Lauflichtfunktion, Frequenz, Richtungswechsel... Spielerei halt Hoffentlich konnte ich dir weiterhelfen! Gruß Robert Zitieren
DarkSchwabe Geschrieben 22. März 2005 Autor Geschrieben 22. März 2005 Hört sich ja interessant an. Aber wenn ich es richtig verstanden habe, dann ist dein Programm ein Client für WinLirc oder? Also du muß auch einen WinLirc Server haben. richtig? ich würde das ganze gerne ohne WinLirc machen, habe aber leider garkeine Doku und kaum Erfahrung mit so Sachen. Gruß Zitieren
Vicious Geschrieben 22. März 2005 Geschrieben 22. März 2005 Aber wenn ich es richtig verstanden habe, dann ist dein Programm ein Client für WinLirc oder? Richtig. Also du muß auch einen WinLirc Server haben. richtig? Auch richtig. ich würde das ganze gerne ohne WinLirc machen, habe aber leider garkeine Doku und kaum Erfahrung mit so Sachen. Warum? Was spricht gegen WinLIRC? Es gibt glaub ich keine einfachere Möglichkeit, Tasten einer Fernbienung zu belegen und sie von einem Client aus aufzurufen Zitieren
DarkSchwabe Geschrieben 22. März 2005 Autor Geschrieben 22. März 2005 Hmm okay, werde mal schauen ob ich das mit dem Clientenbeispiel von dir hinbekomme.Schaden kanns ja nicht . Wenn ich Zeit habe kann ich es dann ja immernoch so machen wie ich es ursprünglich wollte. Woher bekomme ich denn die "LptTools.h" ? Danke Gruß Zitieren
Vicious Geschrieben 22. März 2005 Geschrieben 22. März 2005 Wenn ich Zeit habe kann ich es dann ja immernoch so machen wie ich es ursprünglich wollte. Yup, würde ich auch sagen Woher bekomme ich denn die "LptTools.h" ? Entweder von google wie ich oder du wartest darauf, das ich mal Langeweile hab, und ihn dir schicke Aber unter uns: Ich würde es mit Google probieren, geht schneller... Wer weis wann mir langweilig wird Gern geschehn! Gruß Zitieren
DarkSchwabe Geschrieben 22. März 2005 Autor Geschrieben 22. März 2005 Danke für den googlelink *g* VErsuche mich gerade dran, bekomme aber noch einige Fehler (Linkfehler, Nichtaufgelöste externe Symbole bei den LPt Funktionen, fehlt wohl noch eine Lib oder so). Hast du ein kleines Projekt das du mir schicken könntest wenn es dir mal langweilig ist? :floet: Und du hast deinen Infrarotempfänger auf dem Paralellenport oder? Wäre super. Zitieren
Vicious Geschrieben 22. März 2005 Geschrieben 22. März 2005 Danke für den googlelink *g* hab mir auch viel Mühe mit gegeben :floet: Hast du ein kleines Projekt das du mir schicken könntest wenn es dir mal langweilig ist? :floet: Hmm... Wenn die Bezahlung stimmt :mod: (ich lieebe diesen Smiley *g*) Scherz... Mal schaun was sich machen lässt, ja? Und du hast deinen Infrarotempfänger auf dem Paralellenport oder? Nein, ich hab meinen Empfänger an der seriellen Schnittstelle und das INTERFACE an der paralellen... Noch akzeptiert WinLIRC nur die paralelle, auch nicht mit Adapter Zitieren
DarkSchwabe Geschrieben 22. März 2005 Autor Geschrieben 22. März 2005 Mal schaun was sich machen lässt, ja? Dachte du hast vielleicht schon ein kleines Progi rumliegen. Wäre auf jeden Fall super wenn ich da was kleines hätte. Weil ehrlich gesagt blick ichs nicht so ganz... grmll.... Irgendwie brauche ich immer gute Beispiele um das zu verstehen... Nur so zum Verständnis, du läßt dann im Hintergrund WinLirc Server laufen und dann noch dein Programm wo den Comport abruft oder? Kommen sich die 2 Programme nicht in die Quere? Du hast von irgendwelchen Beispielen in lernbüchern erzählt... in welchen Büchern gibts denn dazu was? Thx Bis dann grüße Zitieren
Vicious Geschrieben 22. März 2005 Geschrieben 22. März 2005 Stop stop stop... Du verstehst da einiges falsch glaub ich Dachte du hast vielleicht schon ein kleines Progi rumliegen. Wäre auf jeden Fall super wenn ich da was kleines hätte. Weil ehrlich gesagt blick ichs nicht so ganz... grmll.... Irgendwie brauche ich immer gute Beispiele um das zu verstehen... Ja, ich hab dir doch schon ein Beispiel geschrieben?! Bloß das du halt als "Endgerät" kein Interface hast Es gibt auch Plugins für WinLIRC, für Winamp z.B.... Schau dir mal die Website an, da stehts! Dort findest ud auch die .dll für Winamp Nur so zum Verständnis, du läßt dann im Hintergrund WinLirc Server laufen und dann noch dein Programm wo den Comport abruft oder? Kommen sich die 2 Programme nicht in die Quere? Hanoi du Seggele! ("Seggele" ist in keinster Weise ein schlechtes Wort ) Das ist doch das gewollte Prinzip! Ein Server-Client Programm! Der Server hält die ganzen Infos für den Client zur Verfügung... Dazu musst du in C++ halt eine Socket-Verbindung aufbauen. Siehe vorherigen Beitrag von moi... :mod: (schon wieder der smiley *g* kanns einfach net lasse) Also nochmal: Du hast ja die WinLIRC.exe! Das ist deine serverseitige Software. Die läuft im Hintergrund und wartet darauf von einem Client Anforderungen zu bekommen... In dieser Server-Software machst du deinem Rechner auch erstmal deine Fernbedienung bekannt und jeden einzelnen Knopf darauf! Somit muss du auch jedem Knopf manuell einen Namen zuweisen! (Du erinnerst dich an meinen Quelltext: if (tastenname == "on")... ) Jetzt hast du ja schon durch die Winsocket-Verbindung dein Client-Programm mit dem Server "bekannt" gemacht... Demnach könntest du z.B. anstatt einem Interface auch DOS-Befehle auf einen Tastendruck legen...? Capice? Du hast von irgendwelchen Beispielen in lernbüchern erzählt... in welchen Büchern gibts denn dazu was? Dazu gibts kein BUch... Zumindest kenn ich keins... Ich hab erst das "Anfangen, Anwenden, Verstehen - C++Programmierung lernen" (ISBN: 3827313422) gelesen und dann mit den Übungsaufgaben angefangen! Das was du hier an meinem Beispielcode siehst, hab ich mir wie gesagt ja auch ausn Fingern saugen müssen Ähm, was genau willst du eigentlich mit deiner Fernbedienung anstellen? Zitieren
DarkSchwabe Geschrieben 22. März 2005 Autor Geschrieben 22. März 2005 Stop stop stop... Du verstehst da einiges falsch glaub ich Na jetzt aber hallo. Da hast du recht. ich habs echt nicht geblickt. Die ganzen Portgeschichten die du in deinem Beispiel machst beziehen sich auf dein LedAusgabe.... Mensch bin ich mal wieder langsam heute. Deswegen hab ich mich auch gewundert wieso Server und Client gleichzeitig auf den Port zugreifen sollen/wollen... Okay. Also du hast eine Socketverbindung zum WinLRC Server aufgebaut und so weiter..gut. Das schaue ich mir heute abend oder morgen früh nochmal in Ruhe an. Ich mail dann wieder was *fg* Hast du zufällig ICQ? Im Prinzip müßte aber auf eine ähnliche Weise wie du auf deine LEds schreibst auch das Auslesen des Infrarotgerätes klappen oder? Ähm, was genau willst du eigentlich mit deiner Fernbedienung anstellen? Ich studiere und will die Fernbedienung in ein Programm einbinden. Im Prinzip gehts nur darum, eine TAste abzufragen, damit eine VErsuchsperson ein Startzeichen geben kann. Zitieren
Vicious Geschrieben 22. März 2005 Geschrieben 22. März 2005 Da hast du recht. Ich weis... :floet: Ich mail dann wieder was *fg* Hast du zufällig ICQ? Kein Problem: 328910558 Im Prinzip müßte aber auf eine ähnliche Weise wie du auf deine LEds schreibst auch das Auslesen des Infrarotgerätes klappen oder? Versteh ehrlich gesagt deine Frage nicht Was meinst du mit Auslesen? Du weist ja, das der IR-Reciever nur Daten empfangen kann, nicht verschicken! Ein reiner Empfänger... Vergleichbar mit ner Freundin: Du steckst Kohle rein, bekommst aber nix dafür! :cool: (Hats hier eigentlich auch Frauen im Forum?? öhm... Falls ja: :byby: Sorry :floet: ) Im Prinzip gehts nur darum, eine TAste abzufragen, damit eine VErsuchsperson ein Startzeichen geben kann. "Versuchsperson"?? Macht ihr perverse Experimente mit Fernbedienungen oder wie :beagolisc Spaß... Was meinst ud mit Startzeichen? Zitieren
DarkSchwabe Geschrieben 22. März 2005 Autor Geschrieben 22. März 2005 Versteh ehrlich gesagt deine Frage nicht Was meinst du mit Auslesen? Du weist ja, das der IR-Reciever nur Daten empfangen kann, nicht verschicken! Ein reiner Empfänger... Vergleichbar mit ner Freundin: Du steckst Kohle rein, bekommst aber nix dafür! :cool: (Hats hier eigentlich auch Frauen im Forum?? öhm... Falls ja: :byby: Sorry :floet: ) ja weiß ich ja. Aber der Empfänger schickt die Daten die er bekommt ja auch über den Comport wo mein IR Empfänger dran ist. Das mit der Freundin.. naja da muß man schon aufpassen :cool: "Versuchsperson"?? Macht ihr perverse Experimente mit Fernbedienungen oder wie :beagolisc Spaß... Was meinst ud mit Startzeichen? *grinsel* ne ernsthafte Forschung sozusagen. Sollte es sein *g* Also es geht einfach drum daß es Versuche mit mehreren Personen gibt die Über Sprache gesteuert wird. Aber damit der PC weiß, daß jemand nun anfangen will was zu sagen brauchen wir die Fernbedienung. Man könnte das sicher auch anders machen, aber eine Fernbedienung wäre nett und wenn ich weiß wie das geht, kann ich das ja auch woanders mal verwenden. Für mich ist das ganze eigentlich ein Praktikum. P.s.: melde mich nachher wenn ich daheim bin mal mit dem ICQ Zitieren
Vicious Geschrieben 22. März 2005 Geschrieben 22. März 2005 Also es geht einfach drum daß es Versuche mit mehreren Personen gibt die Über Sprache gesteuert wird. Aber damit der PC weiß, daß jemand nun anfangen will was zu sagen brauchen wir die Fernbedienung. Man könnte das sicher auch anders machen, aber eine Fernbedienung wäre nett und wenn ich weiß wie das geht, kann ich das ja auch woanders mal verwenden. Für mich ist das ganze eigentlich ein Praktikum. P.s.: melde mich nachher wenn ich daheim bin mal mit dem ICQ Hört sich cool an! :uli Ich werd erst so um 7 daheim sein, hab heut meinen langen Tag :marine Bis dann. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.