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");
}
}
}
Lesezeichen