Hallo liebe Community,
ich wälze schon seit etlichen Tagen verschiedenste Tutorien und weitere Quellen, aber es scheint so, dass ich ein paar Tipps von den Profist brauche
Ich bin gerade dabei ein C++ Programm zu basteln, das auf die Serielle Schnittstelle zugreift und von dort Daten eines Arduinos (Mikrokontrollerboard, arduino.cc/) liest.
Das Programm läuft im Terminal ohne GUI schon ganz gut (siehe Anhang C++ Serial). Ankommende Daten lese ich mit den Funktionen in der Klasse "CSerial" ein und speichere sie in zwei Integer Variablen namens "nick" und "roll", wie das im genauen funktioniert ist eigentlich irrelevant. Wichtig ist nur, dass ich "nick" und "roll" mit "getNick()" und "getRoll()" in der Main abrufen kann:
Alles anzeigen
Im Terminal sehe ich zumindest plausible Daten, also gehe ich davon aus, dass der Code in "CSerial.cpp" und "CSerial.h" stimmt.
Jetzt möchte ich "CSerial.cpp" und "CSerial.h" benutzen und eine GUI drumrum basteln. Zu meiner Schande muss ich gestehen, dass ich wenig bis gar keine Ahnung von Cocoa und Objective-C habe. Die Tutorien, die ich bisher durchgearbeitet haben, brachten mich nicht sonderlich weiter, wahrscheinlich wäre ein Buch nicht schlecht.
Das XCode-Projekt, das ich bis jetzt fertig gebracht habe, befindet sich ebenfalls im Anhang (QuadroGui.zip). Es sind noch keine wirklichen Funktionalitäten programmiert worden, das meiste dient nur zu Testzwecken.
Jedenfalls möchte ich die Funktionalität, die mir das Terminal bot, auf die GUI übertragen. Ich versuche deshalb die "nick" und "roll" Datenwerte auf eine NSTextView, auf einen Schieberegler oder auf ein NSTextField auszugeben, wenn ich auf den Button "receive" drücke.
Alles anzeigen
Leider funktioniert es kein bisschen, das Programm hängt sich sogar auf, wenn ich auf "receive" drücke. Und ich bin mit meinem Latein am Ende.
So wie ich das verstanden habe, kann ich C++ Klassendefinition einfach mit Objective-C Code mischen. Das sollte doch keine Probleme machen, oder?
Letztendlich sollen die Daten, die der Arduino auf die Serielle Schnittstelle sendet, in Echtzeit angezeigt und aktualisiert werden. Momentan erwarte ich einen neuen Datensatz alle 100ms an der Seriellen Schnittstelle. Von der GUI erwarte ich deshalb, dass sie mir die neuen Daten immer in Echtzeit anzeigt sobald "receive" gedrückt wurde. Und sobald "send" (oder ein anderer Button) gedrückt wird, soll die Kommunikation beendet werden und keine Daten mehr angezeigt werden.
Ich hoffe einfach, dass sich jemand von euch die Mühe macht und vielleicht über meinen Programmcode schaut. Komm grad einfach nicht weiter. Mir würden auch schon generelle Tipps und Tricks für den Umgang mit Cocoa reichen.
Vielen Dank und viele Grüße
Matthias
ich wälze schon seit etlichen Tagen verschiedenste Tutorien und weitere Quellen, aber es scheint so, dass ich ein paar Tipps von den Profist brauche

Ich bin gerade dabei ein C++ Programm zu basteln, das auf die Serielle Schnittstelle zugreift und von dort Daten eines Arduinos (Mikrokontrollerboard, arduino.cc/) liest.
Das Programm läuft im Terminal ohne GUI schon ganz gut (siehe Anhang C++ Serial). Ankommende Daten lese ich mit den Funktionen in der Klasse "CSerial" ein und speichere sie in zwei Integer Variablen namens "nick" und "roll", wie das im genauen funktioniert ist eigentlich irrelevant. Wichtig ist nur, dass ich "nick" und "roll" mit "getNick()" und "getRoll()" in der Main abrufen kann:
Quellcode
Im Terminal sehe ich zumindest plausible Daten, also gehe ich davon aus, dass der Code in "CSerial.cpp" und "CSerial.h" stimmt.
Jetzt möchte ich "CSerial.cpp" und "CSerial.h" benutzen und eine GUI drumrum basteln. Zu meiner Schande muss ich gestehen, dass ich wenig bis gar keine Ahnung von Cocoa und Objective-C habe. Die Tutorien, die ich bisher durchgearbeitet haben, brachten mich nicht sonderlich weiter, wahrscheinlich wäre ein Buch nicht schlecht.
Das XCode-Projekt, das ich bis jetzt fertig gebracht habe, befindet sich ebenfalls im Anhang (QuadroGui.zip). Es sind noch keine wirklichen Funktionalitäten programmiert worden, das meiste dient nur zu Testzwecken.
Jedenfalls möchte ich die Funktionalität, die mir das Terminal bot, auf die GUI übertragen. Ich versuche deshalb die "nick" und "roll" Datenwerte auf eine NSTextView, auf einen Schieberegler oder auf ein NSTextField auszugeben, wenn ich auf den Button "receive" drücke.
Quellcode
- CSerial mySerial;
- - (IBAction)receive:(id)sender {
- mySerial.readBuffer();
- int nick = mySerial.getNick();
- int roll = mySerial.getRoll();
- NSString* nickstr = [NSString stringWithFormat:@"%d", nick];
- NSString* rollstr = [NSString stringWithFormat:@"%d", roll];
- [textField setString:nickstr];
- [slider_roll setIntValue:nick];
- [text_d setStringValue:nickstr];
- [text_i setStringValue:rollstr];
- usleep(10);
- }
Leider funktioniert es kein bisschen, das Programm hängt sich sogar auf, wenn ich auf "receive" drücke. Und ich bin mit meinem Latein am Ende.
So wie ich das verstanden habe, kann ich C++ Klassendefinition einfach mit Objective-C Code mischen. Das sollte doch keine Probleme machen, oder?
Letztendlich sollen die Daten, die der Arduino auf die Serielle Schnittstelle sendet, in Echtzeit angezeigt und aktualisiert werden. Momentan erwarte ich einen neuen Datensatz alle 100ms an der Seriellen Schnittstelle. Von der GUI erwarte ich deshalb, dass sie mir die neuen Daten immer in Echtzeit anzeigt sobald "receive" gedrückt wurde. Und sobald "send" (oder ein anderer Button) gedrückt wird, soll die Kommunikation beendet werden und keine Daten mehr angezeigt werden.
Ich hoffe einfach, dass sich jemand von euch die Mühe macht und vielleicht über meinen Programmcode schaut. Komm grad einfach nicht weiter. Mir würden auch schon generelle Tipps und Tricks für den Umgang mit Cocoa reichen.
Vielen Dank und viele Grüße
Matthias
