Hi
2.ter Versuch . ich sollte langsam lernen, daß man dem Forum NICHT trauen kann - STRG+A & STRG + V sollten bei keinem Post fehlen ... man wird halt weich, wenn's wieder ein paar Mal geklappt hat ... grmpfl
Ne ... oder??? DAS war nur der 'Du bist kein Roboter'-Scheiß??
Schreikrampf unterdrück
Edit
Vorweg: Es klappt (so) nicht! Also der Sketch hier im Eröffnungs-Post.
Einzelne Punkte in Heller gibt's in #8
Vier Texte, Die durchgescrollt werden, in #9
Lib:
[download]: "Download Max72xxPanel library", github, markruys
Der Sketch ist eine Konstellation aus den Beispielen 'Ticker' und 'MadFly' - allerdings auf millis() umgeschrieben.
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Max72xxPanel.h>
int pinCS = 10; // Attach CS to this pin, DIN to MOSI and CLK to SCK (cf http://arduino.cc/en/Reference/SPI )
int numberOfHorizontalDisplays = 4; //DIN=MOSI=D11 an Nano/Uno
int numberOfVerticalDisplays = 1;
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);
String tape = "Arduino";
const uint16_t wait = 573; // In milliseconds
const uint16_t flywait = 100;
int spacer = 1;
int width = 5 + spacer; // The font width is 5 pixels
void setup() {
Serial.begin(9600);
matrix.setIntensity(7); // Use a value between 0 and 15 for brightness
// Adjust to your own needs
matrix.setPosition(0, 0, 0); // (Display-Nr ab Einspeisung, X, Y)
matrix.setPosition(1, 1, 0);
matrix.setPosition(2, 2, 0);
matrix.setPosition(3, 3, 0);
// ...
matrix.setRotation(0, 1); // (Display-Nr, Drehung je 90°)
matrix.setRotation(1, 1);
matrix.setRotation(2, 1);
matrix.setRotation(3, 1);
}
void loop() {
static byte sensitiv = 0; //Stärke/Helligkeit der Anzeige, wird schrittweise angehoben
uint32_t aktmillis = millis(); //'meine' aktuelle Uhrzeit
static uint32_t lastchar = 0; //letzte Weiterschiebung des Lauftext
static byte i = 26; //An welcher Stelle stehen wir? (Start hier nicht Null, Debug)
if (aktmillis - lastchar > wait) {
lastchar = aktmillis; //nach der Wartezeit wird die Laufschrift um 1 Pixel verschoben
i++; //die Uhrzeit gesichert (ok, anders herum)
if (i >= width * tape.length() + matrix.width() - 1 - spacer) i = 0; //und am oberen Ende auf Null umgebrochen
}
//Bereich aus dem Ticker-Beispiel
matrix.fillScreen(LOW); //Display leeren
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 < tape.length() ) {
matrix.drawChar(x, y, tape[letter], HIGH, LOW, 1); //An Position den Buchstaben schreiben
}
letter--;
x -= width;
}
//Das Schreiben des Lauftext passierte nur im Puffer der Lib, noch wurde Nichts ausgegeben!
matrix.setIntensity(sensitiv); //Helligkeit auf den aktuellen Wert setzen (Helligkeit der Fliege ändert sich)
matrix.write(); // Send bitmap to display - da zuvor der Puffer gelöscht wurde, ist die Fliege nun weg.
static uint32_t lastfly = 0; //Die Fliege, letzte Uhrzeit der Fliege
static byte _x = 0; //Koordinaten, jede Fliege braucht Koordinaten :)
static byte _y = 0;
if (aktmillis - lastfly > flywait) {
lastfly = aktmillis; //Nach Fliegenwartezeit, wird die Fliege versetzt
byte xold = _x;
byte yold = _y;
while (_x == xold && _y == yold) { //und zwar so lange, bis Diese wirklich versetzt wurde
byte richtung = random(4);
switch (richtung) {
case 0: if (_x) _x--; break;
case 1: if (_x < 31) _x++; break;
case 2: if (_y) _y--; break;
case 3: if (_y < 7) _y++; break;
}
}
}
matrix.fillScreen(LOW); //Display leeren
matrix.drawPixel(_x, _y, 1); //Fliege setzen
matrix.write(); // Send bitmap to display
matrix.setIntensity(15); //Helligkeit auf MAXIMUM, die Fliege ist jetzt ganz hell!
static uint32_t lastsensitiv = 0; //die Intensität alle x Millisekunden anheben (0...15)
if (aktmillis - lastsensitiv >= 500) {
lastsensitiv = aktmillis;
sensitiv++;
sensitiv &= 0x0F; //auf 4 Bit (0...15) begrenzen - eine 16 wird zur 0.
Serial.println(sensitiv);
}
}
Sowohl die Fluggeschwindigkeit der Fliege, wie die Laufgeschwindigkeit des Text ist im Sketch einstellbar.
Die Schrittzeit der Helligkeitsänderung ist fest auf 500ms, sollte kein Problem sein, Das anzupassen.
Die Fliege ist super hell, der Text, je nach Helligkeit (läuft ja hoch), immer heller.
Leider zerbröselt Es mir den Text, ich bekomme Flimmern auf einzelne der 8x8er Matrix-Displays.
Dürfte eine Schwebung aus den laufend einprasselnden neuen Daten und der internen Frequenz des MAX sein - sieht auf jeden Fall nicht sonderlich schön aus - für eine weniger aufdringliche Information unter einem hellen Punkt so nicht zu gebrauchen.
Wer will, kann's ja Mal einspielen, das Display wird bei mir über den per USB versorgten Arduino Nano bestromt - Das klappt NICHT, wenn der Arduino per V_in versorgt wird!!
(und ist auch nicht die feine englische Art ... also nicht nachmachen, da der ganze Display-Strom über die Nano-Leiterbahnen drüber muß)
MfG