Hallo...
Warscheinlich wurde es hier schon oft geschrieben...
Bin neu hier und habe ein Problem...
Ich komme mit meinem Sketch nicht weiter.
Ich will, das der Schrittmotor anfängt zu drehen, sobald der Pin 13 ein
HIGH-Signal erhält und sobald das HIGH-Signal weg ist soll er weiter
drehen. Zusätzlich soll der Motor bei jedem Step intern gezählt werden
und sobald eine Summe von 200 Steps erreicht ist, soll er in den
Ruhemodus gesetzt werden und auf einen neuen Impuls warten.
void setup()
{
DDRB=0x0F;
PORTB=0x00;
}
int zeit;
int count=0;
void loop()
{
{
if (digitalRead(13)==1)
//Kein Plan zum stopen und counter einzusetzen
else
zeit=3;
PORTB=0x0A;
delay(zeit);
count=count+1;
PORTB=0x09;
delay=(zeit);
count=count+1;
PORTB=0x05;
delay(zeit);
count=count+1;
PORTB=0x06;
delay(zeit);
count=count+1;
if (count <200) // Schleife wiederholen ?!
}
}
Weis Jemand rat?
Gast
#6103856
Und was stimmt nun nicht? Außerdem ist der Code unlesbar so, benutz code tags
Gast
#6103860
Da fehlen außerdem mehrere geschweifte Klammern, das kann unmöglich kompilieren so
Ausserdem ist ein = zuviel.
Habe bisher keine Fehler. Motor dreht. Komme jedoch nicht auf die Lösung. Das Programm habe ich mit dem Handy hier hinein geschrieben, da ich kein Internet für'n Rechner habe. Währe trorzdem für eine brauchbare Lösung dankbar...
So sieht der Sket zur Zeit aus...
Gast
#6103886
Jan W. schrieb: > Habe bisher keine Fehler. Motor dreht. So wie das da steht, ist das kein gültiger C-Code, irgendwas verschweigst du also. Jan W. schrieb: > Komme jedoch nicht auf die > Lösung. Ah, eine Hausaufgabe also. Dann liefer doch wenigstens die tatsächliche Aufgabenstellung. Jan W. schrieb: > da ich kein > Internet für'n Rechner habe. Hotspot kennste? Auch ein abfotografierter Bildschirm mit dem wahren Code wäre besser als völlig falsch abgetippter. Helmut -. schrieb: > Ausserdem ist ein = zuviel. Bitte was?!
Gast
#6103889
Jan W. schrieb: > So sieht der Sket zur Zeit aus... Und das kompiliert? Schlag mal nach, wie die Klammern bei if...else in C gesetzt werden. So macht das keinen Sinn.
Gast
#6103906
Schon wieder: Code als Bildschirm-abfotografie. Nein! Gruss Chregu
Habe kein Internet für'n Rechner. Auch kein HotSpot oder so. Bin über 40 und kein Schuljunge mehr. Will einfach via Tastendruck das programm starten. Nach durchlaufen der angegeben und erreichten Countermenge soll er wieder darauf warten, das eine Taste gedrückt wird. Was ist daran jetzt verheimlicht? Mein Bildschirm ist ok. Als Beweis, das es MEIN Bildschirm ist, habe ich meinen Namen auf ein Blatt Paier geschrieben.
Gast
#6103914
Jan W. schrieb: > Weis Jemand rat? In der AN_8017 Atmel AppNote AVR446 - Linear speed control of stepper motor findest du ein bisschen Lesestoff und Code zu Beschleunigungs- und Bremsrampen mit Anhalten auf einer bestimmten Position aka nach bestimmter Schrittzahl: http://ww1.microchip.com/downloads/en/AppNotes/doc8017.pdf http://ww1.microchip.com/downloads/en/AppNotes/AVR446.zip
Gast
#6103923
Jan W. schrieb: > Was ist daran jetzt verheimlicht? Ganz einfach: Das ist kein gültiger C++ Code, kann also nicht kompilieren, kann also den Motor nicht betreiben. Was auch immer auf deinem Arduino o.ä. läuft, dieser Code ist es nicht.
Habe auf etwas einfacheres gehofft wie z.B. einen Sketch der mir erzählt, wie ich an die Counterdaten komme, welche in der Variabel abgelegt sind und diese ausgelesen werden können um den Motor oder das Programm zu stoppen. Dachte jetzt nicht, das ich hier mit Frequenzen und klein Omega arbeiten soll. Kreisfrequenzen passen da irgendwie nicht zu. Aber das hat man davon, wenn man als Neuling eine banale Frage stellt, wird alles hinterfragt und als eventueller Lügner/Heimlichtuer hingestellt... Macht man das bei einfachen Fragen so? Dachte, das hier geholfen wird...
Währe es in BASIC vom Commodore64, währe es für mich kein Problem aber dies hier ist anders. Der Aufbau, die Abfrage, und und und... Ist halt kein BASIC
c r schrieb: > Was auch immer auf deinem Arduino o.ä. läuft, dieser Code ist es nicht. Doch !
Gast
#6103963
Jan W. schrieb: > Wäre es in BASIC vom Commodore64, währe es für mich kein Problem aber > dies hier ist anders. Der Aufbau, die Abfrage, und und und... > Jan W. schrieb: > Ist halt kein BASIC Programmieren ist unabhängig von der (Programmier-)Sprache. Um das von die geschilderte Problem zu lösen, solltest du dir einen Ablaufplan aufmalen. Der gilt sprachübergreifend (zumindest für prozedurale Sprachen). Pseudocode: In der Loop: liegt am Pin High an? ==> setze einen Merker ist der Merker gesetzt? ==> mache nächsten Schrittmotor-Schritt (und das restliche Geraffel) wurde Schritt-Nummer 200 oder höher ausgeführt? ==> Setze Merker zurück Das darfst du jetzt als Ablaufplan aufmalen (Papier und Stift hast du ja offensichtlich).
Gast
#6103973
Kann noch jemand anderes einen Blick auf den Code werfen und mir bestätigen oder widersprechen, wenn ich sage, dass das kein syntaktisch korrekter C-Code ist? mMn ist der gesamte Code in der void loop() in einem sinnlosen Block eingeklammert (gut, das ist an der Stelle egal) dafür fehlen beim if...else sämtliche notwendigen Klammern. Wie kann das kompilieren?
Gast
#6103975
Helmut -. schrieb: > Ausserdem ist ein = zuviel. und wo soll das sein??
Gast
#6103983
Thomas R. schrieb: > Helmut -. schrieb: > Ausserdem ist ein = zuviel. > > und wo soll das sein?? Ich hoffe das soll ein Trollversuch sein. Wenn dann ist das ganze '==1' überflüssig
Gast
#6103987
Jan W. schrieb: > { > if (digitalRead(13)==1) müsste man schon mal gegeneinander tauschen
1 | |
2 | |
Jan W. schrieb: > else // hier fehlt eine "{" > zeit=3; > PORTB=0x0A; > delay(zeit); > count=count+1; > > PORTB=0x09; > delay=(zeit); > count=count+1; > > PORTB=0x05; > delay(zeit); > count=count+1; > > PORTB=0x06; > delay(zeit); > count=count+1; // und hier "}" Was natürlich sinnfrei ist, da immer alle vier Schritte azsgeführt werden. Ob das delay() auch mit Variablen funktioniert, weiß ich nicht, da ich sowas nicht benutzte (es sei denn, es handelt sich um das Delay eines RTOS/Betriebssystems).
Gast
#6103991
STK500-Besitzer schrieb: > Ob das delay() auch mit Variablen funktioniert Das tut es, zumindest der Teil müsste tun, was man erwartet.
Richtig formatiert - und das mach auch die Arduino-IDE, sieht es so aus:
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 | |
Und korrekt compiliert ird das nicht:
C:\Users\Dieter\Documents\Arduino\sketch_jan12a\sketch_jan12a.ino: In
function 'void loop()':
sketch_jan12a:17:7: error: expected primary-expression before 'else'
else
^~~~
sketch_jan12a:25:18: error: assignment of function 'void delay(long
unsigned int)'
delay = (zeit);
^
sketch_jan12a:25:18: error: cannot convert 'int' to 'void(long unsigned
int)' in assignment
sketch_jan12a:38:5: error: expected primary-expression before '}' token
}
^
exit status 1
expected primary-expression before 'else'
STK500-Besitzer schrieb: > Ob das delay() auch mit Variablen funktioniert Würde ich das delay erst nach allen 4 setzen, so läuft es in den 4 sehr schnell und macht erst nach den 4 eine verzögerung. So hat jeder Schritt seine eigene verzögerung, läuft daher rund und würde nicht nach jedem 4.'ten stottern.
Bei //Schleife wiederholen und //Kein Plan zum Stoppen war nicht fertig. Sieh dir die anderen Fotos an und vergleiche.
Gast
#6104017
Hugo H. schrieb: > Und korrekt compiliert ird das nicht: Danke! Womit wir wieder bei Jan W. schrieb: > c r schrieb: > Was auch immer auf deinem Arduino o.ä. läuft, dieser Code ist es nicht. > > Doch ! Wären. Nein, kann er nicht. Der läuft nirgends. Du übersiehst irgendwo eine Fehlermeldung, die dir sagt, dass das Kompilieren und Hochladen fehlgeschlagen ist.
Gast
#6104018
c r schrieb: > Und das kompiliert? Schlag mal nach, wie die Klammern bei if...else in C > gesetzt werden. So macht das keinen Sinn. Lass dich nicht durch die Einrückungen irritieren. Die sind dem Compiler egal. Hugo H. schrieb: > Und korrekt compiliert ird das nicht: Dann solltest du vielleicht das
1 | |
aus dem Photo nicht unterschlagen. Jan W. schrieb: > 20200112_131229.jpg
Gast
#6104019
Jan W. schrieb: > Würde ich das delay erst nach allen 4 setzen, so läuft es in den 4 sehr > schnell und macht erst nach den 4 eine verzögerung. > > So hat jeder Schritt seine eigene verzögerung, läuft daher rund und > würde nicht nach jedem 4.'ten stottern. Wie du dein Programm aufbaust, ist mir egal, da es deinen Anforderungen genügen soll. Irgendwie kümmerst du dich um nebensächliche Details statt mal das Grundproblem in Angriff zu nehmen. PS: ich bin auch schon länger Ü40, und bringe mir gerade erfolgreich die (C-)Programmierng unter Linux bei.
Gast
#6104024
Wolfgang schrieb: > Lass dich nicht durch die Einrückungen irritieren. Die sind dem Compiler > egal. Ich weiß, die sind mir beim Versuch einen Sinn in der Klammersetzung zu finden auch garnicht aufgefallen.
Wolfgang schrieb: > Dann solltest du vielleicht daszeit=500; aus dem Photo nicht > unterschlagen. Das Foto ist mir Wurscht. Das "zeit = 500;" hat nichts (aber auch gar nichts) mit der Übersetzbarkeit zu tun.
Wolfgang schrieb: > Lass dich nicht durch die Einrückungen irritieren. Die sind dem Compiler > egal. Du bist echt ein Held. Das soll helfen, die Lesbarkeit (und Zusammenhänge) zu verdeutlichen. Wer das nicht rafft sollte besser Bingo spielen :-) Jetzt - nur für Dich - was soll das bewirken:
1 | |
2 | |
3 | |
??
Gast
#6104035
Hugo H. schrieb: > Das "zeit = 500;" hat nichts (aber auch gar nichts) mit der > Übersetzbarkeit zu tun. Der if Block muss entweder explizit einen leeren Codeblock {} enthalten, oder eine primary expression, ohne die Zuweisung fehlt beides. Spätestens im else Block geht ohne {} aber nichts mehr
Gast
#6104044
c r schrieb: > Der if Block muss entweder explizit einen leeren Codeblock {} enthalten, > oder eine primary expression, ohne die Zuweisung fehlt beides. ein ";" würde schon reichen, ist aber nicht so aussagekräftig wie ein Codeblock.
c r schrieb: > Spätestens im else Block geht ohne {} aber nichts mehr Den If - Else Block habe ich in {} gesetzt. Würde ich das Else allein in {} setzen, so schreit das nach einem If, welches nicht gesetzt wurde. Die Variable zeit=500 habe ich als Tester. Leider ist das nicht der gewünschte effekt.
c r schrieb: > Der if Block muss entweder explizit einen leeren Codeblock {} enthalten, > oder eine primary expression, ohne die Zuweisung fehlt beides. Wo steht das?
Gast
#6104054
Hugo H. schrieb: > Du bist echt ein Held. Das soll helfen, die Lesbarkeit (und > Zusammenhänge) zu verdeutlichen. Wer das nicht rafft sollte besser Bingo > spielen :-) Falsche Einrückungen, die nichts mit dem zu tun haben, was der Compiler sieht, sind eher irreführend. Die ganzen Portzuweisungen/Delay im Eröffnungspost/Screenshot sieht der Compiler nicht als Bestandteil der if-else-Struktur.
Wie stelle ich es also an, das: 1. Programm wartet auf Tastendruck 2. Taste betätigt 3. Motor dreht und Programm zählt seine Schritte 4. Schritte nicht erreicht zurück zu 3. 5. Schritte erreicht, Motor stoppt und zurück zu 1. Ich komm nicht drauf... ?
Wolfgang schrieb: > Falsche Einrückungen, die nichts mit dem zu tun haben, was der Compiler > sieht, sind eher irreführend. Ja. Wolfgang schrieb: > Die ganzen Portzuweisungen/Delay im Eröffnungspost/Screenshot sieht der > Compiler nicht als Bestandteil der if-else-Struktur. Ja. Deswegen sollten die auch nicht eingerückt sein. Gut erkannt.
Gast
#6104063
Jan W. schrieb: > Den If - Else Block habe ich in {} gesetzt. > Würde ich das Else allein in {} setzen, so schreit das nach einem If, > welches nicht gesetzt wurde. Nochmal: Zieh dir ein beliebiges Codebeispiel zu if else in C++ rein. Deine Klammern ergeben keinen Sinn. Hugo H. schrieb: > Wo steht das? Beispielsweise in deiner Fehlerausgabe oben
Gast
#6104066
Jan W. schrieb: > Wie stelle ich es also an, das: > > 1. Programm wartet auf Tastendruck > 2. Taste betätigt > 3. Motor dreht und Programm zählt seine Schritte > 4. Schritte nicht erreicht zurück zu 3. > 5. Schritte erreicht, Motor stoppt und zurück zu 1. > > Ich komm nicht drauf... ? Garnicht, ohne deinen bestehenden Code zu fixen.
c r schrieb: > Beispielsweise in deiner Fehlerausgabe oben Nochmal für Dich: Wo steht dass c r schrieb: > Der if Block muss entweder explizit einen leeren Codeblock {} enthalten, > oder eine primary expression, ohne die Zuweisung fehlt beides. Nicht hier - sondern generell?
Gast
#6104081
Hugo H. schrieb: > Nochmal für Dich: Wo steht dass Hugo H. schrieb: > C:\Users\Dieter\Documents\Arduino\sketch_jan12a\sketch_jan12a.ino: In > function 'void loop()': > > sketch_jan12a:17:7: error: expected primary-expression before 'else' > > else > > ^~~~ Hugo H. schrieb: > Nicht hier - sondern generell? Keine Ahnung. In der C-Spezifikation wohl.
Jan W. schrieb: > Wie stelle ich es also an, das: > > 1. Programm wartet auf Tastendruck > 2. Taste betätigt > 3. Motor dreht und Programm zählt seine Schritte > 4. Schritte nicht erreicht zurück zu 3. > 5. Schritte erreicht, Motor stoppt und zurück zu 1. > > Ich komm nicht drauf... ? Wie würde der Sketch dazu aussehen?
Gast
#6104087
c r schrieb: > Jan W. schrieb: >> Wie stelle ich es also an, dass: >> >> 1. Programm wartet auf Tastendruck >> 2. Taste betätigt >> 3. Motor dreht und Programm zählt seine Schritte >> 4. Schritte nicht erreicht zurück zu 3. >> 5. Schritte erreicht, Motor stoppt und zurück zu 1. >> >> Ich komm nicht drauf... ? > > Gar nicht, ohne deinen bestehenden Code zu fixen. alles in der Loop makrieren und die Entf-Taste drücken ;) Der Pseudocode klingt nach eine GOTO-Verwender. Wie würdest du das denn in BASIC schreiben?
Beitrag #6104105 wurde von einem Moderator gelöscht.
Es gibt für Arduino Beispielcode für Schrittmotoren. Dein Code kann nicht funktionieren und die IDE kompiliert das auch nicht, bzw. bringt eine Fehlermeldung.
STK500-Besitzer schrieb: > Der Pseudocode klingt nach eine GOTO-Verwender. > Wie würdest du das denn in BASIC schreiben? So würde ich es schreiben:
Gast
#6104207
Also wie bekomme ich es hin, das dieser
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 | |
Code mit eingebautem Counter und auf Tastendruck wartend seine Runden macht und danach wieder in Wartestellung geht ?!? Beispiel siehe Commodore BASIC Bild
Die Diskussion scheint etwas chaotisch zu verlaufen, so wie ich das sehe
gilt folgendes:
- der Code aus dem ersten Post funktioniert nicht, Hugo hat ihn ja
kopiert und kompiliert, siehe Fehlermeldungen in seinem Post. Es fehlen
Anweisungen im if(digitalRead==...) oben und im letzten if(count<200)
- Der Code aus dem Handyfoto im zweiten Post hingegen funktioniert, tut
aber nicht was du gerne hättest. Hier steht jeweils mindestens eine
Zeile in jeder if()-Anweisung, der code ist also syntaktisch korrekt.
- Versuche bitte den nochmal 1:1 (wirklich 1:1) abzutippen oder wie
vorgeschlagen einen mobilen Hotspot vom Handy einrichten (dein
Handy-Internet per WLAN an den PC freigeben also, gibt es genug
Anleitungen im Netz für Smartphones)
EDIT: Ok immerhin ist das jetzt der echte Code aus dem Handyfoto, das
ist besser.
Damit der Code korrekt funktioniert muss er besser geklammert werden.
Nach loop(){{ ... }} kommen 2 Klammerpaare, eines ist überflüssig.
Nach if()... else ... kommt jeweils keine Klammer, das ist fatal. Nur
die 1 nächste Anweisung wird als Teil des Blocks interpretiert. Beim
else heißt das also1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
wird nur konditional ausgeführt, die Zeilen danach die die Schritte ausführen aber immer! Aktuell sollte also der Motor schnell drehen wenn man nichts drückt und langsamer solange der Pin mit dem Taster high ist. Ist das so?
Lenny D. schrieb: > Aktuell sollte also der Motor schnell drehen wenn man nichts drückt und > langsamer solange der Pin mit dem Taster high ist. Ist das so? Falsch. Er ist langsam, wenn kein HIGH ist und schnell, wenn HIGH ist Habe mein Handy nun über die Fritzbox mit USB über Theatering oder sowas eingerichtet...
Hier nochmal der Code, der nun direkt aus meinem Arduino-Sketch kommt:
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 | |
Lenny D. schrieb: > Aktuell sollte also der Motor schnell drehen wenn man nichts drückt und > langsamer solange der Pin mit dem Taster high ist. Ist das so? Er ist Langsam, wenn nichts gedrückt ist und schnell, wenn gedrückt ist. Warum das genau anders herum ist, weis ich auch nicht.
Hm interessant entweder habe ich einen Denkfehler oder dein Taster ist zB gegen Masse und nicht gegen 5V. Wie ist der Taster angeschlossen? Hat er einen Pullup/Pulldown-Widerstand oder undefinierten Pegel wenn nicht betätigt? Wenn der Taster nach +5V betätigt und im offenen Zustand ein Pulldown zu GND existiert müsste dieser Code hier (fast) wie gewünscht funktionieren, siehe Kommentare. Code compiliert OK, Funktional ungetestet:
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 | |
Gast
#6104258
@ Jan Es scheint mir ein bisschen schwierig Dir einen Rat zu geben. Das liegt daran, dass Du teilweise ein wenig zu wissen scheinst, andererseits aber auch einige Grundlagen in C(++) nicht. Ausserdem scheinst Du im Moment noch Schwierigkeiten damit zu haben, Vorgänge die unabhängig voneinander sind gedanklich vorzustellen und irgendwie schriftlich oder bildhaft vorzustellen. An sich ist nämlich, das Problem ganz einfach zu lösen. Man muss nur wissen wie :-) Aber der Ablauf des Threads und Dein Verhalten hat die Leute auch ein wenig unlustig gemacht, Dir was zu erklären oder Dir einfach die Lösung hinzuschreiben. Abgesehen davon, liest sich Deine Frage so, dass man Dir relativ viele Dinge auf einmal erklären müsste. Das fängt bei der Codeformatierung schon an, die allein schon einige Klarheit bringen könnte. Das Wesentliche ist aber daran, dass Dir vorläufig die "Denkweise" fehlt um zwei in gewisser Weise gleichzeitig ablaufende Vorgänge zu beschreiben (sei es in der Form eines Textes in natürlicher Sprache oder eine Skizze, sei es in der Form von Code). Das kann man zwar erklären, aber erfahrungsgemäß hilft es eigentlich nur an dem Knochen mal herumzukauen, selbst wenn dabei keine Lösung ensteht. Es bleiben daher im Moment nur zwei Möglichkeiten, denke ich. 1. Du lernst zunächst erstmal anhand von sehr einfachen Beispielaufgaben weiter C(++). Du schiebst das Projekt insgesamt erstmal auf. 2. Du teilst das Projekt in zwei Teile au, die Du später zusammenführst. a) Reaktion auf die Tasterbetätigung mit einer LED anstelle des Schrittmotors. Dabei wirst Du feststellen, dass Du einen Fall des Ablaufs noch nicht berücksichtigt hast. b) Steuerung des Schrittmotors. Dabei wirst Du vermutlich zunächst auf eine sehr simple Lösung kommen, die sich aber nicht einfach mit a) zusammenführen lässt. Es wäre gut, wenn Du erstmal so weit gehst um das Problem selbst zu "erleben" und dann eine gezieltere Frage stellen kannst. Als direkten Hinweis möchte ich Dir Vorschlagen, mal über Schleifen in C(++), insbesondere do-while- und while-Schleifen nachzulesen und einfach mal zu versuchen deine Basic-Varianten mit goto als solche Schleifen auszudrücken. Ich kann mir vorstellen, dass meine Vorschläge Dir möglicherweise als unnötige Umwege erscheinen und sie Dich vielleicht frustrieren, weil es scheinbar "nicht weiter geht" damit. Aber vielleicht kannst Du mir doch glauben, dass solche Versuche und die Fehler die man dabei macht, eine sehr wertvolle Lernerfahrung sind. Das haben alle guten Programmierer einmal durchgemacht und es ist absolut keine Schande. Erwäge das doch bitte einmal in Ruhe. Viel Erfolg.
Gast
#6104259
TO geht auf Hinweise auf grundlegendste Fehler im Code nicht ein, selbst wenn jemand die Komplettlösung liefert, wird er keine Ahnung haben, warum es funktioniert und was vorher falsch war.
Gast
#6104278
Jan W. schrieb: > Hier nochmal der Code, der nun direkt aus meinem Arduino-Sketch kommt: Der ist immer noch irreführend eingerückt.
Na danke... Werde auf Theor's Rat eingehen und mich schlau machen.
Wie oben beschrieben bin ich ein Newbie.
Das ich einen pinMode(pin, typ) auch besetzen kann weis ich auch.
Fand es schade, das man hier am Anfang behauptete, das ich Schüler wäre
und irgendwelche Tatsachen verheimliche... Diffamierungen sind schei**
!!
Von cr
>selbst wenn jemand die Komplettlösung liefert, wird er keine Ahnung haben
Finde dieses Zitat schon ziehmlich anmaßend und frech !!!
Werde mich anders behelfen da hier ....... Naja...
Gast
#6104295
Wolfgang schrieb: > Der ist immer noch irreführend eingerückt. p.s. Rufe in der Arduino IDE im Menü Werkzeuge mal die Funktion Automatische Formatierung auf. Dann sollte dir klar werden, wo die Formatierung nicht zum Inhalt passen.
Gast
#6104311
Jan W. schrieb: > Finde dieses Zitat schon ziehmlich anmaßend und frech !!! Ich finde es anmaßend und frech eine Frage zu stellen und die Antworten zu ignorieren. Immerhin investieren hier Fremde unentgeltlich Zeit in deine Probleme. Jan W. schrieb: > Werde mich anders behelfen da hier ....... Naja... Dir hilft nur auf den Arsch setzen und C++ Grundlagen lernen.
Gast
#6104324
Jan W. schrieb: > Na danke... Werde auf Theor's Rat eingehen und mich schlau machen. > > Wie oben beschrieben bin ich ein Newbie. > > Das ich einen pinMode(pin, typ) auch besetzen kann weis ich auch. > > Fand es schade, das man hier am Anfang behauptete, das ich Schüler wäre > und irgendwelche Tatsachen verheimliche... Diffamierungen sind schei** > !! > > Von cr >>selbst wenn jemand die Komplettlösung liefert, wird er keine Ahnung haben > > Finde dieses Zitat schon ziehmlich anmaßend und frech !!! > > > Werde mich anders behelfen da hier ....... Naja... Ich verstehe Dich, denke ich. Allerdings würde ich Dir raten, die Bezeichnung als Schüler nicht allzu sehr zu dramatisieren. Erst einmal ist Schüler sein, an sich nichts Schlimmes, oder? Und dann lernen intelligente Menschen ihr Leben lang; wenn auch formal nicht als "Schüler", so doch faktisch. Ich denke auch, dass das Wort "verschweigen" nicht allzu sehr überbewertet werden darf. Zwar hat es auch eine negative Bedeutung, aber die Unterstellung ist hier nicht auf bösartige Motive gerichtet sondern auf unbekannte Motive. Insgesamt, wenn auch unangenehm, würde ich Diffamierung doch eher für nicht gegeben halten. Der Ton in diesem Thread ist vergleichsweise recht moderat. Im allgemeinen ist ein rauher Ton eher ein Zeichen dafür, dass man sich - mit Verlaub - irgendwie falsch verhalten hat. (Das gilt allerdings nicht immer und bei manchen Antwortern hier im Forum garnicht). Du solltest auch bedenken, dass hier Fragesteller der verschiedensten Schattierungen erscheinen. Biite fasse das Folgende als einfache Beobachtung auf, nicht als Versuch Dich zu erniedrigen: Deine ersten Posts machen, auch bei wohlwollender Interpretation, den Eindruck, sorry, eines Schülers, der irgendwie in Zeitdruck geraten ist, der morgen noch eine Aufgabe abgeben muss. Leider stellt sich hier in solchen Fällen häufig heraus, dass nicht viel gelernt wurde. Bei allem menschenlichen Respekt muss ich auch leider sagen, dass Du, wohl unabsichtlich, den Anschein erweckst, als wenn Du Dich im Moment stark übernimmst und einen eher fordernden Ansatz in der Kommunikation hast. Und ich vermute, Du kannst dem zustimmen, dass Deine Kenntnisse und Erfahrungen vergleichsweise begrenzt sind. Dazu kommt, dass Du bisher keinerlei Versuch einer Erklärung Deiner Gedankengänge und Entwürfe unternommen hast, und auch keinerlei Analyse (und sei sie noch so falsch) geliefert hast. Das erweckt den Anschein, als wenn Du selbst, nochmal sorry, nichts leisten willst. Solche Kritik hinzunehmen, muss einem Erwachsenen der im Leben steht, sehr hart ankommen. Andereseits, wer von uns - und ich sicher auch nicht - kann schon von sich sagen, dass er alles schon weiß und alles schon kann. Jeder von uns muss ab und zu, auch im sozialen Bereich - mal eine Kröte schlucken. Das ist menschlich. :-) Man kann nur versuchen sich selbst treu zu bleiben und gleichzeitg auch die andere Seite zu sehen. Man muss nicht aller Kritik zustimmen (Deine Kritiker sind auch nur Menschen), aber es lohnt sich doch erstaunlich oft, zumindest mal über anderer Leute Aussagen nachzudenken. In dem Zusammenhang rate ich Dir wärmsten einemal den Artikel https://www.mikrocontroller.net/articles/Netiquette und die darin verlinkten Seiten. Mit guten Wünschen, insbesondere weiterem Erfolg ...
Gast
#6104330
Na siehste? Ich hätte meinen Beitrag auch noch einmal lesen sollen. Schrecklich viele Rechtschreib- und Grammatikfehler. :-)
Gast
#6104365
Jan W. schrieb: > Wie stelle ich es also an, das: > > 1. Programm wartet auf Tastendruck > 2. Taste betätigt > 3. Motor dreht und Programm zählt seine Schritte > 4. Schritte nicht erreicht zurück zu 3. > 5. Schritte erreicht, Motor stoppt und zurück zu 1. > > Ich komm nicht drauf... ?
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
Danke für den Sketch... Leider ist der für mein Uno oder Nano dafür nicht geeignet. Fehlermeldung: Fehler beim Kompilieren für das Board. Mittlerweile fuchse ich mich da rein. Habe es bisher soweit, das der Motor dreht, sobald der Taster geschlossen ist und aufhört, wenn er losgelassen wird. Nun fehlt mir nur noch das er weiter dreht, solange der counter nicht erreicht ist.
Gast
#6104982
Jan W. schrieb: > Fehlermeldung: Fehler beim Kompilieren für das Board. Das ist leider nicht sehr aussagekräftig. Die Arduino IDE bietet in den Einstellungen ausführlichere Ausgaben beim Kompilieren und Hochladen an, aktivier das mal. Dann
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
Bei der loop() fehlte der Typ void und noch 2 Arduino spezifische Fehler, probier den mal. Das kompiliert auf jeden Fall schonmal.
Jan W. schrieb: > Habe es bisher soweit, das der Motor dreht, sobald der Taster > geschlossen ist und aufhört, wenn er losgelassen wird. Wenn du den Code von "c r" nicht verwenden willst / kannst, dann zeig noch mal deinen. Die Abfrage der Schrittanzahl gehört nach der Tastenabfrage. Es gibt allerdings noch weiter Möglichkeiten.
Meinen zweiten Post hast du gesehen? Nicht so elegant wie die Verwendung der Stepper library, aber sollte zumindest tun...
Gast
#6105057
@Jan: Das delay() sieht erstmal einfach für so eine Aufgabe aus, führt aber zu dem Problem das du siehst: währed des delay rennt der µC nur im Kreis und macht nix anderes. Sinnvoller ist es erstmal diese zwei Aufgaben in Unterprogrammen zu definieren, z.B.: checkButtons() und processStepper(). Diese werden ständig in loop() aufgerufen und dürfen nicht blockieren. In checkButtons() ist das einfach, digitalRead wird schnell ausgeführt, das kann man einfach aufrufen und auswertern. Das processStepper() darf nicht mit delays blockieren, hier ist eine mögliche Lösung eine State Machine. D.h., die Funktion wird aufgerufen, guckt in welchem Zustand sie ist, macht was und ist erstmal fertig. Für das warten musst du dann mit millis() die aktuelle Zeit abfragen und wenn die Zeit für einen Schritt abgelaufen ist auf den nächsten Schritt weiterschalten. Beispiel schnell zusammengehackt, nicht getestet:
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 | |
54 | |
55 | |
56 | |
Johannes S. schrieb: > Das delay() sieht erstmal einfach für so eine Aufgabe aus, führt aber zu > dem Problem das du siehst: währed des delay rennt der µC nur im Kreis > und macht nix anderes. Er soll ja in dieser Zeit auch nichts anderes machen. Sobald ein Tadter gedrückt wurde, soll das Programm starten und der Motor laufen, auch nach dem loslassen des Tasters. Während die Schleife läuft, zählt ein Counter jeden Schritt von 0-199. Nachdem der Counter sein Soll erreicht hat, stoppt der Motor und das Programm wartet wieder auf den Taster. Bin grad auf Arbeit. Etwas fehlt noch. Aber so ungefähr...
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 | |
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 | |
So läuft der Code mal. Wie weit sinnvoll sei dahin gestellt.
Habs komplett hinbekommen... Dank der einfühlsamen Worte von Theor. Habe es gestern Abend mit einer While-Schleife erledigt und einer Abfrage wie weit der Counter ist. Selbst eine LED leuchtet über einen anderen Pin, solange es läuft. Werde mir jetzt noch ein paar Gedanken über ein Tipp-Betrieb machen und dann ist's vollbracht. Theard kann geschlossen werden. ??
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.





