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
LED Informationstafel
24.11.2014, 10:42
Beitrag #1
LED Informationstafel
Hallo Arduino-Community,

Ich bin bei meinem Projekt leider schon an meine Grenzen gestoßen. Die Programmierung ist wohl doch etwas schwieriger als gedacht.
Ich habe 8 Streifen WS2812 untereinander verbunden und Text kann ich auch anzeigen lassen. Ziel ist es aber über den seriellen Monitor vom Computer aus den Text zu schicken, sodass dieser angezeigt wird. Ich hoffe ihr könnt mir helfen.

Code:
// Adafruit_NeoMatrix example for single NeoPixel Shield.
// Scrolls 'Howdy' across the matrix in a portrait (vertical) orientation.

#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
#ifndef PSTR
#define PSTR // Make Arduino Due happy
#endif

#define PIN 6

// MATRIX DECLARATION:
// Parameter 1 = width of NeoPixel matrix
// Parameter 2 = height of matrix
// Parameter 3 = pin number (most are valid)
// Parameter 4 = matrix layout flags, add together as needed:
//   NEO_MATRIX_TOP, NEO_MATRIX_BOTTOM, NEO_MATRIX_LEFT, NEO_MATRIX_RIGHT:
//     Position of the FIRST LED in the matrix; pick two, e.g.
//     NEO_MATRIX_TOP + NEO_MATRIX_LEFT for the top-left corner.
//   NEO_MATRIX_ROWS, NEO_MATRIX_COLUMNS: LEDs are arranged in horizontal
//     rows or in vertical columns, respectively; pick one or the other.
//   NEO_MATRIX_PROGRESSIVE, NEO_MATRIX_ZIGZAG: all rows/columns proceed
//     in the same order, or alternate lines reverse direction; pick one.
//   See example below for these values in action.
// Parameter 5 = pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)


// Example for NeoPixel Shield.  In this application we'd like to use it
// as a 5x8 tall matrix, with the USB port positioned at the top of the
// Arduino.  When held that way, the first pixel is at the top right, and
// lines are arranged in columns, progressive order.  The shield uses
// 800 KHz (v2) pixels that expect GRB color data.
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(39, 8, PIN,
  NEO_MATRIX_TOP     + NEO_MATRIX_LEFT +
  NEO_MATRIX_ROWS + NEO_MATRIX_PROGRESSIVE,
  NEO_GRB            + NEO_KHZ800);

const uint16_t colors[] = {
  matrix.Color(100, 0, 0), matrix.Color(0, 100, 0), matrix.Color(0, 0, 100) };

String inText = "";
int l = 0;


void setup() {
  matrix.begin();
  matrix.setTextWrap(false);
  matrix.setBrightness(40);
  matrix.setTextColor(colors[0]);
  Serial.begin(9600);
}

int x    = matrix.width();
int pass = 0;

void loop()
{
  if (inText !="")
  {
    Serial.print("Text:   ");
    Serial.println(inText);
    Serial.print("Laenge: ");
    Serial.println(l);
    inText = "";
  }
  {
  matrix.fillScreen(0);
  matrix.setCursor(x, 0);
  matrix.print(inText);  // abgebildeter Text
  if(--x < -80) {            //Gesamtweite des möglichen Textes
    x = matrix.width();
    if(++pass >= 3) pass = 0;  //Anzahl der Farbdurchläufe
    matrix.setTextColor(colors[pass]);
  }
  matrix.show();
  delay(100);
}
}

void serialEvent()
{
  l = 0;
  while (Serial.available() > 0)
  {
    char inChar = Serial.read();
    inText += inChar;
    delay(3);
    l++;
  }
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.11.2014, 11:50
Beitrag #2
RE: LED Informationstafel
Hi,
Du löschst den Text jedes Mal bevor das "Matrix"-Coding überhaupt anfängt.
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
28.11.2014, 08:23
Beitrag #3
RE: LED Informationstafel
Hallo,

so wie sich das anhört sollte ich also eine codezeile löschen? Oder gestaltet sich das Projekt doch schwieriger als gedacht?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.11.2014, 09:43
Beitrag #4
RE: LED Informationstafel
Hi,
ich würde folgendes Ändern:
Code:
void loop()
{
   if (inText !="")
   {
     Serial.print("Text:   ");
     Serial.println(inText);
     Serial.print("Laenge: ");
     Serial.println(l);
     inText = "";           // <<<<<< diese Zeile weg
   }                             // <<<<<< diese auch
   {                             // <<<<<< und auch diese
   matrix.fillScreen(0);
   matrix.setCursor(x, 0);
   matrix.print(inText);  // abgebildeter Text
    inText = "";           // <<<<<< diese Zeile einfügen
   if(--x < -80) {            //Gesamtweite des möglichen Textes
     x = matrix.width();
     if(++pass >= 3) pass = 0;  //Anzahl der Farbdurchläufe
     matrix.setTextColor(colors[pass]);
   }
   matrix.show();
   delay(100);       // <<<< diese Zeile weg
}
}

Das Löschen von inText darfst Du erst machen, wenn Du es ausgegeben hast, sonst gibst Du nichts aus.
Außerdem würde ich die Ausgabe auf dem Display nur machen, wenn es auch was auszugeben gibt.
Dann noch das delay() weg. Ich glaube, dass serialEvent() keine Interrupt-Routine ist, sondern immer erst nach dem loop() aufgerufen wird. Dadurch könnte was verloren gehen, wenn Du die loop() zu lange machst.

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.12.2014, 13:47
Beitrag #5
RE: LED Informationstafel
Hallo Thorsten, du bist der beste =)
Die Eingabe über den Serial Monitor gibt mir schon Buchstaben aus, diese werden aber immer nur ein segment bei mir weitergeschoben.
Also ich gebe ein:"A Enter A Enter A Enter...." mit jedem Enter wird der Buchstabe A nur eine LED Spalte bei mir weiter in das Display geschoben. Die Vorstellung war eigentlich das es wie eine Laufschrift durchläuft, bis ein neuer Satz in den Serial Monitor eingegeben wird.
Code:
void loop()
{
  if (inText !="")
  {
    Serial.print("Text:   ");
    Serial.println(inText);
    Serial.print("Laenge: ");
    Serial.println(l);
  matrix.fillScreen(0);
  matrix.setCursor(x, 0);
  matrix.print(inText);  // abgebildeter Text
  inText = "";
  if(--x < -10) {            //Gesamtweite des möglichen Textes/////möglicher Fehler?
    x = matrix.width();
    if(++pass >= 3) pass = 0;  //Anzahl der Farbdurchläufe
    matrix.setTextColor(colors[pass]);
  }
  matrix.show();
}
}

Ich hoffe jemand versteht, was das Gesamtziel ist


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.12.2014, 14:52
Beitrag #6
RE: LED Informationstafel
Hi,
Du willst also eine Laufschrift machen, der man über den seriellen Port den anzuzeigenden Text mitgeben kann.
Das ist ein kleines bisschen komplizierter.
Aber erstmal warum das mit dem Weiterlaufen nicht funktioniert: Das liegt daran, dass Du den Text jedesmal nach der Ausgabe löschst. D.h. bei der nächsten Iteration macht das Teil einfach nichts mehr. Erst wenn wieder was eingegeben wird, geht es weiter.
So, jetzt zum Lösungsansatz. Ich würde es so machen:
Schreib' Dir erstmal einen Sketch, der einen fix vorgegebenen ("hardcoded") Text durchlaufen lässt.
Dann schreib Dir einen anderen Sketch, der die Problematik mit der Eingabe von mehreren Zeichen über die serielle Schnittstelle löst. Ich denke, Du musst dazu mit einem definierten Ende-Zeichen arbeiten, wie z.B. CHR(13).
Wenn Du das beides hinbekommen hast, dann musst Du die beiden Sketches "nur noch" zusammenbringen. Aber da sehen wir dann weiter.
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
05.01.2015, 13:26
Beitrag #7
RE: LED Informationstafel
Habe jetzt versucht mal 2 sketche zusammen zu packen. Habe es aber mit einer anderen Vorlage gemacht, bei der ich dachte es könnte funktionieren. Habe aber leider einige Fehlermeldungen erhalten. Vlt. kann mir ja bitte noch einmal jemand helfen, damit ich auf meine LED Matrix über den den seriellen Monitor einen Text zu senden.

Code:
// Adafruit_NeoMatrix example for single NeoPixel Shield.
// Scrolls 'Howdy' across the matrix in a portrait (vertical) orientation.

#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
#include <Max72xxPanel.h>
#ifndef PSTR
#define PSTR // Make Arduino Due happy
#endif

#define PIN 6  // Ausgangspin

// MATRIX DECLARATION:
// Parameter 1 = width of NeoPixel matrix
// Parameter 2 = height of matrix
// Parameter 3 = pin number (most are valid)
// Parameter 4 = matrix layout flags, add together as needed:
//   NEO_MATRIX_TOP, NEO_MATRIX_BOTTOM, NEO_MATRIX_LEFT, NEO_MATRIX_RIGHT:
//     Position of the FIRST LED in the matrix; pick two, e.g.
//     NEO_MATRIX_TOP + NEO_MATRIX_LEFT for the top-left corner.
//   NEO_MATRIX_ROWS, NEO_MATRIX_COLUMNS: LEDs are arranged in horizontal
//     rows or in vertical columns, respectively; pick one or the other.
//   NEO_MATRIX_PROGRESSIVE, NEO_MATRIX_ZIGZAG: all rows/columns proceed
//     in the same order, or alternate lines reverse direction; pick one.
//   See example below for these values in action.
// Parameter 5 = pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)


// Example for NeoPixel Shield.  In this application we'd like to use it
// as a 5x8 tall matrix, with the USB port positioned at the top of the
// Arduino.  When held that way, the first pixel is at the top right, and
// lines are arranged in columns, progressive order.  The shield uses
// 800 KHz (v2) pixels that expect GRB color data.
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(39, 8, PIN,
  NEO_MATRIX_TOP     + NEO_MATRIX_LEFT +
  NEO_MATRIX_ROWS + NEO_MATRIX_ZIGZAG,
  NEO_GRB            + NEO_KHZ800);

const uint16_t colors[] = {
  matrix.Color(100, 100, 100), matrix.Color(0, 100, 0), matrix.Color(0, 0, 100) };  //Farbkombinationsdurchläufe

int spacer = 1;  // Space between two characters
int width = 5 + spacer; // The font width is 5 pixels
boolean inChar = false, NewData = false, pause = false;
boolean dataAvailable = false;
char inputString[512];
int count = 0, BTvalue = 5;

void setup() {
  matrix.begin();
  matrix.setTextWrap(false);  //buchstaben laufen von hinten flüssig ins bild; bei true springt jeder Buchstabe einzeln rein
  matrix.setBrightness(40);  // Gesamthelligkeit
  matrix.setTextColor(colors[0]);
  matrix.fillScreen(0);
  matrix.write();
  Serial.begin(9600); // serial communication initialize
}

int x    = matrix.width();
int pass = 0;

void loop(){
if(dataAvailable){
  display_data();
}
}

void display_data() {
  matrix.setCursor(x, 0);
for ( int i = 0 ; i < width * count + matrix.width() - 1 - spacer; i++ ) {

    matrix.fillScreen(0);

    int letter = i / width;
    int x = (matrix.width() - 1) - i % width;
    int y = (matrix.height() - 8) / 2; // center the text vertically

    while ( x + width - spacer >= 0 && letter >= 0 ) {
      if ( letter < count ) {
        matrix.drawChar(x, y, inputString[letter], HIGH, LOW, 1);
      }

      letter--;
      x -= width;
    }
        matrix.write(); // Send bitmap to display
    if(!dataAvailable){
      i = width * count + matrix.width() - 1 - spacer;
      matrix.fillScreen(LOW);
      matrix.write();
    }
    if(NewData){
      i = 0;
      matrix.fillScreen(LOW);
      matrix.write();
      NewData = false;
    }
  matrix.show();
  delay(100);  //Geschwindigkeit des Text-Durchlaufes
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.01.2015, 13:57
Beitrag #8
RE: LED Informationstafel
Hi,
es würde helfen, wenn Du uns diese Fehlermeldungen auch zeigst...
Ansonsten: Ich denke mal, dass Dein Sketch nichts anzeigt, da Du den inputString ja nie füllst, oder?
Ich würde Dir empfehlen, den von mir empfohlenen Weg zu gehen: Erstmal einen Sketch, der einen festen Text durchscrollt und dann einen, der das mit der seriellen Kommunikation löst (ohne Display).
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
Antwort schreiben 


Gehe zu:


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