Forum: Mikrocontroller und Digitale Elektronik Arduino Qlocktwo


von Niklas R. (nrx)


Lesenswert?

Servus.

Ich habe eine 10x11 Led Matrix gebaut, die über vier Schieberegister und 
zwei TransistorArrays angesteuert wird.
Diese Matrix soll später (hfftl. bis zum 24.12.15) ein Qlocktwo Nachbau 
werden.

Mein Programm ist nun soweit, dass ich die Pins der Matrix ansteuern 
kann
Und für die erste Basic-Version einen Arduino internen Timer habe, der 
per Minuten und Stunden Taster gesettet werden kann.

Nun wäre die Frage:
Wie kann ich den Code für die Ausgabe der Zeit m.H. der Matrix am 
schnellsten und einfachsten in der Arduino IDE verwirklichen?

Ich hoffe mir kann dabei jemand helfen
Vllt sogar noch heute Abend.
(Soll ein Weihnachtsgeschenk werden und habe über der Woche nicht so 
viel Zeit daran weiter zu arbeiten)

Erste Gedanken waren drei Switchcases laufen zu lassen, eines für die 
Stunden, das zweite für die Minuten, also "fünf nach", "zehn nach" usw. 
und das dritte, für die vier Led's in den Ecken, die die genaueren 
Minuten anzeigen, also Text: "fünf nach" und 2 EckLeds ergeben 
praktisch: "7 nach"

Ich bin zur Zeit ratlos
Ich dachte noch daran vllt BitMaps zu verwenden, und da einfach die 
einzelnen Leds anzusteuern

Ich werde hier mal meinen bisherigen Code anhängen, vllt kann ja jmd was 
damit anfangen und mir sogar helfen.

Vielen Dank schonmal im Voraus :D

Code:

#include <TimerOne.h>


    int latchPin = 5;
    int clockPin = 6;
    int dataPin = 4;

    volatile int Sekunde = 0;
    volatile int Minute = 0;
    volatile int Stunde = 0;

    int Taster1 = 8;
    int Taster2 = 9;
    int Tasterstatus1;
    int Tasterstatus2;

    int iState1 = 0;
    int iState2 = 0;
    int iState3 = 0;

    void setup()
    {
      pinMode(latchPin, OUTPUT);
      pinMode(dataPin, OUTPUT);
      pinMode(clockPin, OUTPUT);


     Timer1.initialize(1000000); // set a timer of length 100000 
microseconds (or 0.1 sec - or 10Hz => the led will blink 5 times, 5 
cycles of on-and-off, per second)
     Timer1.attachInterrupt( timerIsr ); // attach the service routine 
here

     pinMode(Taster1, INPUT);
     pinMode(Taster2, INPUT);
    }

    void loop()
    {
      switch (iState1) //Switchcase Minuten
      {
      }

     switch (iState2) //Switchcase Stunden
     {
     }

     switch (iState3) //1, 2, 3, 4, 6, 7, 8, 9,
     {
     }
    }

    //Übersetzt Logik auf Hardware
    void updateShiftRegister( byte spalte, uint16_t leds)
    {
       digitalWrite(latchPin, LOW);
       byte spalte_bit = 0;
       if (spalte < 6) {
           spalte_bit = 1 << spalte +3;
       }
       shiftOut(dataPin, clockPin, LSBFIRST, spalte_bit);

       digitalWrite(latchPin, LOW);
       spalte_bit = 0;
       if (spalte >= 5) {
           spalte_bit = 1 << spalte -3;
       }
       shiftOut(dataPin, clockPin, LSBFIRST, spalte_bit);

       shiftOut(dataPin, clockPin, LSBFIRST, leds << 3);
       shiftOut(dataPin, clockPin, LSBFIRST, leds >> 2);
       delay (100);
       digitalWrite(latchPin, HIGH);
    }

    void timerIsr()
{
  if ( Sekunde < 59) {
    Sekunde ++;
    }
    else {
      Sekunde = 0;
      if (Minute < 59) {
        Minute ++;
        }
        else {
          Minute = 0;
          if (Stunde < 11) {
            Stunde ++;
            }
            else {
              Stunde = 0;
              }
            }
         }


 Tasterstatus1 = digitalRead(Taster1);
  if (Minute < 59) {
    if (Tasterstatus1 == HIGH) {
      Minute ++;
      delay(500);
      }
  }
  else {
    Minute = 0;
    }


 Tasterstatus2 = digitalRead(Taster2);
  if (Stunde < 11) {
    if (Tasterstatus2 == HIGH) {
      Stunde  ++;
      delay(500);
     }
  }
  else {
    Stunde = 0;
  }
}

von Dieter S. (Gast)


Lesenswert?

Und ich bin ratlos, was du genau willst.
Du solltest das besser erklären, evtl. mit einem Bild.
Aber den Termin, den du dir da setzt, finde ich sehr gewagt.

von Joachim B. (jar)


Lesenswert?


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.