Aduino Uno einfinden

...komplette Frage anzeigen

2 Antworten

Zunächst mal zum Anschluss der 7-Segment-Anzeige:

Da gibt es mehrere Möglichkeiten:

  1. Jede Leuchtdiode an einen einzigen Pin des Microcontrollers anschließen. Dazu bräuchte man bei 3 7-Segment-Anzeigen 21 I/O Pins, der Arduino hat jedoch nur 14.
  2. Die 7-Segment-Anzeigen mit jeweils einem Decoder-IC (z.B. vom Typ 4511) ansteuern; dazu braucht man pro 7-Segment-Anzeige 4 Pins, also insgesamt 12.
  3. Eine Variante dazu: Man kann beim IC 4511 die vier Pins gemeinsam verwenden und durch einen fünften Pin dem jeweiligen IC mitteilen, dass die Daten gültig sind. Dazu benötigt man dann insgesamt 7 Pins. Man setzt die 4 gemeinsamen Pins dann auf den Wert, der der Ziffer entspricht, die eine Stelle (z.B. die mittlere) anzeigen soll. Dann wird der fünfte Pin der entsprechenden Stelle kurz auf low und dann wieder auf high gesetzt. Der fünfte Pin der anderen beiden Stellen bleibt auf high. (Möglicherweise ist es auch genau umgekehrt.) Die drei Stellen werden auf diese Art und Weise hintereinander beschrieben.
  4. Bei den meisten Radioweckern wurde eine Schaltung, wie sie im angehängten Bild zu sehen ist, verwendet. Diese würde 10 Pins am Arduino benötigen. Bei dieser Ansteuerung leuchten die drei Anzeigen nie gleichzeitig, sondern nur eine der drei Anzeigen leuchtet. Welche dies ist wird mit den Pins C1-C3 bestimmt. Pins S1-S7 bestimmen, welches Segment innerhalb der Anzeige leuchtet. Wenn die Leuchtdioden sehr schnell im Wechsel blinken (100 Hz und schneller), so bemerkt das Auge nicht, dass die Leuchtdioden in Wirklichkeit blinken, sondern nimmt das Blinken als Helligkeitsänderung war (es sieht also so aus, als würden die Leuchtdioden alle gleichzeitig aber nur mit 1/3 ihrer Helligkeit leuchten). Dieser Effekt wird übrigens gerne zum Dimmen von Lampen verwendet.

Nun zum Programm:

int result = bitRead(num, 0);

Die Variable "result" wird auf 1 gesetzt, wenn das niederwertige Bit der Zahl "num" gesetzt ist. (Dies ist genau dann der Fall, wenn die Zahl ungerade ist.)

if (result == 1)
{digitalWrite(A, HIGH);}
else
{digitalWrite(A, LOW);}

Falls "result" 1 ist (also "num" ungerade war), dann wird ein Pin auf high (+5V) gesetzt, ansonsten auf low (0V). Welcher Pin gesetzt wird, wird von der Variablen oder Konstanten "A" bestimmt.

result = bitRead( num, 1);
if (result == 1) {digitalWrite(B, HIGH);}
else ...

Das ganze nochmal. Diesmal wird allerdings das zweitniedrigste Bit der Zahl "num" überprüft und der Pin, der geändert wird, ist Pin "B". (Für das zweitniedrigste Bit gibt es keine so anschauliche Erklärung wie gerade/ungerade). Den "else"-Teil hast du leider abgeschnitten; ich denke aber, er sieht genau so aus wie weiter oben.

Um einen Taster einzulesen, brauchst du wohl den Befehl "digitalRead". Die Befehle des Arduino sind übrigens gut im Netz dokumentiert.

Die "loop"-Funktion ist diejenige Funktion, die nach der Initialisierung des Boards ("setup"-Funktion) immer wieder unendlich oft aufgerufen wird. Durch die "Delay"-Funktion kann man erreichen, dass diese in etwa in einem bestimmten Zyklus (z.B. alle 3ms) aufgerufen wird. Durch eine Kombination mit "millis" kann man diese Genauigkeit erhöhen.

Dein Vorhaben ist allerdings nicht ganz einfach, falls du wenig Programmiererfahrung hast (solltest du bereits Programmiererfahrung auf dem PC haben, sollte es allerdings einfach sein):

  • Gerade falls du dich für die Schaltungsvariante 4 (Zeichnung) entscheidest, muss "loop" etwa alle 3ms aufgerufen werden, um das Umschalten der Anzeigen schnell genug durchführen zu können; das Herunterzählen wirst du allerdings nicht alle 3ms machen wollen, sondern z.B. nur jede Sekunde.
  • Das Umwandeln der Zahlen in Bits für die Pins ist für Anfänger nicht trivial
  • Den Taster (zum Starten und Stoppen) wirst du entprellen müssen. Anstatt super teurer entprellter Taster für die Digitaltechnik zu nehmen, sollte man das per Software machen. Dazu könnte man als "Ereignis" (Tastendruck) ansehen, wenn der Taster in einem Moment gedrückt ist und zuvor für mindestens 100ms nicht gedrückt war...
Ansteuerung von 3 7-Segment-Anzeigen mit Transistoren. - (Elektronik, programmieren, Elektrik)

Was möchtest Du wissen?