Zum Inhalt springen

IR Empfänger nutzen


Empfohlene Beiträge

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ß

Link zu diesem Kommentar
Auf anderen Seiten teilen

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. Wegen
WinLirc
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).

Link zu diesem Kommentar
Auf anderen Seiten teilen

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ängt

codedatei.txt

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :D

Wen es interessiert, kann cih noch ein Prgramm posten, welcehs das Interface mit der Tastatur steuert... So mit Lauflichtfunktion, Frequenz, Richtungswechsel... Spielerei halt :P

Hoffentlich konnte ich dir weiterhelfen!

Gruß

Robert

Link zu diesem Kommentar
Auf anderen Seiten teilen

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ß

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn ich Zeit habe kann ich es dann ja immernoch so machen wie ich es ursprünglich wollte.

Yup, würde ich auch sagen :P

Woher bekomme ich denn die "LptTools.h" ?

Entweder von google wie ich :D

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 :P

Gern geschehn! Gruß

Link zu diesem Kommentar
Auf anderen Seiten teilen

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? :D :floet:

Und du hast deinen Infrarotempfänger auf dem Paralellenport oder?

Wäre super.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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? :D :floet:

Hmm... Wenn die Bezahlung stimmt :mod: (ich lieebe diesen Smiley *g*)

Scherz... :D

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 :rolleyes:

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :D )

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 :rolleyes:

Ähm, was genau willst du eigentlich mit deiner Fernbedienung anstellen? :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Da hast du recht.

Ich weis... :floet:

:D:D:D

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 :P

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Versteh ehrlich gesagt deine Frage nicht :P

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...