ich schreibe gerade die erste C# Form und stoße hier auf ein kleines Problem.
Ich habe über ein DropDown Menü mir die Möglichkeit geschaffen, den verfügbaren Port sowie die Baudrate einzustellen. Da klappt alles wunderbar.
Nun habe ich ein bar trackBars angelegt. Nun habe ich das Problem, dass die Daten an den Arduino nicht richtig gehandelt werden. Wenn ich die trackBars ziehe, werden die Werte im Arduino nicht geändert.
Wenn ich jetzt auf die Leiste mit der Maus oder den Slider über die Pfeiltasten/PageUp/Down ändere klappt es.
Habe ich eventuell doch den falschen EventHandler drin?
xy.Designer.cs
//
// trackBar0
//
this.trackBar0.LargeChange = 1;
this.trackBar0.Location = new System.Drawing.Point(92, 9);
this.trackBar0.Name = "trackBar0";
this.trackBar0.Size = new System.Drawing.Size(104, 45);
this.trackBar0.TabIndex = 0;
this.trackBar0.ValueChanged += new System.EventHandler(this.trackBar0_ValueChanged);
µC in C# wäre mir neu. Es geht um die Visualisierung/Bedienung vom PC. Processing sagte mir letzte mal überhaupt nicht zu. Da ich Visual Studio 2013 sowieso wegen dem Arduino auf dem Rechner hatte, habe ich es mal versucht mit C# als Windows Form (siehe Bild)
Im Gegensatz zum Arduino kann man in VisualStudio wunderbar mit Debugger arbeiten.
Habe ich eventuell doch den falschen EventHandler drin?
Wird trackBar0_ValueChanged() aufgerufen?
Macht es was es soll?
Wenn du zwei verschiedene Event-Handler hast, einer geht, der andere nicht, sollte das von dir selbst am besten zu beantworten sein.
ich habe eine kleine Statusleiste unten eingebaut, die mir den zuletztgesendeten Wert anzeigt. Wird nur aufgerufen, wenn Daten geschickt und der COM offen ist.Das passt alles wunderbar.
Ich glaube, den Fehler andersweitig gefunden zu haben. Das würde auch erklären, wieso teil Putty nicht immer die kompletten Werte übertragen hat. Da war es möglich, dass Zeichen von 4 stelligen Int Wert verloren gingen. Denke es hängt mit dem seriellen Lesen zusammen. Die kommt nicht schnell genug hinterher. Ich hatte mal etwas. Hab da soweit ich weiß noch einen Sketch, muss ich nachher mal schauen.
Denke es hängt mit dem seriellen Lesen zusammen. Die kommt nicht schnell genug hinterher.
In der Regel ist der Arduino schneller als die Serielle Übertragung.
Einfach in jedem loop Durchlauf ein Zeichen lesen, falls eins da ist.
Wenn es das oder ( osder sonst ein Ende-Kennzeichen ) ist: Bearbeiten was vorher gekommen ist.
Ja, so hatte ich das. War eigentlich zur Trennung von Feldern, aber die Abfrage auf \0 war auch mit drin und hat den index zurückgesetzt.
Habe bislang Werte codiert 0xYFF, wobei Y die Codierung angab und FF den Wert von 0..255. Werde es evtl so machen, dass ich alle Werte übertrage. Kann mit einer Auflösung von 16 Werten leben. Ansonsten werden 2 Hex Zahlen pro Ding übertragen für die 256 Werte. Trotzdem danke, werde nachher mal sehen, wie das aussieht.
War eigentlich zur Trennung von Feldern, aber die Abfrage auf \0 war auch mit drin...
Habe bislang Werte codiert 0xYFF, wobei Y die Codierung angab und FF den Wert von 0..255. Werde es evtl so machen, dass ich alle Werte übertrage. Kann mit einer Auflösung von 16 Werten leben. Ansonsten werden 2 Hex Zahlen pro Ding übertragen für die 256 Werte.
Das verstehe ich vermutlich nicht richtig.
Der Vorteil von ASCII-Übertragung ist, dass man es leicht testen/simulieren kann.
Ein '\0' wird dabei normalerweise nicht übertragen.
Dein sendData sendet z.Zt. Integer-Zahlen als Dezimalzahlen - Text.
Mein Vorschlag: Davor ein Kennbuchstabe, welcher Wert das ist, danach ein Endezeichen ( neue Zeile )
Geht natürlich statt Dezimal auch als HexZahlenText, egal eigentlich.
Aber einfacher ist, es so zu übertragen wie du es am PC siehst, finde ich.
Beispiel:
Modus: "M7"
Farbton: "F240"
...
Damit kriegst du leicht - und einigermassen merkbar zum Simulieren und Testen - deine z.Zt. 8 Werte übertragen.
Wo liegt hier das Problem, dass er Daten schluckt? Die Daten werden als String von der Windows Form gesendet mit vorherigen Convert.ToString(int);
Werde den Wertebereicht von FF auf F reduzieren, da ich diese Feinabstufen überhaupt nicht benötige für die Sachen.
Wie lange wartet Serial.parseInt(), bis die Zahl komplett angekommen ist ?
In der Reference zu Serial bzw. Stream.parseInt steht nix.
Da würde ich einfach mal sowas machen
if (Serial.available() > 0) {
delay (11); // Zeit für 10 Zeichen bei 9600 Bd
int num = Serial.parseInt();