Hallo
Mega einen großen Schritt weiter gekommen.
Die Auslösung funktioniert.
IR Sensor wird ausgelöst und das LCD und die Matrix schalten sich ein.
Nach ca. 15 Sekunden verschwindet die Schrift. Matrix bleibt leider noch an.
- LCD Schrift verschwindet aber die Hintergrundbeleuchtung bleibt an. Kann man das auch noch ändern ?
Änderung: Nach mehrmaligen Testen bleibt leider auch die Schrift manchmal stehen.
- Die Matrix behält den letzten Stand ( bei mir ein Pfeil oder Kreuz ) bei und geht nicht aus.
Mein Wunsch wäre es noch wenn die Matrix komplett aus geht.
Nochmals vielen Dank !!!
Hier nochmal mein kompletter Sketch
// LCD BLINKEDE SCHRIFT MIT 8x8 MATRIX
// SOLL DEMNÄCHST DURCH EINEN IR-SENSOR AUSGELÖST WERDEN
// SKETCH IST NOCH NICHT AUFGRÄUMT
// ICH WEISS, DASS ES UNGÜNSTIG MIT DEM DELAY IST ABER ICH BEKOOME ES ZUR ZEIT NOCH NICHT ANDERS HIN (milsec)
#include <LiquidCrystal.h> //LCD-Bibliothek laden
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //In dieser Zeile wird festgelegt, welche Pins des Mikrocontrollerboards für das LCD verwendet wird (Am besten erstmal nicht verändern).
#define PIN_DIN 13 // ANSCHLÜSSE 8x8 MATRIX
#define PIN_CLK 10
#define PIN_CS 9
#define NUM_DEVICES 1
#include <LedControl.h>
// Test
int sensorPin1 = 6; // an diesem Pin ist ein Abstandssensor angeschlossen
// Tent ende
LedControl lc = LedControl(PIN_DIN, PIN_CLK, PIN_CS, NUM_DEVICES);
byte frames[3][8] =
{
{
B00011000,
B00011000,
B00011000,
B00011000,
B10011001,
B01011010,
B00111100,
B00011000
},
{
B10000001,
B01000010,
B00100100,
B00011000,
B00011000,
B00100100,
B01000010,
B10000001
},
{
B00011000,
B00011000,
B00011000,
B00011000,
B10011001,
B01011010,
B00111100,
B00011000
}
};
constexpr byte pitPin {6};
constexpr bool ausgeloest {LOW};
constexpr uint32_t pitIntervall {25000};
uint32_t pitInTime;
void setup()
{
Serial.begin(115200);
Serial.println(F("Start..."));
lcd.begin(16, 2); //Im Setup wird angegeben, wie viele Zeichen und Zeilen verwendet werden. Hier: 16 Zeichen in 2 Zeilen.
lcd.print(F("PITSTOP")); // change this text to whatever you like. keep it clean.
lcd.setCursor(0, 1); // set cursor to column 0, row 1
lcd.print(F("IN PROGRESS"));
lc.shutdown(0, false);
// intensity level (0..15)
lc.setIntensity(0, 2);
lc.clearDisplay(0);
pinMode(pitPin, (ausgeloest ? INPUT : INPUT_PULLUP));
//Test
pinMode(sensorPin1, INPUT);
// Test ende
}
void loop()
{
if (pitIncomming())
{
pitStop();
switchDisplay();
}
}
void pitStop()
{
static byte frame = 0;
static uint32_t lastSwitch = 0;
constexpr uint32_t intervall {350};
if (millis() - lastSwitch > intervall)
{
for (int dot = 0; dot < 8; dot++)
{ lc.setRow(0, dot, frames[frame][dot]); }
frame++;
if (frame >= 3)
{ frame = 0; }
lastSwitch += intervall;
}
}
void switchDisplay()
{
static uint32_t lastDisplay = 0;
static bool isActive = false;
constexpr uint32_t intervall {350};
if (millis() - lastDisplay > intervall)
{
lastDisplay += intervall;
isActive = !isActive;
isActive ? lcd.display() : lcd.noDisplay();
}
}
bool pitIncomming()
{
bool isPit = false;
if (digitalRead(pitPin) == ausgeloest)
{ pitInTime = millis(); }
if (millis() - pitInTime < pitIntervall)
{ isPit = true; }
return isPit;
}
Gruß