Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

13.05.2020, 09:06

Komunikation zwischen Arduino und Unity

Guten Morgen,
habe eine kurze Fragen. Versuche gerade einen Arduino mit Unity komunizieren zu lassen.
Grudsätzlich funktioniert das auch schon ganz gut, also ich kann strings und Zahlen vom Arduino zur Gameengine senden und umgekehrt.
Mein Problem ist aber jetzt, dass ich wenn ich mehrere Variablen verschicken will, diese irgendwie identifizieren können muss.
Ich hätte da erst mal an einen String gedacht der als erstes den Namen der Variable beinhaltet und erst dann den Wert.
Man müsste dann in Unity noch den String durchsuchen(z.B.: string:"Button01(1)" dann den string auf "Button01" durchsuchen und die Zahl "1" auslesen.
Bin mir aber erstens nicht ganz sicher ob das wirklich funktioniert bzw wie man in C# strings durchsuchen kann.
Vielleicht fällt auch jemandem eine bessere Idee ein.

Danke schon mal im voraus. :D

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

2

13.05.2020, 09:39

In C# haben Strings eine Methode 'contains' womit du einen String durchsuchen kannst. Zusätzlich gibt es 'startsWith' womit du gucken kannst ob ein String mit einem bestimmten Substring beginnt. Viel einfacher wäre es aber doch wenn du IDs senden würdest. Jede Nachricht könnte mit einem Byte/Int beginnen. Button01('1') könnte dann so aussehen dass du erst die ID für Button01 sendest und danach den Wert 1 verschickst. Wie das ganze umgesetzt wird hängt aber davon ab was du genau vor hast.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

3

13.05.2020, 12:12

Danke erst mal für die schnelle Antwort.

Mein Vorhaben ist es mehrere 3-Achsen Beschleunigungssensoren am Körper anzubringen und dadurch einen VR-Anzug zu bauen.
So sieht erst mal der Plan aus, was daraus wird ist dann die andere Frage. :rolleyes:

Ich habe jetzt ein kurzes Program geschrieben, in dem ein einziger string vom Arduino an Unity gesendet wird.
Der enthält dann schon alle Daten und das ist warscheindlich schneller, als für jedenen Wert einen neuen Konsoleneintrag erstellen zu müssen.

Also so hätte ich das jetzt mal gemacht. Außer es gibt noch Verbesserungsvorschläge.

Hier der Code:


Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
using System;
using System.Diagnostics;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            //string der aus dem COM port ausgelesen wird:
            string data = "00123456,01789,02101112";

            //data-string splitten:
            var dataSplit = data.Split(',');

            //jetzt die gesplitteten strings durchgehen:
            foreach(string s in dataSplit)
            {
                int sice = s.Length;
                string ID = null;
                float value = 0;

                //ID und Wert separieren:
                ID = s.Substring(0, 2);
                value = float.Parse(s.Substring(2, sice - 2));
                
                //ID überprüfen und ausgeben:
                switch(ID)
                {
                    case "00":
                        Console.Write("Erste Variable: ");
                        break;
                    case "01":
                        Console.Write("Zweite Variable: ");
                        break;
                    case "02":
                        Console.Write("Dritte Variable: ");
                        break;
                    default:
                        Console.Write("Falsche ID erhalten!");
                        return;
                }

                //Wert ausgeben:
                Console.WriteLine(value);
            }

            Console.WriteLine("\nDaten wurden erfolgreich ausgegeben.");

            return;
        }
    }
}

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Benedikt« (13.05.2020, 12:19)


Werbeanzeige