Forum: PC-Programmierung Problem mit der Seriellen Schnittstelle


von Tim L. (thecorp)


Lesenswert?

Guten Tag,
Zu allererst, ich benutze einen Arduino Uno.
ich habe ein Programm, welches in C# geschrieben ist, welches mit dem 
Mikrokontroller über die Serielle Schnittstelle kommuniziert. Wenn ich 
bei meinem C# Programm auf einen Button klicke, so soll der Servo der 
angeschlossen ist, sich auf die bestimmte Position drehen. Doch wenn ich 
auf den Button klicke, spielt der Servo total verrückt. Erst dreht er 
sich, bleibt stehen, zuckt ganz kurz, und fährt danach wieder auf 0 
zurück. Ich bin ehrlich gesagt gerade am verzweifeln. Am Servo liegt es 
nicht. Es kann nur an dem Code des C# programmes, oder an dem Code des 
Arduinos liegen.

******* Arduino Programm
#include <Servo.h>

Servo s;

void setup() {

  Serial.begin(9600);
  s.attach(9);
}

void loop() {

   int incomingByte = Serial.read();

   if(incomingByte > 0)
   {
     s.write(incomingByte);
   }

   delay(500);
}


********** C# Programm
        SerialPort serialPort1;
        public Form1()
        {
            InitializeComponent();
            CheckForIllegalCrossThreadCalls = false;
            serialPort1 = new SerialPort("COM3", 9600);
            serialPort1.Handshake = Handshake.None;
            serialPort1.RtsEnable = false;
            serialPort1.Open();
        }

        // Stellung auf 0°
        private void button1_Click(object sender, EventArgs e)
        {
            serialPort1.Write("1\r\n");
        }

        // Stellung auf 90°
        private void button2_Click(object sender, EventArgs e)
        {
            serialPort1.Write("90\r\n");
        }

        // Stellung auf 180°
        private void button3_Click(object sender, EventArgs e)
        {
            serialPort1.Write("180\r\n");
        }

        private void Form1_FormClosing(object sender, 
FormClosingEventArgs e)
        {
            serialPort1.Close();
        }

Zudem muss ich sagen dass ich noch ein ziemlicher Neuling bin was die 
programmierung mit dem Arduino betrifft.

lg

von Karl H. (kbuchegg)


Lesenswert?

Tim Lappe schrieb:

>             serialPort1.Write("1\r\n");

Du schickst ja einen String weg!

....

den musst du schon auch hier

    int incomingByte = Serial.read();

auch wieder als String empfangen und dann in eine Zahl umwandeln.

Alternativ auf dem PC

    serialPort1.Write( 1 );

bzw. dann eben für die anderen 'Zahlen' entsprechend. Dann gehen auch 
wirklich Bytes mit genau diesen Werten über die Schnittstelle.

von Tim L. (thecorp)


Lesenswert?

Haha danke funktioniert. War ein Dummer fehler. Hab das jetzt in Bytes 
verschickt und es funktioniert danke :-)

lg

von bluppdidupp (Gast)


Lesenswert?

Tim Lappe schrieb:
> CheckForIllegalCrossThreadCalls = false;

...es riecht nach Pfusch ;D

von Reinhard Kern (Gast)


Lesenswert?

Tim Lappe schrieb:
> Hab das jetzt in Bytes
> verschickt und es funktioniert danke :-)

Hat aber keine Zukunft - wie willst du die Stellung 270 als Byte senden?

Gruss Reinhard

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.