INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
C# - Ard. Leonardo - SerialWrite USB Probleme
21.05.2014, 16:15
Beitrag #1
Sad C# - Ard. Leonardo - SerialWrite USB Probleme
Hallo zusammen,

Aufgabestellung:

C# kommuniziert mit dem Leonardo über die USB Schnittstelle.
C# schickt eine Nachricht "Links Klick" an den Leonardo, dieser erkennt dieses und führt diesen dann auch aus.
Im Speziellen handelt es sich hier um 2 hintereinander folgende Klicks, welche um ein gewisses Delay verzögert werden.

Bspl:

// C# Teil-Code

serialPort1.Write("lk"); // lk = Links Klick
System.Threading.Thread.Sleep(delay); //Verzögerung
serialPort1.Write("lk"); // zweiter links Klicks

// Leonardo Teil-Code

if(Serial.available())
{
String nachricht;
while(Serial.available() > 0)
{
nachricht += char( Serial.read() );
}

if(nachricht == "lk")
{
Mouse.press(MOUSE_LEFT);
delay(50);
Mouse.release(MOUSE_LEFT);
}
}

Anmerkung:

Mir ist bewusst, dass der Leonardo bereits ein "Mouse.klick" Event hat, jedoch wurde dieser nicht immer verlässlich ausgeführt (auf beiden Systemen)... Deswegen habe ich es wie obig zu sehen, gelöst.

Ich habe 2 Notebooks, mit jeweils Windows 7 installiert. Auf dem einem Home Basic [vereinfacht mit A bezeichnet] und auf dem anderen Profesional [vereinfacht mit B bezeichnet], jeweils 64 Bit. Diese haben beide den gleichen Prozessor Core i5 und gleich viel Arbeitsspeicher 6 GB, jedoch unterscheiden Sie sich in der Grafikkarte, A hat eine Nvidia und B eine ATI. Beide Notebooks wurden bereits mit CPU und Grafikkarten Benchmarks zu 100% ausgelastet, es laufen beide stabil. Notebook B hat jedoch keine Tastatur mehr integriert, da dort mal Kaffee drüber kam und gewisse Tasten nicht mehr funktionierten, dadurch habe ich sie komplett ausgebaut und abgesteckt vom Mainboard.

Ziel ist es nun, in einer Online 3D Anwendung, 2 Klicks auszuführen, welche um ein gewisses Delay verzögert werden. Auf Notebook A funktioniert alles einwandfrei, bei Notebook B kann es passieren, dass der zweite Klick merklich später stattfindet als berechnet.

Ich habe zur Fehleranalyse bereits eine LED am Leronardo toggln lassen wenn ein Klick stattfindet, also sehe ich ob der Arduino richtig funktioniert, und ja das tut er, habe aus Zweifel auch bereits einen anderen Leonardo ausprobiert, hier dasselbe Problem.

Das Delay wird im C# richtig berechnet, und der Arduino führt die Klicks die er bekommt auch aus, also sobald er den Befehl bekommt, "Klick" klickt er auch.

Jetzt kann es nur ein Problem mit der Verbindung von Notebook zum Leonardo sein. Habe bereits das USB Kabel von System A genommen, jedoch besteht das Problem weiterhin, die Firewall ist bei beiden Systemen deaktiviert und Anti Virus Software ist auch deinstalliert.

Im Bios habe ich mich auch bereits umgesehe, aber da kann ich nur USB Ports blockieren, jedoch sind diese eh alle freigeschaltet gewesen.

Was ich noch hinzufügen möchte ist, dass Notebook B deren Touchpad nicht funktioniert.

Ich habe auch bereits alles USB Ports durchgewechselt, aber an dem liegt es auch nicht. Chipsatztreiber habe ich auch den originalen von der Asus Seite installiert.

Im Gerätemanager wird noch meine alte Tastatur angezeigt, welche ich ausgebaut habe, habe auch probiert diese zu deinstallieren, jedoch installiert sich diese nach einem Neustart wieder von selber. Kann es seine, dass mein Mainboard diese fehlende Tastatur immer abfragt und er dann zeitweise beim Senden über USB Problem bekommt ?

Aus lauter Verzweiflung habe ich mir heute auch so einen USB Hub (mit seperater Stromversorgung) gekauft, da ich dachte, dass der Arduino die USB Schnittstelle mit der Versorgung ziemlich belastet, und dadurch gewisse Verzögerungen auftretten.... nur leider ist der Reiter "Serieller Port" im Arduino Programm Grau hinterleget, wenn ich den Leonardo über den USB Hub an das Notebook anschließe...

Bitte um Hilfe, bin mit meinem Latein am Ende....
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.05.2014, 16:37
Beitrag #2
RE: C# - Ard. Leonardo - SerialWrite USB Probleme
Hi,
irgendwie verstehe ich nicht so ganz, was denn eigentlich das Problem ist. Kannst Du das nochmal deutlich sagen?
Ich wundere mich, dass es überhaupt funktioniert. Eigentlich müsste das "nachricht += char( Serial.read() );" so schnell sein, dass immer nur ein Zeichen ankommt und nachricht nie "lk" wird. ...oder hast Du uns ein delay() oder sowas unterschlagen?
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.05.2014, 17:08 (Dieser Beitrag wurde zuletzt bearbeitet: 22.05.2014 17:59 von rkuehle.)
Beitrag #3
RE: C# - Ard. Leonardo - SerialWrite USB Probleme
Hallo hansjürgen,

die Antwort steckt (wie fast immer) schon (teilweise) in der Frage:
Zitat: Kann es seine, dass mein Mainboard diese fehlende Tastatur immer abfragt und er dann zeitweise beim Senden über USB Problem bekommt ?
Ja und Ja Exclamation
Du hast zwar die Tastatur ausgebaut, aber nicht den Tastaturcontroller. Daher wird die Tastatur auch immer noch im DeviceManager angezeigt.
Problem dabei: der Controller wartet auf Statussignale von der Tastatur selbst, die bekommt er jedoch nicht. Irgendwann generiert der Controller ein Timeout und gibt den Interrupt wieder frei. Bis das jedoch passiert braucht es eine "Weile" und solange werden die Interrupts der anderen Geräte (zB. USB Controller) nicht abgefragt. Dies egal ob inzwischen dort ein Signal angekommen ist oder nicht.
Evtl. reicht es wenn du im BIOS "Halt on All Errors But Keyboard" setzt. Versuche mal im DeviceManager die Tastatur zu deaktivieren, nicht zu deinstallieren.
Einen Betrieb ohne Tastatur und zugehörigem Controller gibts normalerweise nur bei Servern.

@Thorsten: Die aufgezeigte Schleife funktioniert durchaus!

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.05.2014, 00:10
Beitrag #4
RE: C# - Ard. Leonardo - SerialWrite USB Probleme
Supi, danke für diese Antwort, erleichtert mich sehr...

Ich habe im Internet nach einer Asus Pro7ajk Tastatur ausschau gehalten, und eine bestellt Smile

Werde diese die Tage einbauen und euch Bescheid geben ob dies das Problem löst und endlich alles fehlerfrei über USB übertragen wird Wink

Bin so happy, endlich mal ein Lösungsansatz, der einfach logisch klingt !

Danke euch.

Ich halte euch auf dem Laufenden Smile
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.06.2014, 00:30
Beitrag #5
RE: C# - Ard. Leonardo - SerialWrite USB Probleme
Hallo wie versprochen melde ich mich nochmal.

Also anscheinend lag es wirklich an der fehlenden Tastatur...

Nun funktioniert wieder alles Wink

Eine andere Frage ist aufgekommen.

Gibt es Sensoren mit dennen man zum Beispiel eine handvoll Pixel am TFT Bildschirm von außen, also direkt vor dem TFT, messen kann ?

Stellt euch das Ping Pong Spiel aus meiner Zeit vor, also wo der Ball von links nach rechts gespielt wird... Angenommen der Ball fliegt immer gerade von links nach rechts und umgekehrt. Und ich will z.b. nun ertasten, wann der Ball z.b. die mitte des Spielfeldes erreicht hat. Programmtechnisch geht das leider sehr zu lasten der CPU...

Deswegen möchte ich es gerne von außen probieren, also einen "Helligkeitssensor" direkt auf die mitte des Spielfeldes ausgerichtet um eben ertasten zu können, wann sich etwas ändert, sprich wann der Ball genau in das Tastfeld des Sensors gekommen ist.

Das Problem ist, es ist ziemlich zeitkritisch und exakt muss es sein. Hätte den Sensor dann direkt an den Arduino Leonardo angeschlossen.

Was sagt ihr dazu ? was könnt ihr mir für Sensoren empfehlen ?

Lg

Hansjürgen
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.06.2014, 01:12 (Dieser Beitrag wurde zuletzt bearbeitet: 07.06.2014 01:12 von rkuehle.)
Beitrag #6
RE: C# - Ard. Leonardo - SerialWrite USB Probleme
Hallo hansjürgen,
Zitat:Also anscheinend lag es wirklich an der fehlenden Tastatur...
Nun funktioniert wieder alles
Ich liebe es wenn es funktioniert Smile
Zu deiner Frage könnte das hier ein Lösungsansatz sein: http://forum.arduino.cc/index.php?topic=181629.0
Dort auch gleich der erste Link. Oder du nimmst halt Fototransistoren.

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.06.2014, 11:08
Beitrag #7
RE: C# - Ard. Leonardo - SerialWrite USB Probleme
Danke für die schnelle Antwort.

Ich werde mich mal mit den Phototransitoren versuchen Smile

lg

Hansjürgen
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
Question Heizölstand messen - Probleme dave1204 11 4.466 07.01.2015 09:02
Letzter Beitrag: Thorsten Pferdekämper
  Lichtstärke [Lux] und Temperatursteuerung [°C] mit Leonardo PeterErde 0 938 01.07.2014 16:23
Letzter Beitrag: PeterErde
  Arduino leonardo Lina 0 1.051 03.05.2014 15:42
Letzter Beitrag: Lina
  Anfänger hat Probleme gagafurtz 7 3.918 06.12.2013 19:28
Letzter Beitrag: gagafurtz

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste