Forum: Compiler & IDEs STM32 soll bestimmte Zeilen von einer .txt einlesen und verwenden


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von D. Z. (zoundgalaxy)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich möchte Zeile 2,4,6,8 und 10 einer .txt Datei (die auf dem Desktop 
gespeichert ist) einlesen, die Werte dann in int umwandeln, um sie dann 
zur Auswahl einer Switch Funktion zu benutzen.

Beispiel:

.txt Zeile 2: "1" -> Umwandlung zu int -> Switch: wählt Case 2 aus

Es passiert aber leider garnichts?!?

Wo ist nun der Fehler?

Code im Anhang:

PS: Zu einem späteren Zeitpunkt könnte es sein, dass ausgewählte Case 
Nummern auch wieder zurück gesendet werden sollen.

Beispiel:

Es wurde Case 2 von der .txt zugewiesen. Im Verlauf wird Case 4 durch 
drücken eines Tasters ausgewählt und soll nun in der .txt ausgetaucht 
bzw geupdatet werden.

: Bearbeitet durch User
von Irgend W. (Firma: egal) (irgendwer)


Lesenswert?

D. Z. schrieb:
> ReadLineFromFile("C:/Users/Zoundgalaxy/Desktop/functionList.txt"

Du hast wirklich ein komplettes Windowsbetriebssystem auf einem STM32 
implementiert?

von Wastl (hartundweichware)


Lesenswert?

D. Z. schrieb:
> Nachfolgend der Code:

Das ist ein längerer Sourcecode und der gehört in einen Anhang!
Solltest du wissen nachdem du schon 9 Jahre hier angemeldet bist.

Ist immer nachzulesen, bei jedem Post den man tun möchte:
1
Wichtige Regeln - erst lesen, dann posten!
2
    ........
3
    Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

von Sebastian R. (sebastian_r569)


Lesenswert?

D. Z. schrieb:
> ich möchte Zeile 2,4,6,8 und 10 einer .txt Datei (die auf dem Desktop
> gespeichert ist) einlesen, die Werte dann in int umwandeln, um sie dann
> zur Auswahl einer Switch Funktion zu benutzen.

Ähm. Wie genau denkst du, stellt sich der STM32 über USB am PC vor?
Und wie genau denkst du, kann ein USB-Gerät auf andere Speichermedien am 
PC zugreifen?


Ich denke, da bräuchtest du noch einmal die ein oder andere Grundlage zu 
USB Devices.

: Bearbeitet durch User
von J. S. (jojos)


Lesenswert?

Zweidimensionale Arrays, Pointer, das ließe sich drastisch reduzieren 
und variabler machen.

Also wenn das Lesen einer Desktopdatei gelöst ist…

Und den Codeanhang .c benennen.

: Bearbeitet durch User
von D. Z. (zoundgalaxy)


Lesenswert?

Der uC wird als HID am Rechner erkannt. Auch macht er alles andere, wie 
zum Beispiel:

Wenn ich dem uC sage:
functionNumber1 = 1 (Button welcher "a" am PC ausgeben soll)
functionNumber2 = 3 (Rotary Encoder welcher Vol up/down ausgeben soll)
functionNumber3 = 2 (Button wechselt direkt auf das erste geöffneten 
Programmen in der Taskleiste und zeigt es auf dem Display an)
functionNumber4 = 3 (Button wechselt direkt auf das zweite geöffneten 
Programmen in der Taskleiste und zeigt es auf dem Display an)
functionNumber5 = 3 (Button wechselt direkt auf das dritte geöffneten 
Programmen in der Taskleiste und zeigt es auf dem Display an)

Nun möchte ich, wie zuvor gesagt, über eine .txt, welche sich auf dem 
Desktop des PC´s befindet, die Werte der functionNumber1 -5 einlesen und 
später verändern können.

von Sebastian R. (sebastian_r569)


Lesenswert?

D. Z. schrieb:
> Nun möchte ich, wie zuvor gesagt, über eine .txt, welche sich auf dem
> Desktop des PC´s befindet

Wie viele kommerzielle Geräte kennst du, die in der Lage sind, per USB 
auf das Dateisystem eines Computers zuzugreifen?

Und denkst du nicht, es wäre ziemlich dumm vom Betriebssystem, einem 
USB-Gerät Zugriff auf das Dateisystem zu geben?

von Harald K. (kirnbichler)


Lesenswert?

Grundlagenkenntnisse? Ach, wozu. Wie wäre es, die Aufgabenstellung einer 
KI vorzutragen, vielleicht kann die ja was erhellendes beitragen.

-

Wo bleibt eigentlich der Hinz mit dem Popcorn?

von Norbert (der_norbert)


Lesenswert?

Harald K. schrieb:
> Grundlagenkenntnisse? Ach, wozu. Wie wäre es, die Aufgabenstellung einer
> KI vorzutragen, vielleicht kann die ja was erhellendes beitragen.

Harald, Harald <kopfschüttelnd>  ;-)

Das ist ein neuer Trend, nennt sich wunsch- oder auch traumbasierte 
Software-Entwickung. Der Knüller des 21. Jahrhunderts.

von Monk (Gast)


Lesenswert?

Harald K. schrieb:
> Wie wäre es, die Aufgabenstellung einer KI vorzutragen

Da bin ich gespannt, was dabei heraus kommt.

Meine Versuche dieser Art ergaben: Shit in -> gequirlter Bullshit out

Aber: Die KI sagt im Gegensatz zu diesem Forum nie "geht nicht" oder "ja 
aber". Stattdessen erzählt sie mit überzeugenden Worten, dass der 
Bullshit funktioniert. Sie erfindet sogar detaillierte Geschichten, wie 
und warum es angeblich funktioniert. Je mehr man nach fragt, umso tiefer 
gerät man in den Kaninchenbau.

von Sebastian R. (sebastian_r569)


Lesenswert?

Steve van de Grens schrieb:
> Die KI sagt im Gegensatz zu diesem Forum nie "geht nicht" oder "ja
> aber". Stattdessen erzählt sie mit überzeugenden Worten, dass der
> Bullshit funktioniert. Sie erfindet sogar detaillierte Geschichten, wie
> und warum es angeblich funktioniert.

Weil KI nichts mit Intelligenz oder Verständnis oder Logik zu tun hat. 
Es ist im Prinzip nur "Welches Wort ist nach dem vorherigen am 
wahrscheinlichsten".

von Daniel A. (daniel-a)


Lesenswert?

D. Z. schrieb:
> Ich möchte Zeile 2,4,6,8 und 10 einer .txt Datei (die auf dem Desktop
> gespeichert ist) einlesen
...
> PS: Zu einem späteren Zeitpunkt könnte es sein, dass ausgewählte Case
> Nummern auch wieder zurück gesendet werden sollen.

Das unpraktische an Dateien und Arrays ist, dass man nicht einfach so in 
der Mitte Einträge entfernen / einfügen, kann. Dann muss man nämlich den 
ganzen Rest danach auch noch verschieben.
Ist aber kein Problem, wenn man sowieso die ganze Datei einliest, und 
die ganze Datei am Ende wieder schreibt, wobei dann braucht es mehr 
Speicher.
Oder man könnte ein Format wählen, wo die Grösse der Einträge fix ist.

von D. Z. (zoundgalaxy)


Lesenswert?

So wie ich das vor hatte scheint es ja anscheinend nicht bzw. nur 
bedingt in Verbindung mit einem SD Slot zu gehen.

Was wäre denn eurer Meinung nach sinnvoller:

HID und CDC und somit über Virtuel Com,
oder habt ihr noch ne bessere Lösung?

Daten vom PC sind:
Zahlen von 0 bis 50 für die Switch Cases,
false/true für die Indicator Lights,
0 bis 255 für die RGB Indicator Lights,
Daten vom uC sind:
HID Usage Table 0x07, 0x08, 0x09,
Und hier und da Werte 0 bis 255

von Sebastian R. (sebastian_r569)


Lesenswert?

D. Z. schrieb:
> oder habt ihr noch ne bessere Lösung?

Du hast ja bislang noch nicht einmal beschrieben, welches Problem du 
damit lösen möchtest.

Wenn du Daten zwischen Controller und PC austauschen möchtest und auf 
dem PC auch eine entsprechende "Client Software" läuft, wäre ein Virtual 
COM Port tatsächlich eine Möglichkeit.

Wenn du den PC nur zur Konfiguration verwenden möchtest, kannst du mit 
dem Controller einen USB-Stick emulieren, auf dem dein Textfile mit den 
Konfigurationseinstellungen liegt. Theoretisch könnte man so auch Daten 
"live" austauschen ohne spezielle USB-Treiber.

von D. Z. (zoundgalaxy)


Lesenswert?

Sebastian R. schrieb:
> Du hast ja bislang noch nicht einmal beschrieben, welches Problem du
> damit lösen möchtest.

wie im Beitrag direkt darüber zu sehen ist:

Daten vom PC sind:
Zahlen von 0 bis 50 für die Switch Cases,
false/true für die Indicator Lights,
0 bis 255 für die RGB Indicator Lights,

Daten vom uC sind:
HID Usage Table 0x07, 0x08, 0x09,
Und hier und da Werte 0 bis 255

Der uC dient zur Steuerung diverser Software, deswegen auch HID.

Und um die "Client Software" werde ich mit großer Wahrscheinlichkeit 
sowieso nicht rumkommen. Mal abgesehen davon, dass ein kleinen GIF das 
Ganze auch Nutzerfreundlicher macht.

von Sebastian R. (sebastian_r569)


Lesenswert?

D. Z. schrieb:
> Der uC dient zur Steuerung diverser Software, deswegen auch HID.

Wir sind einen winzigen Schritt weiter.

Wenn sich das alles übner Hotkeys/Shortcuts machen lässt, emulier eine 
Tastatur/Maus. Braucht keine Treiber und keine PC-Software.

von Monk (Gast)


Lesenswert?

Angeblich können Web browser neuerdings nicht nur auf Netzwerk sondern 
auch auf COM Ports zugreifen.

Wenn das zutrifft, könnte der Mikrocontroller einen USB Speicherstik 
emulieren, auf dem eine statische HTML Seite mit Javascript liegt. Die 
Webseite könnte ein Formular zur Konfiguration deines Gerätes anzeigen 
und ein Werte mittels COM Port (USB CDC) an den Mikrocontroller senden.

Auch deine Client-Software zur Anzeige der Daten könnte in 
HTML/Javascript implementiert werden. Dadurch würde die Notwendigkeit 
entfallen, etwas installieren zu müssen. Und es wäre unabhängig von 
Gerät und Betriebssystem.

Ich habe das Verfahren noch nicht ausprobiert, steht noch auf meiner 
Wunschliste wenn sich dazu eine gute Gelegenheit ergibt.

von D. Z. (zoundgalaxy)


Lesenswert?

Sebastian R. schrieb:
> Wenn sich das alles übner Hotkeys/Shortcuts machen lässt, emulier eine
> Tastatur/Maus. Braucht keine Treiber und keine PC-Software.

Und wie sende ich dann Infos vom PC über HID an den uC?

sie weiter oben:

Daten vom PC sind:
Zahlen von 0 bis 50 für die Switch Cases,
false/true für die Indicator Lights,
0 bis 255 für die RGB Indicator Lights

von Motopick (motopick)


Lesenswert?

Frueher™ haette man sich ein winziges TSR (terminate and stay
resident) geschrieben, dass die Datei auf dem Filesystem geoeffnet,
und deren Inhalt per RS-232/IPX/IP extern zugreifbar gemacht haette. 
Fertig waere gewesen. :)

Das geht heute natuerlich auch noch.
Nur eben halt viiiiiiiel komplizierter.
Allein die Vorstellung, Kerberos auf einem so "winzigen" STM32
laufen zu lassen. Und der Zugriff per CIFS, wird auch nicht
gerade einfach werden...
Netzwerk braucht halt keine (zusaetzlichen) Treiber.
Mit USB-HID ginge das Ganze wohl auch. Aber nicht so schoen. :)

Die Speicherung der Daten in einer verzeigerten Liste auf dem
Controller ist da ja fast Pille-Palle.

P.S.
Wo liegt jetzt der "Gewinn" durch "zeitgemaesse" und "moderne"
Betriebssysteme?

: Bearbeitet durch User
von Harald K. (kirnbichler)


Lesenswert?

Motopick schrieb:
> Frueher™ haette man sich ein winziges TSR (terminate and stay
> resident) geschrieben, dass die Datei auf dem Filesystem geoeffnet,
> und deren Inhalt per RS-232/IPX/IP extern zugreifbar gemacht haette.
> Fertig waere gewesen. :)

Das kann man heute genauso handhaben, dazu braucht man kein grindiges 
DOS.

von D. Z. (zoundgalaxy)


Lesenswert?

Könnten wir bitte das früher vs heute und alles andere was hier nicht 
zielführend ist in anderen Threads klären und uns hier nur auf das 
Problem und dessen Lösung kümmern?

Kurz zusammengefasst:

Ich habe einen STM32, welcher von einem PC gesagt bekommt, welche 
Funktion jeder der 5 Switch Funktionen (mit je bis zu 50 Cases) 
ausgeführt werden soll. Zudem gibt es diverse Indicator LEDs, als auch 
RGB LEDs, welche sich bei verschiedensten Momenten mit dem „IST ZUSTAND“ 
des PCs abgleichen sollen.

Beispiel PC sagt:
LED1 ist true -> uC ist noch auf falls überprüft dies und ändert es auf 
true.
Gleiches gilt für die RGB LEDs.
Ein GIF könnte die Daten für die LEDs und andere Funktionen 
bereitstellen.
Über HID sende ich aktuell alle Ergebnisse der Cases (wenn ausgewählt) 
an den PC.

Frage: Was wäre die Sinnvollste Lösung und wenn vorhanden habt ihr einen 
Code, oder der gleichen der eure Lösung anschaulich zeigt/erklärt?

Sollten noch weitere Infos fehlen bitte freundlich darauf hinweisen und 
ich ergänze sie (sofern vorhanden) umgehend.  Danke für eure Hilfe.

von Monk (Gast)


Lesenswert?

D. Z. schrieb:
> Ich habe einen STM32, welcher von einem PC gesagt bekommt, welche
> Funktion ... ausgeführt werden soll.

OK, aber was hat das mit der Textdatei auf dem Dateisystem zu tun?

Befehle von einen (virtuellen) Seriellen Port annehmen und ausführen ist 
doch trivial. Was willst du denn dazu wissen?

> Was wäre die Sinnvollste Lösung

Wie gesagt: Einen (virtuellen) Seriellen Port zu nutzen

von Veit D. (devil-elec)


Lesenswert?

Hallo,

Steve van de Grens schrieb:
> D. Z. schrieb:
>> Ich habe einen STM32, welcher von einem PC gesagt bekommt, welche
>> Funktion ... ausgeführt werden soll.
>
> OK, aber was hat das mit der Textdatei auf dem Dateisystem zu tun?
>
> Befehle von einen (virtuellen) Seriellen Port annehmen und ausführen ist
> doch trivial. Was willst du denn dazu wissen?

Sein Problem ist Daten aus der Textdatei zu extrahieren und zu senden.

Idee, vielleicht mit Python.
https://www.python-lernen.de/dateien-auslesen.htm
https://www.python-lernen.de/csv-datei-einlesen.htm

Statt Ausgabe dann über Serial senden. Mit dafür angepassten Protokoll 
sollte das funktionieren.

: Bearbeitet durch User
von Motopick (motopick)


Lesenswert?

Harald K. schrieb:

> Das kann man heute genauso handhaben, dazu braucht man kein grindiges
> DOS.

Ich wette mal, dass du wie die ganzen "Anderen" auch, so ein
grindiges DOS auf deinem Rechner hattest, und immer verzweifelt
nach dem Backslash auf deiner deutschen Hausfrauentastatur
gesucht hast.

Ich konnte da wenigsten zwischen einem SCO Unix®, einem QNX
und einem DOS auswaehlen!

von Harald K. (kirnbichler)


Lesenswert?

Motopick schrieb:
> Ich wette mal

Und hast verloren. Aber sowas von gründlich.

> deutschen Hausfrauentastatur

Mein Gott, Du schaffst es, die eigene Peinlichkeit noch zu steigern.

Hast Du auch was zum Thema beizutragen oder musst Du Dich noch 'ne Weile 
darin suhlen, wie unendlich überlegen Du Dich Dir selbst fühlst?

von Chris V. (nagut)


Lesenswert?

D. Z. schrieb:
> Ein GIF könnte die Daten für die LEDs und andere Funktionen
> bereitstellen.

Was meinst Du mit "GIF" in diesem Kontext?
Das pixelbasierte Grafikformat meinst Du vermutlich nicht, aber auch 
keine andere gängige Bedeutung scheint zu passen.
https://de.wikipedia.org/wiki/GIF_(Begriffskl%C3%A4rung)


> Über HID sende ich aktuell alle Ergebnisse der Cases (wenn ausgewählt)
> an den PC.
> Frage: Was wäre die Sinnvollste Lösung

Sinnvoll ist immer das, was Du dann auch umsetzen kannst. Bidirektionale 
Kommunikation über den seriellen Port (das wäre dann die USB 
CDC-DeviceClass) wurde ja schon mehrfach genannt. Was hältst Du davon? 
Bist Du in der Lage, ein dafür nötiges Programm auf der PC-Seite zu 
schreiben? Und passt das zu Deinen Anforderungen?

Da Du auf Seite des Controllers ja die HID-DeviceClass schon hinbekommen 
hast: damit kann man auch (in begrenzten Rahmen) Informationen vom PC 
zum Device senden, siehe z.B. hier:
https://usb.org/sites/default/files/hut1_5.pdf#chapter.26
https://usb.org/sites/default/files/hut1_5.pdf#chapter.22

Für ein paar LEDs als Statusanzeigen könnte das reichen. Dafür müsstest 
Du aber auch auf dem PC ein Programm schreiben, was diese 
Status-Informationen sendet. Das ist nicht unmöglich, aber vermutlich 
musst Du dafür mehr anschauen/recherchieren/dazulernen als bei der 
Variante mit der seriellen Schnittstelle.

Einfach nur ein Beispiel von irgendwo kopieren und ohne allzuviel davon 
zu verstehen nur leicht abwandeln wird für Deine Anwendung vermutlich so 
nicht funktionieren.

von Harald K. (kirnbichler)


Lesenswert?

Chris V. schrieb:
> Einfach nur ein Beispiel von irgendwo kopieren und ohne allzuviel davon
> zu verstehen nur leicht abwandeln wird für Deine Anwendung vermutlich so
> nicht funktionieren.

Dochdoch, so funktioniert das heute. Da fragt man die KI, die schlägt 
einem was vor, und dann legt man los. So einfach ist das.

https://learn.microsoft.com/de-de/visualstudio/ide/ai-assisted-development-visual-studio?view=vs-2022

https://code.visualstudio.com/docs/copilot/overview

https://www.heise.de/news/Microsoft-veroeffentlicht-KI-Erweiterung-AI-Toolkit-fuer-Visual-Studio-Code-9726476.html


Wozu da noch mit völlig überflüssigen Grundlagen beschäftigen?

Warum überhaupt noch was lernen, es gibt doch "Information at your 
fingertips™" ...

von Chris V. (nagut)


Lesenswert?

Harald K. schrieb:
> Chris V. schrieb:
>> Einfach nur ein Beispiel von irgendwo kopieren und ohne allzuviel davon
>> zu verstehen nur leicht abwandeln wird für Deine Anwendung vermutlich so
>> nicht funktionieren.
>
> Dochdoch, so funktioniert das heute. Da fragt man die KI, die schlägt
> einem was vor, und dann legt man los. So einfach ist das.

Das ist mir nicht unbekannt, und oft genug kommt man damit auch 
erstaunlich weit (sowohl mit als auch ohne KI und nur mit copy/paste 
oder (slightly) educated-guessing).

Ich will das auch gar nicht schlecht machen. Die Welt wird komplexer und 
schnellebiger, und manchmal kann es wichtiger sein, schnell was halbwegs 
funktionierendes hinzubekommen als alles komplett verstanden zu haben.

Wenn die Anforderungen komplexer werden, kommt aber irgendwann der 
Moment, wo man das nicht mehr einfach von jemanden kopieren kann, der 
fast genau das gewünschte schon mal gemacht und mit der Allgemeinheit 
geteilt hat. Und da ist der TO meiner Meinung nach jetzt angekommen.


OnTopic: Manche benutzen für Bedien-Controller mit (etwas aufwändigerer) 
optischer Rückmeldung auch die Midi-DeviceClass.

von Harald K. (kirnbichler)


Lesenswert?

Chris V. schrieb:
> Die Welt wird komplexer und
> schnellebiger, und manchmal kann es wichtiger sein, schnell was halbwegs
> funktionierendes hinzubekommen als alles komplett verstanden zu haben.

s/alles komplett/überhaupt irgend etwas/

Darauf läufts immer häufiger hinaus.

von Monk (Gast)


Lesenswert?

Harald K. schrieb:
> Dochdoch, so funktioniert das heute. Da fragt man die KI, die schlägt
> einem was vor, und dann legt man los. So einfach ist das.

KI kann nur nachahmen, wie Affen. Neue Entwicklungen (wie das was hier 
gewünscht ist) kommen dabei nicht heraus.

von Harald K. (kirnbichler)


Lesenswert?

Steve van de Grens schrieb:
> Neue Entwicklungen (wie das was hier
> gewünscht ist) kommen dabei nicht heraus.

Die KI-Fanbois sehen das ganz anders.

(Ist Dein Sarkasmusdetektor im Urlaub?)

von D. Z. (zoundgalaxy)


Lesenswert?

Chris V. schrieb:
> Was meinst Du mit "GIF" in diesem Kontext?

GIF sollte eigentlich GUI heissen = Grafische Benutzeroberfläche....

Chris V. schrieb:
> Einfach nur ein Beispiel

Es wa auch eher auf jemanden gemünzt, der etwas ähnliches schon gemacht 
hat und eventuell ein TUT oder so hat/empfehlen kann, oder direkt helfen 
will/kann mit einem anschaulichen Beispiel.


Also, da es wenige alternativen gibt und hier leider immer wieder Ego´s 
aufeinander treffen, deren Beiträge leider nicht viel mit dem Thema zu 
tun haben, wird es auf die CDC Lösung hinaus laufen.

Wie oben schon einmal geschrieben:
Könnten wir bitte das früher vs heute und alles andere was hier nicht
zielführend ist in anderen Threads klären und uns hier nur auf das
Problem und dessen Lösung kümmern?

Und um es mal etwas deutlicher zu machen:

Harald K, wenn du etwas zielführendes zu diesem Thema beitragen 
möchtest, würde ich mich sehr darüber freuen. Falls nicht, dann bitte 
meide diesen Thread und verschone mich/uns mit unnötigen 
""sarkastischen"" Beiträgen. Und dies gilt auch für alle anderen.

Ich freue mich über jede Hilfe und nützliche Beiträge und danke euch 
auch dafür. Auch kann man mal vom Thema etwas abweichen, wenn dies dann 
aber auch wieder zur Lösungsfindung führt. Nur diese Sandkasten Parolen 
usw. nerven echt so langsam. Und nein ich will nicht zum Programmierer 
werden, 1000 Kurse besuchen oder oder oder...... Ich möchte einfach 
dieses Projekt umsetzen und mehr nicht. Ihr geht ja auch nicht in 
CAD-Foren und wir erwarten, dass ihr alles könnt. Im Gegenteil, wir 
setzen uns mit euch hin und über Discord oder der gleichen erarbeiten 
wir gemeinsam eine Lösung.

Und ja... ich zeichne dir was, du programmierst mir das... Funktioniert 
genauso wie, ich brauch hilfe bei eine Zeichnung.... dann und dann hab 
ich zeit, Gut?.... gut!.... und fertig. Aber diese unbegründete Arroganz 
mancher hier ist echt nicht normal.

Entschuldigt diese klaren Worte, aber das musste jetzt mal raus! Sollte 
sich jemand auf die Füße getreten fühlen entschuldige ich mich, rege 
aber auch gleichzeitig mal zum nachdenken an.

So lange rede kurzer Sinn.................

Also HID und CDC ist jetzt der Weg.
Hat jemand Erfahrungen zu genau diesem Bereich und möchte mich 
unterstützen, denn ich komme, wie gesagt, aus dem CAD Bereich und habe 
mit programmieren an sich nicht viel am Hut. Das was ich bis jetzt habe 
wurde über TUTs aufgebaut.

von Klaus (feelfree)


Lesenswert?

D. Z. schrieb:
> Könnten wir bitte das früher vs heute und alles andere was hier nicht
> zielführend ist in anderen Threads klären und uns hier nur auf das
> Problem und dessen Lösung kümmern?

Dann fang Du mal an. Ich verstehe nämlich noch nicht einmal die 
Problembeschreibung. Du bist nämlich mit deinen Switch/Cases schon 
mitten im Lösungsraum, und vermutlich da schon komplett falsch 
abgebogen.

Berschreib' doch einfach mal, was deine uC-Hardware schalten und 
auswerten kann, und was davon Du auf dem PC steuern und anzeigen lassen 
willst.

: Bearbeitet durch User
von D. Z. (zoundgalaxy)


Lesenswert?

Ich habe eine Reihe von Tastern, (Aus)-( Wechsel)- und sagen wir mal 
(Jalousie)-Schaltern, Joysticks und diverse andere Funktionen. Fasst 
alle haben mindestens 1 WS2812 RGB, welche per Farbcode (zb. Rot = AUS, 
Grün = AN, Blau = Funktionsfarbe 1, Gelb = Funktionsfarbe 2) ein 
optisches Feedback geben sollen. Andere Funktionen haben bis zu 20 
dieser LEDs. Jede dieser Funktionen ist in einem Case, welches je nach 
Funktionsnummer das gewünschte Case auswählt.

Somit können an 5 Positionen Steckmodule mit den jeweiligen Funktionen 
aufgesockelt werden und in einer GUI per Eingabe aktualisiert werden.

Beispielsweise habe ich auf dem ersten Steckplatz das Taster Modul, 
welches zb den Buchstaben „a“ wie eine Tastatur ausgeben soll. Nun muss 
es aber auf den Buchstaben „B“ geändert werden. Also tippe ich in der 
GUI, in das dafür vorgesehene Feld, den Buchstaben “B“ ein und dies soll 
dann in aktualisiert werden.

Oder

Beispielsweise habe ich einen  Jalousie-Schalter. Er kann nur Kontakt 
„a“ oder „b“ schließen, aber niemals beide gleichzeitig. Diese Funktion 
muss nun aber zu einem Joystick umgebaut werden. Also entferne ich die 
Jalousie Funktion vom Sockel und ersetze sie durch das Joystick-Modul. 
Durch Eingabe der Modul Nummer in das passende Feld, ändere ich das Case 
von dem Jalousie- zum Joystick Case.

Auch hier ist wieder das anpassen der Ausgabe und der LED erforderlich.

Kurz um:
GUI
Feld für Case Nummer (1-50)
Feld für Farbe  (Farbcode für An, Aus, Funktion1, Funktion 2,…..)
Feld für Ausgabe (a,b, c … Mute, Vol up/down, Taböffner………)
Feld für……

uC:
nimmt Wert von Feld für Case Nummer und wählt Case Funktion aus
nimmt Wert von Feld für Farben und aktualisiert diese in der Funktion
nimmt Wert von Feld für Ausgabe und aktualisiert diese in der Funktion
…..

Sprich ich möchte es so universal und erweiterbar wie möglich halten.

Problem ist: ich brauche den Code der HID und CDC vereint und mir die 
Daten vom PC einliest und gleichzeitig die Daten von Controller ausgibt. 
Zudem den Code für usbd_hid.c, die korrekten Werte für die usbd_hid.h, 
sowie alle anderen Files. Außerdem muss der Stm32f103 nun als HID oder 
CDC beim Erstellen des Projektes ausgewählt werden?

Ich hoffe das meintest du mit Beschreib doch mal……
Zumindest habe ich das jetzt so verstanden?!?

von Monk (Gast)


Lesenswert?

Bis daraus etwas mit nachvollziehbarer Struktur wird, dauert es wohl 
noch einige Wochen. Vorher würde ich weder programmieren noch löten.

von Klaus (feelfree)


Lesenswert?

D. Z. schrieb:
> Problem ist: ich brauche den Code der HID und CDC vereint und mir die
> Daten vom PC einliest und gleichzeitig die Daten von Controller ausgibt.

Vermutlich habe ich es immer noch nicht verstanden, aber ich würde da 
ein stinknormales Serielles Protokoll fahren (Der uC meldet sich als 
serielle Schnitttstelle und der PC sieht diese als COM-Port).
Das kann man von beiden Seiten aus problemlos senden und empfangen.

Dann überlegt man sich eine Codierung (Hin- und Rückrihtung getrennt), 
also sowas wie
Byte1 Case Nummer
Byte2-3 Farbcode
Byte4-5 Ausgabe
usw.

und ist eigentlich fast schon fertig.

von D. Z. (zoundgalaxy)


Angehängte Dateien:

Lesenswert?

So stelle ich mir die GUI vor ( ist jetzt nur mal schnell dahin 
gezeichnet).

Jedes der großen "+" Zeichen ist quassi ein Sockel, worauf ein Modul 
gesteckt werden kann (Taster-Modul, Schalter-Modul, 
Joystick-Modul......).

Klickt man nun auf das "+", öffnet sich ein Fenster, oder Dropdown Menü, 
welches alle Module aufliestet. Das ausgewählte Modul, oder die Eingabe 
der Case Nummer senden nun die Casenummer zum uC, der wiederum das 
passende Case der Switchfunktionm zuortnet.

Weiterhin können die Farben und Ausgabe in den Feldern darunter 
angegeben werden.

von D. Z. (zoundgalaxy)


Lesenswert?

Klaus schrieb:
> Vermutlich habe ich es immer noch nicht verstanden

Du bist meiner Meinung nach genau auf dem richtigen Weg und hast es 
verstanden.

von D. Z. (zoundgalaxy)


Lesenswert?

Steve van de Grens schrieb:
> Bis daraus etwas

Die PCB´s sind alle schon in KICAD fertig gezeichnet und sollten auch 
funktionieren. Im grunde genommen ein Bluepill mit ESD Protektion usw. 
sowie die Module. Lasse ich aber produzieren/löten. Aber auch erst dann, 
wenn ich einen funktionierenden Code auf meinem Breadboard Aufbau habe.

von Chris V. (nagut)


Lesenswert?

D. Z. schrieb:
> Ich habe eine Reihe von Tastern, (Aus)-( Wechsel)- und sagen wir mal
> (Jalousie)-Schaltern, Joysticks und diverse andere Funktionen. Fasst
> alle haben mindestens 1 WS2812 RGB,
> (...)
> Somit können an 5 Positionen Steckmodule mit den jeweiligen Funktionen
> aufgesockelt werden und in einer GUI per Eingabe aktualisiert werden.

D.h. Du willst sowas wie dieses Zeug hier selber bauen:
https://macprovideo.com/article/review-2/review-palette-a-modular-midi-controller/de
https://www.bonedo.de/artikel/special-waves-stellt-modularen-usb-midi-controller-mine-vor/
https://www.gearnews.de/superbooth-midi-controller-selbst-zusammenstellen-mit-intech-grid/



> Problem ist: ich brauche den Code der HID und CDC vereint und mir die
> Daten vom PC einliest und gleichzeitig die Daten von Controller ausgibt.

Das ist Möglichkeit 1). Man nennt sowas dann "Composit-Device" (siehe 
ggf. "What is difference between a composite USB device and a compound 
USB device?" in diesem FAQ:
https://www.microchip.com/en-us/products/interface-and-connectivity/usb/basic-usb-concepts-and-faqs

Dafür müsstest Du vorrangig lernen, wie man sowas auf dem Controller 
implementiert.


> Außerdem muss der Stm32f103 nun als HID oder
> CDC beim Erstellen des Projektes ausgewählt werden?
Das klingt danach, als hätte dort noch niemand vorgearbeitet. Du 
müsstest es also selber herausbekommen. Immerhin scheint der BluePill 
das grundsätzlich zu können, denn hier hat schon mal jemand MassStorage 
und CDC miteinander verheiratet:
https://github.com/viteo/STM32-BluePill-MSD-VCP


Andere Möglichkeiten wären noch:

2.) Nur HID
Dafür müsstest Du vorrangig lernen, wie die noch zu entwickelnde 
PC-Applikation Statusdaten an ein HID-Device sendet.

3.) Nur CDC
Dafür müsstest Du vorrangig lernen, wie die noch zu entwickelnde 
PC-Applikation Tastendrücke simuliert (um Deine anscheinend schon 
funktionierende Fernsteuerung der PC-Applikationen durch Tastendrücke 
umzusetzen, obwohl die Daten nun über die serielle Schnittstelle kommen)

4.) Nur MIDI
Dafür müsstest Du vorrangig lernen, wie die noch zu entwickelnde 
PC-Applikation MIDI-Devices ansprechen kann.


Alle diese Möglichkeiten haben ihre Vor- und Nachteile (an Nr. 4 ist 
z.B. ziemlich cool, dass sie nicht nur mit deinem Selbstbau-Board, 
sondern mit allen Midi-Controllern zusammen funktionieren kann - also 
super-universell!)

Normalerweise sucht man sich als Hobby-Entwickler nun das raus, bei dem 
man etwas lernen muss, dass einen am meisten interessiert, und man 
meint, dass man es auch hinbekommt.

Ich persönlich fände (1) doof, halte (3) für am einfachsten, (2) hätte 
für mich eher einen unterhaltsamen Wert (eine Tastatur mit Lichtorgel 
;), und umsetzen würde ich wohl (4).

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.