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
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.
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.
Danke aber, auch das meine ich ehrlich, für die tollen Ausführungen wie man so was macht.
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.