Hello,
I want combine a DCF77 Modul with the 32x32 RGB LED Matrix Panel - 4mm Pitch (PRODUCT ID: 607 adafruit)
Only isolated systems works.
I get the signals from DCF77 and I can interpret the signal in “0” and “1”. (see picture “Es_ist”)
In the next step I want save it in an array (line 85). But if I activate the array the RGB doesn’t work (see picture “red_line”). Without line 85 (array) the RGB works (see picture “Es_ist”).
If I activate more lines with Serial.print(“ “); the RGB also doesn’t work.
My problem is to save the digital numbers in an array or variable because then the RGB doesn’t work.
What can I do better?
Michael
#include <Adafruit_GFX.h> // Core graphics library
#include <RGBmatrixPanel.h> // Hardware-specific library
#define BLINKPIN 13
#define DCF77PIN 12
#define CLK 8 // MUST be on PORTB! (Use pin 11 on Mega)
#define OE 9
#define LAT 10
#define A A0
#define B A1
#define C A2
#define D A3
RGBmatrixPanel matrix(A, B, C, D, CLK, LAT, OE, false);
int SignalHIGHStart = 0;
int SignalHIGHEnde = 0;
int SignalHIGHZeit = 0;
int SignalLOWStart = 0;
int SignalLOWEnde = 0;
int SignalLOWZeit = 0;
int stunde = 0;
int minute = 0;
int sekunde = 0;
int wochentag = 0;
int tag = 0;
int monat = 0;
int jahr = 0;
int array[60];
int a;
bool Signal = false;
bool neueMinute = false;
int bitnr = -1;
void setup()
{
Serial.begin(9600);
pinMode(DCF77PIN, INPUT);
pinMode(BLINKPIN, OUTPUT);
matrix.begin();
// fill the screen with 'black'
matrix.fillScreen(matrix.Color333(0, 0, 0));
delay(100);
}
void loop()
{
int pinValue = digitalRead(DCF77PIN); //Wert am PIN einlesen
if (pinValue == HIGH && Signal == false)
{ //PIN ist HIGH, vorher war kein HIGH
Signal = true;
SignalHIGHStart = millis();
SignalLOWEnde = SignalHIGHStart;
SignalLOWZeit = SignalLOWEnde - SignalLOWStart;
//Serial.println(SignalHIGHStart);
//Serial.println(SignalLOWZeit);
//DEBUG Ausgabe nach Serial
}
if (pinValue == LOW && Signal == true)
{ //PIN ist LOW vorher war HIGH
Signal = false;
SignalHIGHEnde = millis();
SignalLOWStart = SignalHIGHEnde;
SignalHIGHZeit = SignalHIGHEnde - SignalHIGHStart;
//Serial.println(SignalLOWStart);
//Serial.println(SignalHIGHZeit);
bitnr = bitnr + 1;
a = SignalHIGHZeit;
Auswertung();
Serial.println(bitnr);
Serial.println(a);
//array[bitnr] = a; //without it's works
//Serial.print("array[");
//Serial.print(a);
//Serial.print("] ist: ");
//Serial.print(a);
//Auswertung();
//Serial.print(" wird jetzt: ");
//Serial.println(a);
} //ENDE (pinValue == LOW && Signal == true)
if (SignalLOWZeit >= 1750)
{
bitnr = -1;
neueMinute = true;
}
if (neueMinute)
{
ESIST();
}
} //END LOOP
//Gebe den Wert zurück den das Bit aufgrund der HIGH Zeit-Länge haben muss
int werteBitAus (int SignalHIGHZeit)
{
//mit den Zeiten ein wenig größzügig sein, die schwanken um den Optimalwert
if (SignalHIGHZeit >= 0 && SignalHIGHZeit <= 140) {return 0;}
if (SignalHIGHZeit >= 141 && SignalHIGHZeit <= 220) {return 1;}
}
//Wenn LOW Zeit größer 1750ms dann neue Minute BitNummer auf 0 setzen,
//ansonsten BitNummer hochzählen
void feststellenObNeueMinute (int SignalLOWZeit)
{
//auch hier ein wenig Luft lassen bei der Zeit.
if (SignalLOWZeit >= 1750) {bitnr = 0; neueMinute = true;} else {bitnr++; }
}
void Auswertung()
{
if (a >= 0 && a <= 140)
{
a = 0;
}
if (a >= 141 && a <= 220)
{
a = 1;
}
}
void Kreis()
{
matrix.drawCircle(16, 20, 7, matrix.Color333(0, 0, 1));
delay(500);
}
void ESIST()
{
//E
matrix.drawLine(7, 0, 7, 4, matrix.Color333(1, 0, 0));
matrix.drawLine(8, 0, 9, 0, matrix.Color333(1, 0, 0));
matrix.drawPixel(8, 2, matrix.Color333(1, 0, 0));
matrix.drawLine(8, 4, 9, 4, matrix.Color333(1, 0, 0));
//S
matrix.drawLine(11, 0, 13, 0, matrix.Color333(1, 0, 0));
matrix.drawLine(11, 1, 11, 2, matrix.Color333(1, 0, 0));
matrix.drawPixel(12, 2, matrix.Color333(1, 0, 0));
matrix.drawLine(13, 2, 13, 4, matrix.Color333(1, 0, 0));
matrix.drawLine(11, 4, 12, 4, matrix.Color333(1, 0, 0));
//I
matrix.drawLine(16, 0, 16, 4, matrix.Color333(0, 1, 0));
//S
matrix.drawLine(18, 0, 20, 0, matrix.Color333(0, 1, 0));
matrix.drawLine(18, 1, 18, 2, matrix.Color333(0, 1, 0));
matrix.drawPixel(19, 2, matrix.Color333(0, 1, 0));
matrix.drawLine(20, 2, 20, 4, matrix.Color333(0, 1, 0));
matrix.drawLine(18, 4, 19, 4, matrix.Color333(0, 1, 0));
//T
matrix.drawLine(22, 0, 24, 0, matrix.Color333(0, 1, 0));
matrix.drawLine(23, 1, 23, 4, matrix.Color333(0, 1, 0));
}