Forum: Projekte & Code Kodierschalter 0-9 oder Hex-Schalter Arduino Funktion


von F. F. (foldi)


Angehängte Dateien:

Lesenswert?

Hallo zusammen!

Da ich noch Anfänger bin und mir überall den Code für einen 
Kodierschalter gesucht habe und den leider nicht fand, habe ich nun 
selbst eine Funktion dafür geschrieben.
Damit nicht noch jemand so viel Zeit verliert und es leichter hat solch 
einen Schalter in sein Programm einzubinden, möchte ich hier den Code 
zur Verfügung stellen.
Ich habe ihn unter Arduino 1.01 getestet und er funktioniert da 
einwandfrei.

Viel Erfolg damit!


Mit freundlichem Gruß
Frank Oldenbürger

von Karl H. (kbuchegg)


Lesenswert?

Puh.
Was soll man damit machen?

Auf der einen Seite hast du nicht geschnallt, dass du die 4 Leitungen 
einfach an die Bit-Pins 0 bis 4 eines Port anschliesst und mit einer 
einzigen Einleseanweisung die Zahl einlesen kannst. Eventuell mit einem 
& Nichtbenutzte Bits wegmaskieren und fertig ist die Sache. Im 
einfachsten Fall präsentiert sich das einlesen des SChalters so:

Annahme: Der Schalter ist an die Pins 0 bis 4 vom Port B angeschlossen

   Code = ~PINB & 0x0F;

fertig. das wars. Bei anderen Pins muss man eventuell noch ein wenig hin 
un dherschieben, alles in allem aber eine einfache Sache (und daher wird 
man auch die 4 Pins direkt nebeneinander in der richtigen Reihenfolge an 
einem einzigen Port anschliessen)

Jetzt kann es natürlich auch noch sein, dass die 4 Pins an verschiedenen 
Ports angeschlossen sind. In dem Fall errechnet sich der Code indem  man 
ausnutzt, dass die Pins eine Wertigkeit haben. Der Code lautet dann

   Code = Bit_0 * 1 + Bit_1 * 2 + Bit_2 * 4 + Bit_3 * 8;

Wie man an die einzelnen Bitwerte (0 oder 1) kommt lass ich offen, das 
hängt von den Details des Anschlusses ab. Mit Anwendung der Horner Regel 
landet man bei

   Code = (((((Bit_3 << 1) + Bit_2) << 1) + Bit_1) << 1) + Bit_0;


Alles in allem bin ich unschlüssig, wie sinnvoll dein Beitrag in der 
Codesammlung ist. Auf der einen Seite will ich dir nicht die Freude 
rauben, auf der anderen Seite ist dein Code so ziemlich die 
umständlichste und ineffizienteste Methode, die es gibt.

von F. F. (foldi)


Lesenswert?

Danke für die Kritik!
Hätte gern ne kürzere Lösung gefunden. Und wie gesagt, ich bin Anfänger 
und habe auch nichts studiert. Auch die Horner Regel ist mir unbekannt.
Dafür kenne ich eine BesAnLWUKdo.
Aber Spaß beiseite, das ist Arduino und meines (bescheidenen) Wissens 
kann man keinen ganzen Port in Arduino ansprechen.
C lerne ich als nächstes.
Außerdem war ich natürlich gespannt, ob jemand da was besseres für 
ARDUINO anbieten kann.
Ich jedenfalls hätte mich gefreut, wenn ich das hätte kopieren können.

Weißt du, ich bin jetzt 49 Jahre alt, voll berufstätig, 
Alleinerziehender und bin nun seit ungefähr 3 Monaten mit den 
Mikrocontrollern dran. Ganz abgesehen von den Wartezeiten auf Material 
und Büchern.

Seit heute läuft mein Projekt und da lese ich einen DHT11 aus, lese 
besagten Codeschalter aus und steuere dort verschiedene Ausgänge.
Für das was ich da bauen will, habe ich mir noch ne ganze Menge anderes 
Wissen aneignen müssen und das auch in dieser Zeit (immer dann, wenn ich 
auf Teile wartete).

Dafür habe ich mir hier so manche Nacht um die Ohren gehauen.

Sicher ist das für einige hier, und das meine ich ohne jede Ironie und 
mit vollem Respekt vor deren Intelligenz und Können, Kinderkram, aber 
ich bin auf das was ich bis jetzt geleistet habe recht stolz.

Es war keinerlei Klugscheißerei dabei, auch wollte ich nicht zeigen was 
ich für ein toller Kerl bin. Ich wollte lediglich Anfängern wie mir, mit 
ebenso bescheidener Intelligenz wie ich sie habe, die Möglichkeit geben 
sich hier etwas Arbeit zu sparen.

von F. F. (foldi)


Lesenswert?

Danke aber, auch das meine ich ehrlich, für die tollen Ausführungen wie 
man so was macht.

von F. F. (foldi)


Lesenswert?

Hab mir gerade mal die Horner Regel angeschaut, das ist wohl eher was 
für meinen Sohn. Der hat eine außerordentlich hohe Begabung für 
Mathematik.
Ich muss mir so was anders herleiten.
Gut, dass ich so doof bin. Hätte ich vorher gewusst, dass ich so was 
lernen soll, dann hätte ich das sicher ganz gelassen. grins

von Karl H. (kbuchegg)


Lesenswert?

Frank O. schrieb:
> Hab mir gerade mal die Horner Regel angeschaut, das ist wohl eher was
> für meinen Sohn. Der hat eine außerordentlich hohe Begabung für
> Mathematik.

Da brauchst du keine besondere Begabung

  i = x * 100 + y * 10

kann man auch so rechnen

  i = ((x) * 10 + y ) * 10

also im Grunde einfach nur gemeinsame Faktoren geeignet herausheben.

Anstelle von
    Bit_3 << 3  +  Bit_2 << 2  +  Bit_1 << 1   + Bit_0

wobei das Schieben um 3 Stellen aufwändig ist, hebt man einmal Schieben 
heraus

    ( Bit_3 << 2  +  Bit_2 << 1   + Bit_1 ) << 1 + Bit_0

kommt aufs gleiche raus.
Ob man die Ausgangsprodukte um die entsprechende Anzahl Stellen schiebt, 
oder das Endergebnis kommt aufs gleiche raus.

Und innerhalb der Klammer kann man jetzt dasselbe nochmal machen

   ( Bit_3 << 1  + Bit_2 ) << 1  + Bit_1 ) << 1  + Bit_0

und voila. Anstelle von einmal um 3 Bits schieben und einemal um 2 Bits 
etc. hat man jetzt immer nur die Operation: schiebe um 1 Bit.

genauso, wie man anstelle von

      y =  x1 * 1000   +  x2 * 100   + x3 * 10  + x4

mit jeweils unterschiedlichen Multiplikationen, durch Herausheben

      y = ((x1 * 10 + x2) * 10 + x3) * 10 + x4

schreiben kann und das gleiche Ergebnis bekommt.

von F. F. (foldi)


Lesenswert?

Das Schiebennwird sicher beim Ansteuern von 7 Segmentanzeigen nötig?
Hab da schon so was gelesen. Die brauchte ich noch nicht, kommen aber 
noch.
Jetzt hab ich mein Programm soweit, dass es funktioniert. Noch einige 
Berechnungen für die Werte, die ich im Programm brauche und dann kann 
ich mit den Platinen anfangen; genauer gesagt, der Platine.
Das Design des Gehäuses, den das ist der eigentliche Trick bei dem 
Ganzen und wenn es dann läuft, ich es verkauft habe, dann werde ich mich 
Assembler nähern (damit ich die µC besser verstehe) und dann werde ich 
C++ lernen. Aber in der Zwischenzeit lerne ich erst dieses Arduino 
weiter. Das wird sicher auch etwas zum Verständnis der Dinge bei tragen.
Viele Männer in meinem Alter ziehen sich Fußball und Bier in den Kopf, 
ich lerne da lieber noch nützliche Sachen.

Danke für die tollen Ausführungen. Werde mir das sicher noch öfter 
anschauen.

Gruß
Fank

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.