Go Down

Topic: Arduino uno 8x8 LED max7219 (Read 4956 times) previous topic - next topic

agmue

#30
Nov 15, 2015, 12:14 pm Last Edit: Nov 15, 2015, 03:31 pm by agmue
Die Variante ohne Testausgaben (ungetestet):
Code: [Select]

const byte maxInUse = 1;        // Anzahl der MAX7219-Anzeigen (8x8-Matrix)
const byte DIN = 8;   // verbunden mit DIN
const byte CS  = 9;   // verbunden mit CS,
const byte CLK = 10;  // verbunden mit CLK
MaxMatrix m(DIN, CS, CLK, maxInUse);

const unsigned char CH[] PROGMEM = {
  3, B00000000, B00000000, B00000000, B00000000, B00000000, // space
  1, B01011111, B00000000, B00000000, B00000000, B00000000, // |
  3, B00000011, B00000000, B00000011, B00000000, B00000000, // "
  5, B00010100, B00111110, B00010100, B00111110, B00010100, // #
  4, B00100100, B01101010, B00101011, B00010010, B00000000, // $
  5, B01100011, B00010011, B00001000, B01100100, B01100011, // %
  5, B00110110, B01001001, B01010110, B00100000, B01010000, // &
  1, B00000011, B00000000, B00000000, B00000000, B00000000, // '
  3, B00011100, B00100010, B01000001, B00000000, B00000000, // (
  3, B01000001, B00100010, B00011100, B00000000, B00000000, // )
  5, B00101000, B00011000, B00001110, B00011000, B00101000, // *
  5, B00001000, B00001000, B00111110, B00001000, B00001000, // +
  2, B10110000, B01110000, B00000000, B00000000, B00000000, // ,
  4, B00001000, B00001000, B00001000, B00001000, B00000000, // -
  2, B01100000, B01100000, B00000000, B00000000, B00000000, // .
  4, B01100000, B00011000, B00000110, B00000001, B00000000, // /
  4, B00111110, B01000001, B01000001, B00111110, B00000000, // 0
  3, B01000010, B01111111, B01000000, B00000000, B00000000, // 1
  4, B01100010, B01010001, B01001001, B01000110, B00000000, // 2
  4, B00100010, B01000001, B01001001, B00110110, B00000000, // 3
  4, B00011000, B00010100, B00010010, B01111111, B00000000, // 4
  4, B00100111, B01000101, B01000101, B00111001, B00000000, // 5
  4, B00111110, B01001001, B01001001, B00110000, B00000000, // 6
  4, B01100001, B00010001, B00001001, B00000111, B00000000, // 7
  4, B00110110, B01001001, B01001001, B00110110, B00000000, // 8
  4, B00000110, B01001001, B01001001, B00111110, B00000000, // 9
  2, B01010000, B00000000, B00000000, B00000000, B00000000, // :
  2, B10000000, B01010000, B00000000, B00000000, B00000000, // ;
  3, B00010000, B00101000, B01000100, B00000000, B00000000, // <
  3, B00010100, B00010100, B00010100, B00000000, B00000000, // =
  3, B01000100, B00101000, B00010000, B00000000, B00000000, // >
  4, B00000010, B01011001, B00001001, B00000110, B00000000, // ?
  5, B00111110, B01001001, B01010101, B01011101, B00001110, // @
  4, B01111110, B00010001, B00010001, B01111110, B00000000, // A
  4, B01111111, B01001001, B01001001, B00110110, B00000000, // B
  4, B00111110, B01000001, B01000001, B00100010, B00000000, // C
  4, B01111111, B01000001, B01000001, B00111110, B00000000, // D
  4, B01111111, B01001001, B01001001, B01000001, B00000000, // E
  4, B01111111, B00001001, B00001001, B00000001, B00000000, // F
  4, B00111110, B01000001, B01001001, B01111010, B00000000, // G
  4, B01111111, B00001000, B00001000, B01111111, B00000000, // H
  3, B01000001, B01111111, B01000001, B00000000, B00000000, // I
  4, B00110000, B01000000, B01000001, B00111111, B00000000, // J
  4, B01111111, B00001000, B00010100, B01100011, B00000000, // K
  4, B01111111, B01000000, B01000000, B01000000, B00000000, // L
  5, B01111111, B00000010, B00001100, B00000010, B01111111, // M
  5, B01111111, B00000100, B00001000, B00010000, B01111111, // N
  4, B00111110, B01000001, B01000001, B00111110, B00000000, // O
  4, B01111111, B00001001, B00001001, B00000110, B00000000, // P
  4, B00111110, B01000001, B01000001, B10111110, B00000000, // Q
  4, B01111111, B00001001, B00001001, B01110110, B00000000, // R
  4, B01000110, B01001001, B01001001, B00110010, B00000000, // S
  5, B00000001, B00000001, B01111111, B00000001, B00000001, // T
  4, B00111111, B01000000, B01000000, B00111111, B00000000, // U
  5, B00001111, B00110000, B01000000, B00110000, B00001111, // V
  5, B00111111, B01000000, B00111000, B01000000, B00111111, // W
  5, B01100011, B00010100, B00001000, B00010100, B01100011, // X
  5, B00000111, B00001000, B01110000, B00001000, B00000111, // Y
  4, B01100001, B01010001, B01001001, B01000111, B00000000, // Z
  2, B01111111, B01000001, B00000000, B00000000, B00000000, // [
  4, B00000001, B00000110, B00011000, B01100000, B00000000, // backslash
  2, B01000001, B01111111, B00000000, B00000000, B00000000, // ]
  3, B00000010, B00000001, B00000010, B00000000, B00000000, // ^
  4, B01000000, B01000000, B01000000, B01000000, B00000000, // _
  2, B00000001, B00000010, B00000000, B00000000, B00000000, // `
  4, B00100000, B01010100, B01010100, B01111000, B00000000, // a
  4, B01111111, B01000100, B01000100, B00111000, B00000000, // b
  4, B00111000, B01000100, B01000100, B00101000, B00000000, // c
  4, B00111000, B01000100, B01000100, B01111111, B00000000, // d
  4, B00111000, B01010100, B01010100, B00011000, B00000000, // e
  3, B00000100, B01111110, B00000101, B00000000, B00000000, // f
  4, B10011000, B10100100, B10100100, B01111000, B00000000, // g
  4, B01111111, B00000100, B00000100, B01111000, B00000000, // h
  3, B01000100, B01111101, B01000000, B00000000, B00000000, // i
  4, B01000000, B10000000, B10000100, B01111101, B00000000, // j
  4, B01111111, B00010000, B00101000, B01000100, B00000000, // k
  3, B01000001, B01111111, B01000000, B00000000, B00000000, // l
  5, B01111100, B00000100, B01111100, B00000100, B01111000, // m
  4, B01111100, B00000100, B00000100, B01111000, B00000000, // n
  4, B00111000, B01000100, B01000100, B00111000, B00000000, // o
  4, B11111100, B00100100, B00100100, B00011000, B00000000, // p
  4, B00011000, B00100100, B00100100, B11111100, B00000000, // q
  4, B01111100, B00001000, B00000100, B00000100, B00000000, // r
  4, B01001000, B01010100, B01010100, B00100100, B00000000, // s
  3, B00000100, B00111111, B01000100, B00000000, B00000000, // t
  4, B00111100, B01000000, B01000000, B01111100, B00000000, // u
  5, B00011100, B00100000, B01000000, B00100000, B00011100, // v
  5, B00111100, B01000000, B00111100, B01000000, B00111100, // w
  5, B01000100, B00101000, B00010000, B00101000, B01000100, // x
  4, B10011100, B10100000, B10100000, B01111100, B00000000, // y
  3, B01100100, B01010100, B01001100, B00000000, B00000000, // z
  3, B00001000, B00110110, B01000001, B00000000, B00000000, // {
  1, B01111111, B00000000, B00000000, B00000000, B00000000, // |
  3, B01000001, B00110110, B00001000, B00000000, B00000000, // }
  4, B00001000, B00000100, B00001000, B00000100, B00000000, // ~

};

byte sprite[] = {0, 0, 0, 0, 0, 0, 0};
byte helligkeit = 0;    // Helligkeit der Matrix 0 - 15, dunkel - hell
byte anzeigePuffer[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};

int Speed;
int Gear;
int Rpm;
int RpmLeds;
int RpmMax = 8000;
int ShiftPoint = 4000;
int LimitRange = 0;
int UnderShiftPoint;
int OverShiftPoint;
int OverShift;
int UnderShift;
int buttonCheck = 1;
int bufferArray[12];

void setup() {
  m.init();
  m.setIntensity(helligkeit);
  m.clear();
  displayChar(anzeigePuffer[0], 2);
}

void loop() {
  if (Serial.available() == 12)  {
    int i;
    for (i = 0; i < 12; i = i + 1) { // read and label each byte.
      bufferArray[i] = Serial.read();
    }
    if (bufferArray[6] == 'G') {
      unsigned int gearSmTools = ((bufferArray[7] - 48) * 1);
      Gear = gearSmTools;
      if ((Gear > 0) && (Gear < 10)) {
        displayChar(anzeigePuffer[Gear], 2);
      }
    }
  }
}

void displayChar(byte zeichen, byte x) {
  memcpy_P(sprite + 1, CH + (zeichen - 32) * 6, 6);
  sprite[0] = sprite[1];
  sprite[1] = 8;
  m.clear();
  m.writeSprite(x, 0, sprite);
}
Wahnsinn und Verstand trennt nur eine dünne Wand. (Daniel Düsentrieb)

Kunde

nee mit diesem Code geht es garnicht.
bleibt bei null stehen.

agmue

#32
Nov 15, 2015, 02:16 pm Last Edit: Nov 15, 2015, 02:17 pm by agmue
Ich habe eine Zeile mit Serial.begin() zuviel gelöscht, komischerweise meckert der Compiler nicht. Also dann so:
Code: [Select]

void setup() {
  Serial.begin(9600);
  m.init();
Wahnsinn und Verstand trennt nur eine dünne Wand. (Daniel Düsentrieb)

michael_x

Quote
Serial.begin() zuviel gelöscht, komischerweise meckert der Compiler nicht
Warum sollte er?

Dass vermutlich nie  (Serial.available() == 12) erreicht werden wird, ist dem Compiler egal.

Den Vorspann
Code: [Select]
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
kannst du dir in .ino Dateien übrigens sparen.
 

agmue

Warum sollte er?
War halt meine naive Hoffnung, Seufz!  :smiley-roll:
Den Vorspann kannst du dir in .ino Dateien übrigens sparen.
Muß vom Themensteller da "hineingeschmuggelt" worden sein, hatte ich übersehen. Ist gelöscht, danke!
Wahnsinn und Verstand trennt nur eine dünne Wand. (Daniel Düsentrieb)

michael_x

Quote
War halt meine naive Hoffnung, Seufz!  :smiley-roll:
Du hast mit einem Compiler zu tun, der sogar bei
Code: [Select]
int i = 1;
if ( i=2 ) Serial.println("Na sowas");

sich nichts anmerken lässt und heimlich grinst ;)

agmue

Da ich ein Spezialist für Endlosschleifen bin, kann der Compiler bei meinen logischen Fehlern häufig grinsen. Ich hatte halt gehofft, Serial kann nur nach Serial.begin() genutzt werden, weil da der Puffer und die Zeiger angelegt werden. Falsch gedacht  :smiley-confuse:
Wahnsinn und Verstand trennt nur eine dünne Wand. (Daniel Düsentrieb)

michael_x

Quote
Serial kann nur nach Serial.begin() genutzt werden, weil da der Puffer und die Zeiger angelegt werden. Falsch gedacht
Serial kann nur nach Serial.begin() genutzt werden, weil da die Hardware-Register initialisiert werden.

Die Puffer werden, wie auch das Objekt HardwareSerial Serial;, schon bevor setup() aufgerufen wird, erzeugt.

Serenifly

Du hast mit einem Compiler zu tun, der sogar bei
Code: [Select]
int i = 1;
if ( i=2 ) Serial.println("Na sowas");

sich nichts anmerken lässt und heimlich grinst ;)
Wenn man die Warnungen einschaltet wird man drauf hingewiesen dass es eventuell falsch ist.

Code: [Select]

warning: suggest parentheses around assignment used as truth value [-Wparentheses]


Klammern sind allerdings nicht die Lösung...

Es gibt übrigens Anwendungen für eine Zuweisung in einer if-Abfrage. z.B. char aus dem PROGMEM auslesen und gleichzeitig abfragen ob das Byte NULL ist

Kunde

Jetzt Blicke nach so Fachgesprächen gar nicht mehr durch.
Die gänge werden jetzt angezeigt. Zwar noch mit 6sekunden Verzögerung, aber ich denke mal das das nichts mit dem Kodex zu tun hat.

Kunde

Kann ich denn nun den fertigen sketch RPM der im ersten Post ist,  mit dem fertigen den wir hier zusammen gestellt haben in einen sketch zusammen führen?

agmue

#41
Nov 15, 2015, 07:33 pm Last Edit: Nov 17, 2015, 09:16 pm by agmue Reason: Sketch in Datei verlagert
Jetzt Blicke nach so Fachgesprächen gar nicht mehr durch.
Für Dich ist nur #33 zweiter Teil relevant.
Die gänge werden jetzt angezeigt.
Ich würde sagen, Wochendziel erreicht!  :)
Kann ich denn nun den fertigen sketch RPM der im ersten Post ist,  mit dem fertigen den wir hier zusammen gestellt haben in einen sketch zusammen führen?
Also Matrix in TM1638-Sketch integrieren, meinst Du das? Ja, das geht. Allerdings würde ich vorher den Matrix-Sketch optimieren. Auf welchem Arduino läuft das denn, also wieviel Speicher steht zur Verfügung? Sollte da nicht auch noch ein Gangwechselblitz rein?
Bitte die Änderung der Matrixanschlüsse beachten, beißt sich sonst mit den LEDs.
Wahnsinn und Verstand trennt nur eine dünne Wand. (Daniel Düsentrieb)

Kunde

Au ja Wochenendziel erstmal erreicht. Dank dir.
Werde den Code heute abend direkt testen.
Super Sache das ihr mir hier so gut helft.
Vielen Dank für deine Hilfe.
Gibt es ein deutsches tutorial was ich mir durchlesen kann? Was für meine Bedürfnisse ausreicht?
Es gibt noch so viel was ich ändern möchte.
Zb. Die Schrift doppelte Stärke, schaltblitz,


Im XSIM forum wurde mir auch gesagt woran die Verzögerung liegt:
Das ist ein häufiger Fehler bei der Verwendung der gleichen Serien für Eingang und Ausgang. Entfernen Sie alle Ihre Serial.println von Ihrem Schleife und das gut sein sollte. Outputing Daten verwirrt / Verzögerungen gamedash.

So dann nochmal tausendfachen Dank, ich weiß nicht ob ich das jemals wieder gut machen kann.

Kunde

sodele habe den fehler wegen der verzögerung gefunden, es war delay100 schuld.

habe nun versucht die schrift doppelt zu setzten, das problem ist das aber mit maxmatrix nur 4 nebeneinander geschrieben werden können. hätte gerne die schriftstärke über das gesamte diplay.

muss ich dafür die ccp und h datei in Libaries ändern oder kann ich das so einfach im sketch?

habe schon versucht den fertigen skatch den wir nun erstellt haben einfach in den unten stehenden ein zufügen aber er hat immer fehler ohne ende.

agmue

habe nun versucht die schrift doppelt zu setzten,
Du könntest auch den Font verändern.
Wahnsinn und Verstand trennt nur eine dünne Wand. (Daniel Düsentrieb)

Go Up