INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Laufschrift mit RGB-LEDs
29.03.2015, 11:37
Beitrag #1
Laufschrift mit RGB-LEDs
Hallo miteinander. Ich brauche ein neues Projekt und möchte mir gerne eine Laufschrifttafel bauen. Dafür wollte ich WS2812 RGB-LED-Stripes verwenden. Die Tafel soll eine Auflösung von 50x7 Pixeln haben. Die LED-Stripes wollte ich je an einen digitalen Anschluss des µControllers anschliessen und sie so steuern. Ich bin derzeit allerdings vollkommen ideenlos wie ich die Programmierung bewerkstelligen kann/soll. Buchstaben hintereinader anzeigen lassen würde ich noch hinbekommen, aber dass sie nacheinander in das "Bild" laufen und danach auf der anderen Seite wieder raus? Keine Ahnung. Könnt ihr mir da Tipps in eine Richtung geben wie ich das bewerkstelligen könnte?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.03.2015, 12:30
Beitrag #2
RE: Laufschrift mit RGB-LEDs
Hi,
dann fang doch erstmal damit an, Buchstaben hintereinander anzeigen zu lassen. Das ist schonmal schwierig genug. Wenn das funktioniert, dann kannst Du immer noch weitermachen.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.03.2015, 11:41
Beitrag #3
RE: Laufschrift mit RGB-LEDs
(29.03.2015 11:37)scritch schrieb:  Hallo miteinander. Ich brauche ein neues Projekt und möchte mir gerne eine Laufschrifttafel bauen. Dafür wollte ich WS2812 RGB-LED-Stripes verwenden. Die Tafel soll eine Auflösung von 50x7 Pixeln haben. Die LED-Stripes wollte ich je an einen digitalen Anschluss des µControllers anschliessen und sie so steuern. Ich bin derzeit allerdings vollkommen ideenlos wie ich die Programmierung bewerkstelligen kann/soll. Buchstaben hintereinader anzeigen lassen würde ich noch hinbekommen, aber dass sie nacheinander in das "Bild" laufen und danach auf der anderen Seite wieder raus? Keine Ahnung. Könnt ihr mir da Tipps in eine Richtung geben wie ich das bewerkstelligen könnte?

Hi,
also ich habe eine Laufschrift auf diesen 8x8 Matrixdisplays am laufen.
Die Vorgehensweise ist die das ich aus dem Zeichengenerator die Bitmap der auszugebenden Zeichen nacheinander in ein Eindimensionales Array schreibe. Und beim Auslesen inkrementieren ich eben so alle 50mS oder auch langsamer den Zeiger der auf den zu lesenden Wert im Array zeigt während ich beim Display immer auf der 1.Position mit schreiben anfange.... so scrollt dann das ganze Bitmuster durch...
lg
bk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.03.2015, 16:36
Beitrag #4
RE: Laufschrift mit RGB-LEDs
Hallo zusammen. Ich habe nochmal nachgedacht und bin zu einem vorzeitigen Lösungsansatz gekommen. Vorweg: Ich benutze WS2812 RGB-LEDs und steuere diese mit der Biliothek von Adafruit. Wie schon erwähnt soll die Tafel 50x7 Pixel groß werden. Die Buchstaben möchte ich nach diesem Shema darstellen:
http://www.mikrocontroller.net/attachmen...rtable.png
Hinter jedem Buchstaben wird immer eine leere Spalte eingefügt um den Abstand zwischen den Buchstaben zu wahren.

Für die Laufschrift habe ich folgende Idee: Die Buchstaben sollen von rechts nach links eingeschoben werden. Ich beginne also mit der ersten Spalte des Buchstaben diesen auf der letzten LED eines jeden Stripes anzuzeigen. Ist dies geschehen kann ich den Status einer jeden LED auf die LED links daneben "kopieren" und damit beginnen die 2. Spalte des Buchstaben auf der letzten LED eines jeden Stripes zum leuchten zu bringen (entsprechnd der Buchstabenmatrix).

Für den Buchstaben "A" sähe das dann so aus:

1 --------------------------------------------------
2 -------------------------------------------------*
3 -------------------------------------------------*
4 -------------------------------------------------*
5 -------------------------------------------------*
6 -------------------------------------------------*
7 -------------------------------------------------*

Es braucht 7 Wiederholungen bis ein Buchstabe komplett ist plus eine weitere für den Abstand.

Ein "A" sähe Codemäßig (noch) so aus:
strip1.setPixelColor(letzter_pixel, 0, 0, 0);
strip2.setPixelColor(letzter_pixel, 255, 0, 0);
strip3.setPixelColor(letzter_pixel, 255, 0, 0);
strip4.setPixelColor(letzter_pixel, 255, 0, 0);
strip5.setPixelColor(letzter_pixel, 255, 0, 0);
strip6.setPixelColor(letzter_pixel, 255, 0, 0);
strip7.setPixelColor(letzter_pixel, 255, 0, 0);

//Funktionsaufruf für das Kopieren der LED-Status auf die linke LED

strip1.setPixelColor(letzter_pixel, 255, 0, 0);
strip2.setPixelColor(letzter_pixel, 0, 0, 0);
strip3.setPixelColor(letzter_pixel, 0, 0, 0);
strip4.setPixelColor(letzter_pixel, 0, 0, 0);
strip5.setPixelColor(letzter_pixel, 255, 0, 0);
strip6.setPixelColor(letzter_pixel, 0, 0, 0);
strip7.setPixelColor(letzter_pixel, 0, 0, 0);

//Funktionsaufruf

strip1.setPixelColor(letzter_pixel, 255, 0, 0);
strip2.setPixelColor(letzter_pixel, 0, 0, 0);
strip3.setPixelColor(letzter_pixel, 0, 0, 0);
strip4.setPixelColor(letzter_pixel, 0, 0, 0);
strip5.setPixelColor(letzter_pixel, 255, 0, 0);
strip6.setPixelColor(letzter_pixel, 0, 0, 0);
strip7.setPixelColor(letzter_pixel, 0, 0, 0);

//Funktionsaufruf

strip1.setPixelColor(letzter_pixel, 255, 0, 0);
strip2.setPixelColor(letzter_pixel, 0, 0, 0);
strip3.setPixelColor(letzter_pixel, 0, 0, 0);
strip4.setPixelColor(letzter_pixel, 0, 0, 0);
strip5.setPixelColor(letzter_pixel, 255, 0, 0);
strip6.setPixelColor(letzter_pixel, 0, 0, 0);
strip7.setPixelColor(letzter_pixel, 0, 0, 0);

//Funktionsaufruf

strip1.setPixelColor(letzter_pixel, 0, 0, 0);
strip2.setPixelColor(letzter_pixel, 255, 0, 0);
strip3.setPixelColor(letzter_pixel, 255, 0, 0);
strip4.setPixelColor(letzter_pixel, 255, 0, 0);
strip5.setPixelColor(letzter_pixel, 255, 0, 0);
strip6.setPixelColor(letzter_pixel, 255, 0, 0);
strip7.setPixelColor(letzter_pixel, 255, 0, 0);

//Funktionsaufruf

strip1.setPixelColor(letzter_pixel, 0, 0, 0);
strip2.setPixelColor(letzter_pixel, 0, 0, 0);
strip3.setPixelColor(letzter_pixel, 0, 0, 0);
strip4.setPixelColor(letzter_pixel, 0, 0, 0);
strip5.setPixelColor(letzter_pixel, 0, 0, 0);
strip6.setPixelColor(letzter_pixel, 0, 0, 0);
strip7.setPixelColor(letzter_pixel, 0, 0, 0);

Wobei mir das nicht wirklich gefällt, da ich das ja für jeden Buchstaben erstellen muss. Kann ich das irgendwie in ein Array packen? Mir ist noch nichts gescheites eingefallen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.03.2015, 16:55
Beitrag #5
RE: Laufschrift mit RGB-LEDs
Hi,
ich weiß nicht, ob Du da am Ende nicht den Speicher überforderst. Die Adafruit-Lib wird für 50*7 LEDs schon 50*7*3 = 1050 Byte brauchen.
Die Buchstaben würde ich jeweils in einem 6er Byte-Array speichern. (Also byte buchstabe[6]). Jedes Byte wäre dann eine Spalte (Zeilenweise würdest Du mehr Platz verschwenden.) Die einzelnen Bits in den Bytes sind dann die Bildpunkte. Das ganze lässt sich recht komfortabel mit bitRead oder so auslesen.
Das ganze Alphabet wäre dann ein Array von solchen Buchstaben-Arrays. Also in etwa byte alphabet[26][6].
Damit man damit nicht auch noch das SRAM belastet, sollte man das allerdings ins PROGMEM oder ins EEPROM legen.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.04.2015, 13:51
Beitrag #6
RE: Laufschrift mit RGB-LEDs
Hallo Thorsten. Danke für deine Anregung. Allerdings verstehe ich das noch nicht so ganz. Kannst du deine Aussage ggf. in einem Beispiel für zwei Spalten für den Buchstaben "A" darstellen? Smile
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.04.2015, 14:12
Beitrag #7
RE: Laufschrift mit RGB-LEDs
Hi,
die ersten zwei Spalten von A wären
00111111
01000100
Das ist Binär, was das Dezimal ist musst Du Dir selbst ausrechnen. Zur Not mit dem "Programmierer"-View vom Windows-Calc.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.04.2015, 19:33 (Dieser Beitrag wurde zuletzt bearbeitet: 01.04.2015 19:33 von scritch.)
Beitrag #8
RE: Laufschrift mit RGB-LEDs
So, ich stoße wieder an meine Grenzen. Deiner Empfehlung nach speichere ich die Spalten der Buchstaben nun in byte-Variablen. Ich möchte dann später die bits dieser bytes auslesen und dann entsprechend mit einer if-anweisung verfahren und die entsprechenden Pixel zum leuchten bringen. Nun weiss ich aber nicht wie ich den Status eines bits in dem byte in der Spalte eines Buchstabes auslesen kann. bitRead ist irgendwie nicht das richtige. Jedenfalls weiss ich es nicht anzuwenden. Ich habe z. B den Buchstaben "H":

byte buchstabe_H[6] = {1111111, 0001000, 0001000, 0001000, 1111111, 0000000};

Nun möchte ich den Status des ersten Bits des ersten bytes herausfinden. Wie schaffe ich das?

Mein bisheriges Skript:

Code:
#include <Adafruit_NeoPixel.h>

#define PIN_1 A0//
#define PIN_2 16
#define PIN_3 15
#define PIN_4 14
#define PIN_5 10
#define PIN_6 A1
#define PIN_6 A2

#define NUMPIXELS      7 //vorerst für den Prototypen

Adafruit_NeoPixel stripe_1 = Adafruit_NeoPixel(NUMPIXELS, PIN_1, NEO_GRB + NEO_KHZ800);//die bezeichnung der Stripes kann verändert werden. so kann man diese auch in einer Zählerschleife ansprechen
Adafruit_NeoPixel stripe_2 = Adafruit_NeoPixel(NUMPIXELS, PIN_2, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel stripe_3 = Adafruit_NeoPixel(NUMPIXELS, PIN_3, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel stripe_4 = Adafruit_NeoPixel(NUMPIXELS, PIN_4, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel stripe_5 = Adafruit_NeoPixel(NUMPIXELS, PIN_5, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel stripe_6 = Adafruit_NeoPixel(NUMPIXELS, PIN_6, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel stripe_7 = Adafruit_NeoPixel(NUMPIXELS, PIN_6, NEO_GRB + NEO_KHZ800);

Adafruit_NeoPixel stripes[] = { stripe_1, stripe_2, stripe_3, stripe_4,stripe_5, stripe_6, stripe_7};

int num_spalten = 7;
byte Spalte_1; byte Spalte_2; byte Spalte_3; byte Spalte_4; byte Spalte_5; byte Spalte_6; byte Spalte_7;
byte spalten[] = {Spalte_1, Spalte_2, Spalte_3, Spalte_4, Spalte_5, Spalte_6, Spalte_7};

//byte buchstabe_A[6] = {0111111, 1000100, 1000100, 1000100, 0111111, 0000000};
byte buchstabe_H[6] = {1111111, 0001000, 0001000, 0001000, 1111111, 0000000};
char buchstabe = ' ';

char text[5] = {'H', 'a', 'l', 'l', 'o'};

void setup() {
Serial.begin(9600);
}

void loop(){
  delay(3000);
  //for schleife für den text
  for(int i=0; i<5; i++){ //erstmal nur provisorisch, damit die buchstaben für den text nacheinander in eine variable für die auswertung das switch-case verarbeitet werden können
    buchstabe = text[i];
    switch(buchstabe){
      case 'H':
        _anzeigen(buchstabe_H[0], buchstabe_H[1], buchstabe_H[2], buchstabe_H[3], buchstabe_H[4], buchstabe_H[5], buchstabe_H[6]);
        
        Serial.print('H');
        Serial.print("\t");
        delay(10);
      break;
      
      case 'a':
        
      break;
    }
  }
}


void _anzeigen(byte Spalte_1, byte Spalte_2, byte Spalte_3, byte Spalte_4, byte Spalte_5, byte Spalte_6, byte Spalte_7){
  for(int i=0; i<num_spalten; i++){
     //bitRead(spalten[i], 1);
     //for-Schleife für jedes bit. Wenn fertig dann folgt nächstes byte
      //IF-Anweisung: Wenn ausgelesene bit = 0 dann
        //lässt die letzte LED des ersten Stripes nicht leuchten
      //else
        //lässt die LED des ersten Stripes leuchten (Stichwort: stripes[i].setPixelColor(j, stripes[i].Color(rot, gruen, blau)); <--- bei stripes wird mit dem Arrayindex von "spalten" gearbeitet.)
      
    //Funktionsaufruf welche alle Status aller LEDs nach links rückt, damit der Einrückeffekt zustande kommt.
      Serial.print(bitRead(spalten[i], 3));
      Serial.print("\t");
      delay(10);
    
  }
  
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Pulsierende LEDs KBLc 4 186 20.10.2016 22:35
Letzter Beitrag: hotsystems
  WS2812 Helligkeit einzelner LEDs steuern mavericklp 3 660 11.03.2016 09:32
Letzter Beitrag: torsten_156
  Leds blinken lassen mit if-Abfrage und millis ferdi 11 1.521 24.10.2015 08:54
Letzter Beitrag: Bitklopfer
  RGB Wechsler - LEDs flackern Sesselmann 3 1.359 22.05.2015 17:07
Letzter Beitrag: Sesselmann
  Switch Case, LEDs bleiben an, Bedingung aber falsch luto92 4 1.446 16.11.2014 16:52
Letzter Beitrag: luto92
Brick Taster und Leds Hilfe bei dem Code max800000 8 2.587 21.07.2014 12:20
Letzter Beitrag: fp.blues2013
  Wie LEDs durch Taster schalten Alessandra 1 1.615 05.01.2014 16:50
Letzter Beitrag: derdemo
  Laufschrift auf SainSmart LCD Keypad Shield wally57214 6 8.271 27.12.2013 20:32
Letzter Beitrag: kraweuschuasta

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste