Hier ist mein Code, es wird in einem Timer alle 5ms gesendet. habe es auch schon mit 100ms usw. probiert, gleiches problem.
Code:using System; using System.Linq; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using Sensors; namespace G_Sensor { public partial class Form1 : Form { public Form1() { InitializeComponent(); } bool Freigabe = false; IGSensor mySensor = GSensorFactory.CreateGSensor(); private void myTimer_Tick(object sender, EventArgs e) { GVector myVector = mySensor.GetGVector(); bool DeadZone = true; string Fahrtrichtung = "", Lenkrichtung = "", RichtungKetteLinks = "", RichtungKetteRechts = ""; Int16 GeschwindigkeitKetteLinks = 0, GeschwindigkeitKetteRechts = 0; double VerteilungKetteLinks = 0, VerteilungKetteRechts = 0; double X = Math.Abs(myVector.X * 10000); double Y = Math.Abs(myVector.Y * 10000); double XMax = 80000; double YMax = 50000; if (X > XMax) X = XMax; if (Y > YMax) Y = YMax; if (myVector.X < 1 && myVector.X > -1 && myVector.Y < 1 && myVector.Y > -1)DeadZone = true;else DeadZone = false; if (myVector.X >= 1) Fahrtrichtung = "Vor"; if (myVector.X <= -1) Fahrtrichtung = "Zurück"; if (myVector.Y >= 1) Lenkrichtung = "Rechts"; if (myVector.Y <= -1) Lenkrichtung = "Links"; if (myVector.X < 1 && myVector.X > -1) Fahrtrichtung = "Drehen"; VerteilungKetteLinks = X; VerteilungKetteRechts = X; if (Fahrtrichtung == "Vor") { RichtungKetteLinks = "Vor"; RichtungKetteRechts = "Vor"; } if (Fahrtrichtung == "Zurück") { RichtungKetteLinks = "Zurück"; RichtungKetteRechts = "Zurück"; } if (Lenkrichtung == "Links") { VerteilungKetteLinks = Y / 2; VerteilungKetteRechts = Y / 2; if((XMax-X)<VerteilungKetteRechts) { VerteilungKetteRechts = VerteilungKetteRechts - (XMax - X); VerteilungKetteLinks = Y - VerteilungKetteRechts; } VerteilungKetteLinks = X - VerteilungKetteLinks; VerteilungKetteRechts = X + VerteilungKetteRechts; if (VerteilungKetteLinks < 0) VerteilungKetteLinks = 0; } if (Lenkrichtung == "Rechts") { VerteilungKetteLinks = Y / 2; VerteilungKetteRechts = Y / 2; if ((XMax - X) < VerteilungKetteLinks) { VerteilungKetteLinks = VerteilungKetteLinks - (XMax - X); VerteilungKetteRechts = Y - VerteilungKetteLinks; } VerteilungKetteRechts = X - VerteilungKetteRechts; VerteilungKetteLinks = X + VerteilungKetteLinks; if (VerteilungKetteRechts < 0) VerteilungKetteRechts = 0; } Int16 PWM_Min=115, PWM_Max=255; double Steigung, Y_Achsenabschnitt; Steigung = (XMax - 10000) / (PWM_Max - PWM_Min); Y_Achsenabschnitt = XMax - (Steigung * PWM_Max); GeschwindigkeitKetteLinks = (Int16)((Math.Abs(VerteilungKetteLinks) - Y_Achsenabschnitt) / Steigung); GeschwindigkeitKetteRechts = (Int16)((Math.Abs(VerteilungKetteRechts) - Y_Achsenabschnitt) / Steigung); if (DeadZone == true) { GeschwindigkeitKetteLinks = 0; GeschwindigkeitKetteRechts = 0; } if (Freigabe == true) { string a="", b="", c="", d=""; if (VerteilungKetteLinks < 0 && Fahrtrichtung =="Drehen") RichtungKetteLinks = "Zurück"; if (VerteilungKetteRechts < 0 && Fahrtrichtung == "Drehen") RichtungKetteRechts = "Zurück"; if (VerteilungKetteLinks > 0 && Fahrtrichtung == "Drehen") RichtungKetteLinks = "Vor"; if (VerteilungKetteRechts > 0 && Fahrtrichtung == "Drehen") RichtungKetteRechts = "Vor"; if (RichtungKetteRechts == "Vor") a = "1"; if (RichtungKetteLinks == "Vor") c = "1"; if (RichtungKetteRechts == "Zurück") a = "0"; if (RichtungKetteLinks == "Zurück") c = "0"; b = GeschwindigkeitKetteRechts.ToString("000"); d = GeschwindigkeitKetteLinks.ToString("000"); serialPort1.Write(a + b + c + d + "\r"); } } private void menuItem1_Click_1(object sender, EventArgs e) { serialPort1.Close(); mySensor.Dispose(); mySensor = null; Close(); } private void Form1_KeyDown(object sender, KeyEventArgs e) { if ((e.KeyCode == System.Windows.Forms.Keys.Up)) { // Up } if ((e.KeyCode == System.Windows.Forms.Keys.Down)) { // Down } if ((e.KeyCode == System.Windows.Forms.Keys.Left)) { // Left } if ((e.KeyCode == System.Windows.Forms.Keys.Right)) { // Right } if ((e.KeyCode == System.Windows.Forms.Keys.Enter)) { // Enter } } private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { Freigabe = true; pictureBox1.BackColor = Color.LimeGreen; } private void pictureBox1_MouseUp(object sender, MouseEventArgs e) { Freigabe = false; serialPort1.Write("10001000\r"); pictureBox1.BackColor = Color.White; } private void Form1_Load(object sender, EventArgs e) { serialPort1.PortName = "COM2"; serialPort1.Open(); serialPort1.Write("10001000\r"); } } }







Zitieren

Lesezeichen