die Feinheiten, ob auf Multicore (wie Raspi) oder Singlecore Prozessor (wie Aduino) braucht einen Anfänger nicht zu interessieren, den interessieren nur die passenden Libs.
Für Arduino gibt es die Scheduler Lib in 2 Versionen, eine nur dür den Due, die andere auch für andere Arduinos, und für beide gibt es etliche Beispiel-Codes..
Aber Multithreading ist schwääääre Kost, wenn man Anfänger ist, da würde ich nicht unbedingt gleich meine ersten Schrritte mit machen.vielleicht solltest du erstmal lesen lernen,wir reden hier ausschließlich über WELCHE ARDUINO LIBS ?
pack dir an deine eigene nase und such die schuld nicht bei anderenstatt hier großkotzig rumzugiften!
du bist einfach lernresistent
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
es gibt 10000 Aruino Libs, die MT alle auf verschiedene Weise machen, daher habe ich nach der GENAUEN, SPEZIELLEN Arduino Lib gefragt, um die hier geredet wird.
Ich habe 2 Scheduler Libs genannt, aber es sind nicht die einzigen, und selbst die arbeiten unterschiedlich.
oh sorry, dann war der 2te Post von mir falsch interpretiert worden, das kam durch deine CAPS SCHREIBEN IRGENDWIE SARKASTISCH RÜBERes gibt 10000 Aruino Libs, die MT alle auf verschiedene Weise machen, daher habe ich nach der GENAUEN, SPEZIELLEN Arduino Lib gefragt, um die hier geredet wird.
primär ging es mir nur um deinen ersten Post, dein 2ter kam einfach nur sarkastisch rüber im kontext, weil du vorher ungelesen einen meiner posts schlecht geredet hast ohne auch nur einmal mit der wimper zu zucken statt nichts dazu zu schreiben denn er war einfach hohl, diffamierend und irreführend
NACHTRAG
was deine libs angeht, das ging mir in dem moment am allerwertesten vorbei denn auch eine lib rettet dich nicht davor eine monster loop() zu schreiben
sowas wird unleserlich und wegen MT eine lib zu nehmen ist wie kanonen auf spatzen in diesem fall ... WARUM fragst du sage ich das, dann ließ doch JETZT bitte endlich mal meine beispielhafte Erklärung durch, dann wird dir entweder alles klar oder du tust mir leid. Aber du verlässt dich bisher eh lieber auf libs als das Prinzip zu verstehen und beschwerst dich dass die lib dein spezielles problem nicht vorhergesehen hat.
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
ok ich versuche es noch mal, ich kann schon C Programiren zumindest habe ich das mal gelernt ist aber schon ne weile her und fange wieder an es zu üben daher nehmme ich jedes kleine projekt um zu lernen ich habe noch nicht das verständnis für C++ aber das kommt schonoch jetzt zu meinem projekt da ich für mein Dremell eine drehzahlregelung brauche habe ich ein HW-95 mit L298N drauf und ein Arduino NANO einem Poti später mal 3 7segment anzeigen einem taster die drehzahl wird in % ausgegeben.
also der taster soll zur drehrichtungs änderung und fileicht noch zur quwitirung dinen wen ich das poti auf sagen wir mal 80% stelle und die regelung aus schalte dann nach nem monat wider einschalten möchte und er sofor loss dreht das ist wie mit einer flex die man vergist aus zu machen und sie in die steckdose steckt deshal diese schutz funktion das man erst das poti auf 3% oder weniger stellen muss damit der motor los leuft.
zum program ablauf war mein gedanke wie schafe ich es in der haupt schleife zu prüfen ob das poti richtig steht und das nur einmal beim starten des programs das heist wen das poti auf 0% steht ist alles ok und er kert in die haupt funktionen das program braucht nicht mehr zu prüfen ob das poti unter 3% steht
habe schreiben erst heute gelernt.
bin legasteniger.
by Ferdinand.
also von mir war überhaupt nichts sarkastisch gemeint, und ich habe keinen Post schlecht geredet.
Man kann nur nicht über Multithreading und Multitasking und Scheduler und yield reden, wenn man nicht sagt, auf welches MT Prinzip und welche Libs man sich bezieht.
Es gibt Multithreading libs, die sind preemptiv, und welche, die sind kooperativ. Preemptive brauchen überhaupt kein yield.
Bei Kooperativen, die yield brauchen, kann diesen Zweck oft auch irgendein delay übernehmen (delay(1) oder delay(100)), oder u.U. auch nicht.
Timeslice Scheduling benutzen sie aber überwiegend alle, egal ob auf Single oder MultiCores oder preemptiv oder kooperativ.
Also muss man sich erst einmal auf die Lib einigen, die man verwenden und auf die man sich beziehen will, denn wie gesagt, jede funktioniert anders.
Aber keine ist für blutige Programmieranfänger geeignet, denn diese sind oft noch schon mit Single-Threads überfordert.
@Ferdinand:
Dein Projekt verstehe ich nicht bis ins Detail, und auch alles drumherum mit flex und Steckdose ist mir nach deiner Beschreibung absolut nicht klar.
Es klingt aber so, als ob du überhaupt kein Multithreading brauchtst, sondern als ob es reicht, dass du in der loop einfach hintereinander
das Poti ausliest,
diesen Wert in einen Bereich von 0 bis 255 "mapst",
den Button ausliest,
wenn er gedrückt und dann wieder losgelassen wurde, dann die Motorrichtung umkehrst,
und dann den Poti-Wert per analogWrite in einen pwm-Wert für den Motor umwandelst
und dieses pwm und die Motorrichtung an deine Motor-H-Brücke übergibst.
Dann evt eine kurze delay-Pause zum Verschnaufen,
und dann die loop wieder von vorn.
Zumindest dazu ist Multithreading nicht nötig, und als Anfänger würde ich auch die Finger davon lassen: Lerne erst mal die Standard-Verfahren in nur 1 Loop.
Wenn du dann fit bist, kannst du dich vlt in ein paar Monaten mit der Scheduler Lib für deinen Arduino-Typ befassen und da die Multithreading-Beispiele für viele Loops nebeneinander durcharbeiten - aber noch nicht jetzt.
Und dann versuch nicht alles auf einmal zu lösen, sondern in kleinen Schritten, also erstmal die Poti-pwm-Sache allein, dann den Btn und die Richtungsumkehr allein, und dann beides zusammen.
@Ferdinand
Dein Problem:
"zum program ablauf war mein gedanke wie schafe ich es in der haupt schleife zu prüfen ob das poti richtig steht und das nur einmal beim starten des programs das heist wen das poti auf 0% steht ist alles ok und er kert in die haupt funktionen das program braucht nicht mehr zu prüfen ob das poti unter 3% steht"
Dazu muss die while-Schleife bei setup() rein, nicht bei loop().
Dieser Code muss bei setup() rein, am besten ganz am Ende:
Was macht der Code:Code:poti_prozent = 4; sicherheit = false; while( poti_prozent > 0 ) { poti_Value = analogRead(POTI); poti_prozent = map(poti_Value, 0,1023, 0,100); } sicherheit = true;
poti_prozent wird auf 4 gesetzt, damit - egal in welchem Fall - die while-Schleife mindestens ein Mal ausgeführt wird, um das Poti abzufragen. Entweder prüfst Du in der while-Schleife auf >3 oder >0. Bei >0 bleibt der so lange in while, bis poti_prozent = 0 ist. Bei while (poti_prozent > 3) bleibt der solange in der while-Schleife, bis poti_prozent kleiner oder gleich 3 ist. Dazu muss in der while-Schleife nur das Poti abgefragt werden. Sobald das Poti den von Dir gewünschten Wert erreicht, wird die while-Schleife beendet (und Du kannst einen Status sicherheit = true; setzen. Im Hauptprogramm loop() musst Du dann nur noch sicherheit prüfen, ob das true oder false ist: if (sicherheit==true)... oder if(sicherheit==false)... ).
Man kann das mit der Variable sicherheit auch weglassen. Weil der solange in der while-Schleife drin bleibt, bis das Poti einmal richtig steht. Erst dann fängt er überhaupt mit loop() an. Das heißt: in loop() ist sicherheit dann immer true. Da es dort dann sowieso immer true wäre, kann man es dann weg lassen.
Das war es, viel Erfolg!![]()
Lesezeichen