-         

Ergebnis 1 bis 5 von 5

Thema: 8x8 LED Matrix Smiley soll zwinkern

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    04.05.2015
    Beiträge
    35

    8x8 LED Matrix Smiley soll zwinkern

    Anzeige

    Hallo,

    mein Smily zwinkert nicht.

    Ich habe diese Schaltung aus dem Buch Arduino Workshops, Boxall J. aufgebaut.

    Klicke auf die Grafik für eine größere Ansicht

Name:	LED Matrix.PNG
Hits:	6
Größe:	52,4 KB
ID:	31595

    Und versuche nun ein Smiley auf der LED Matrix darzustellen. Das Smiley ist kein Problem, aber nun möchte ich es animieren, sprich es soll ein Auge öffnen und schliessen.

    Anbei der Code, den ich bis jetzt habe und der leider nicht funktioniert.

    Code:
    #define DATA 6 //Verbindung mit Pin 14 am Schieberegister
    #define LATCH 8 //Verbindungmit Pin 12 am Schieberegister
    #define CLOCK 10 //Verbindung mit Pin 11 am Schieberegister
    
    byte smile[] = {B00000000, B00000110, B01100110, B00000000, B00011000, B0000000, B11000011, B01111110};
    int binary[] = {1, 2, 4, 8, 16, 32, 64, 128};
    
    byte smile1[] = {B00000000, B01100110, B01100110, B00000000, B00011000, B0000000, B11000011, B01111110};
    int binary1[] = {1, 2, 4, 8, 16, 32, 64, 128};
    
    void setup() {
      // put your setup code here, to run once:
    
      pinMode(LATCH, OUTPUT);
      pinMode(CLOCK, OUTPUT);
      pinMode(DATA, OUTPUT);
    
    
    }
    
    void loop() {
      // put your main code here, to run repeatedly:
    
        int i;
    
    
        for ( i = 0; i<8; i++)
        {
        
          digitalWrite(LATCH, LOW);
          shiftOut(DATA, CLOCK, MSBFIRST, ~smile1[i]);
          shiftOut(DATA, CLOCK, MSBFIRST, binary1[i]);
          digitalWrite(LATCH, HIGH);
          delay(1);
          digitalWrite(LATCH, LOW);
          shiftOut(DATA, CLOCK, MSBFIRST, ~smile[i]); //Spalten
          shiftOut(DATA, CLOCK, MSBFIRST, binary[i]); //Zeilen
          digitalWrite(LATCH, HIGH);
          delay(1);
        
        }
    
    }
    Wie ich es verstehe, wird im Abstand von 1ms Zeile für Zeile abgearbeitet. Nun folgerte ich, wenn ich ein zweites Array schaffe und ich den Code durchlaufen lasse, erst die 8 Zeilen mit Auge auf, dann die 8 Zeilen mit Augegeschlossen, müsste er zwinkern. Ist aber nicht so. Wo genau liegt mein Denkfehler?

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    13.01.2014
    Beiträge
    398
    Blog-Einträge
    3
    Vergleiche mal hiermit:
    Code:
    ...
    void loop() {
        const byte ZWINKERLAENGE = 255; // hier Zwinkerlaenge einstellbar
        static byte a = 0; // byte -> max 256 loop-Zyklen
        static bool b = false; // schaltvariable fuers Zwinkern
        int i;
        
        a++;
        if (a == ZWINKERLAENGE) {
            a = 0;
            b = !b; 
        }
        
        for (i = 0; i<8; i++) {  
          digitalWrite(LATCH, LOW);
          shiftOut(DATA, CLOCK, MSBFIRST, b? ~smile[i] : ~smile1[i]);
          shiftOut(DATA, CLOCK, MSBFIRST, binary[i]);
          digitalWrite(LATCH, HIGH);
          delay(1);
        }
    }
    Geändert von Sisor (09.05.2016 um 08:44 Uhr) Grund: Fehler im Code nach Einwand behoben

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    49
    Beiträge
    2.442
    Der Denkfehler ist die Trägheit des menschlichen Auges.
    Alles was schneller als 25 mal pro Sekunde passiert, wird nicht mehr als Einzelbild wahrgenommen.
    Deshalb siehst Du auch einen Smily und nicht einzelne LED Zeilen leuchten.
    Das blinzelnde Auge müsste etwas dunkler sein als andere.
    Sissor lässt in seinem Code 256 mal das eine Bild refeshen und 256 mal das andere (mit je 1ms Delay).
    Gibt ungefähr 3,4 Wechsel pro Sekunde.

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    04.05.2015
    Beiträge
    35
    Und wieder einmal muss ich mich bedanken, nach der Änderung des Codes hat mein Smiley nun angefangen zu zwinkern und meine Tochter freut es. Danke an euch. Wäre mein Code zu falsch gewesen bzw. es lag nur an der Trägheit des Auges?

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    49
    Beiträge
    2.442
    Für das menschliche Auge war der Code falsch. Der Smily hat mit knapp 500Hz geblinzelt. Mit einer entsprechenden Kamera hätte man das aufnehmen können.
    Im Prinzip hast Du einen Film mit 2 verschiedenen Bildern und knapp 1000 Bildern pro Sekunde.(nur die Delays ohne die eigentliche Zeit zum Codeausführen gerechnet)

Ähnliche Themen

  1. Aus der Zahl 8 wird ein Smiley
    Von pinsel120866 im Forum Anregungen/Kritik/Fragen zum Forum und zum Wiki RN-Wissen
    Antworten: 3
    Letzter Beitrag: 21.05.2013, 08:52
  2. der :) smiley !
    Von da_miez3 im Forum Offtopic und Community Tratsch
    Antworten: 14
    Letzter Beitrag: 18.02.2013, 23:04
  3. LED MATRIX
    Von Beta im Forum Elektronik
    Antworten: 7
    Letzter Beitrag: 01.06.2009, 22:47
  4. 8x8 Matrix ?
    Von whynot im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 13.07.2008, 23:33

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •