Guten Tag,
ich habe ein kleines Problem, da ich noch sehr im Anfangsstadium des
Arduino bin.
In dem angehängten Sketch nur kurz zur Klarstellung der Variablen und Co
ein paar erklärende Worte.
altpos1 =
Gibt mir die alte Position des 1. Einganges.
neupos1 =
Gibt mir die aktuell eingelesene Position des 1. Einganges
altpos2 =
Gibt mir die alte Position des 2. Einganges.
neupos2 =
Gibt mir die aktuell eingelesene Position des 2. Einganges
pos1
Ist der 1. Eingang, der wiederum am Pin 11 des Unos angeschlossen ist.
pos2
Ist der 2. Eingang, der wiederum am Pin 10 des Unos angeschlossen ist.
positionsmotor
Soll die Variable sein, die mir angibt, welche Taster bzw. welche
Position nun angefahren werden muss.
Dabei sollen die Positionen 1bis 8 später angefahren werden.
(Vorerst allerdings nur 1bis4)
anders1 und anders2
Geben mir an, ob sich der Wert geändert hat an den jeweiligen Eingängen
1, sowie 2.
Mein derzeitiges problem ist es, dass wenn Taster1(Pin11) 1 auf 2
geschaltet wurde
=korrekte Ausgabe 2
und danach der Taster2(Pin10) sich geändert hat von Beispielweise 3 auf
4
geschaltet wurde
=korrekte Ausgabe 4
Nun erfolgt der Fehler
wenn jetzt der Taster 1 wieder auf Position 2 gestellt wurde, dann kommt
es nicht zur Ausgabe 2, sondern es passiert keine Ausgabe.
logischerweise natürlich, da sich der 1. Taster ja auch nicht geändert
hat...
Leider stehe ich aktuell irgendwie auf der Leitung, sodass ich euch um
Hilfe bitte.
Vllt kann mir der ein oder andere einen Tipp geben, wie ich dies lösen
kann.
Vielen Dank
Michael
Hallo Klaus,
natürlich ist es nicht üblich.
Wie gesagt bin noch ein frühzeitiger Arduino Fan.
Im Anhang ist aber nun eine eingerückte Version.
Sodass die IF.. Else... besser und übersichtlicher zu erkennen sind.
Danke Michael
Klaus R. schrieb:> diese if ... else ... Konstruktionen sind nicht übersichtlich> eingerückt. Ist das beim Arduino so üblich?
Nein. Der TO ist neu bei der Arduino-IDE und hat Ctrl-T (= Autoformat)
noch nicht entdeckt.
Zur Sache: sucht der TO ev. Drehgeber - da gibt's jede Menge Info dazu.
leo
Klaus R. schrieb:> Ist das beim Arduino so üblich?
Nein, man kann einfach in der IDE <ctrl>-T drücken (AUtomatische
Formatierung), dann sieht es anders aus.
Gefällt dir das besser?
steht?
Hallo
und vorab schonmal vielen Dank für die Antworten hier.
Meine Idee bzw mein Vorhaben an der Geschichte ist,
dass die Position ausgegeben werden soll, welche Position gedrückt
wurde.
ich habe derzeit 2 Taster.
der 1. Taster macht
Position 1 =bei Pin 11=Low
Position 2 =bei Pin 11=High
der 2. Taster macht
Position 3 =bei Pin10=Low
Position 4 =bei Pin10=High
Das klappt an sich ja auch schon fast,
nur ist das Problem, dass wenn Taster 1 beispielsweise Position 1
angetastet wurde
und nun Taster 2 die Position 4 getastet wurde,
dass jetzt nicht wieder die Position 1 angetastet werden kann mit dem 1.
Taster, da dieser ja noch die Merkedrin hat, dass sich dieser Taster
nicht geändert hat.
Und somit die Position 1 nicht erneut ausgegeben wird.
Hoffe konnte mein Anliegen einw enig klarer verfassen.
Bezüglich deiner Aussage bitweise AND
Ich verstehe deine Aussage dazu nicht so ganz.
Mit dieser Zeile versuchte ich
(neupos1 > altpos1) und (anders1 == 0)
dass es nur angewendet wird, wenn die neue Position größer als die alte
Position ist UND es eine Änderung im Schaltkanal gibt.
Denn nur wenn der Eingang sich geändert hat, dass soll ja der Ausgang
geändert werden.
Meine Idee dahinter war es, dass es nur einen einmaligen Ausgang gibt,
und kein ständiges Senden.
Nachdem ich den Quelltext mal gelesen habe, würde ich dir anraten mal
nen Stift und Papier zu nehmen und ein Flussdiagram zu erstellen von dem
was du erreichen willst.
denn bis jetzt kannst du z.b. wenn du zuletzt Pos2 gändert hast nicht
direkt zu dem jetzigen Wert von Pos1 wechseln, damit sich irgendetwas
ändert muss sich Pos1 ändern:
Angenommen Pos1 == 2, danach ändert sich Pos2 zu 4:
4 -> 3 Möglich
4 -> 2 Nicht möglich
4 -> 1 Möglich
Michael K. schrieb:> Nun erfolgt der Fehler> wenn jetzt der Taster 1 wieder auf Position 2 gestellt wurde, dann kommt> es nicht zur Ausgabe 2, sondern es passiert keine Ausgabe.
Da hast du einen Denkfehler, der Taster wird nicht wieder auf Position 2
gestellt, er wird nicht im geringsten verändert. dein Programm soll also
ohne Eingabe erkennen dass du etwas ändern willst? Man kann Gehirnströme
ableiten und auswerten aber das ist hier glaube ich nicht Sinn der
Sache.
Überdenk das Eingabe Konzept, das kann so nicht funktionieren, außer du
Spendierst noch einen extra Taster um den jetzigen Wert von Pos1 bzw.
Pos2 zu übernehmen. kann man machen, wird dann aber scheiße. dann lieber
einen Knopf pro position, das ist wesentlich einfacher sowohl zu
programmieren als auch zu verstehen.
Oder einen Knopf / Drehgeber für Pos +/- 1 und dann ein Knopf um die
Position zu übernehmen.
Michael K. schrieb:> Mit dieser Zeile versuchte ich> (neupos1 > altpos1) und (anders1 == 0)> dass es nur angewendet wird, wenn die neue Position größer als die alte> Position ist UND es eine Änderung im Schaltkanal gibt.
tut es aber nicht
& heißt eine AND Verknüpfung auf jedes einzelne Bit
&& heißt eine logische AND Verknüpfung, das was du suchst.
Die Reihenfolge sollte aber tatsächlich stimmen, und du hast Glück dass
TRUE == 1 ist (meistens) daher ist auch 1 bitwise_AND 1 dassselbe wie
mit logischem AND
lies dir unbedingt einen Artikel zu Operatoren durch, wenn du nicht den
Unterschied zwischen logic und bitwise sowie Operator precedence kennst.
Klingt jetzt vllt. nicht nett, aber das braucht man halt dringend. Im
Zweifelsfall macht ne Klammer mehr (im gewissen Rahmen) das Konstrukt
nur verständlicher, den Kompiler stören auch 2000 Klammern nicht. hier
dachte ich zuerst das sdu was anderes erreichen willst.
Vielen Dank für die Hilfe.
Ich werde jetzt wirklich mal Zettel und Stift nehmen.
Einen weiteren Schalter zu nehmen geht leider nicht.
Da die Schalter wenn die Steuerung funktioniert ersetzt durch Befehle
einer Steuerung.
Melde mich wieder sofern ich ein Konzept auf Papier gemacht habe wieder.
Vielleicht finde ich ja auch so die Lösung meines Problems.
Aller Anfang ist halt schwer.
Bezüglich der Operatoren
Gibt es da eine gute internet Seite?
Oder noch besser vllt. Ein wirklich brauchbares Buch ?
Michael
Michael K. schrieb:> Dabei sollen die Positionen 1bis 8 später angefahren werden.> (Vorerst allerdings nur 1bis4)
Mit 2 Eingängen kannst Du 4 Positionen kodieren, für 8 Positionen
brauchst Du 3 Eingänge.
Was Dein riesen Code bewirken soll, ist mir völlig unklar.
Du mußt doch nur die 2 bzw. 3 Eingänge binär bewerten und schon hast Du
die Zahl 0..3.
Michael K. schrieb:> wenn Taster 1 beispielsweise Position 1 angetastet wurde> und nun Taster 2 die Position 4 getastet wurde,> dass jetzt nicht wieder die Position 1 angetastet werden kann mit dem 1.> Taster, da dieser ja noch die Merkedrin hat, dass sich dieser Taster> nicht geändert hat.> Und somit die Position 1 nicht erneut ausgegeben wird.
Ich verstehe nur Bahnhof. Die Beschreibung kommt dem uC wohl auch
unlogisch vor.